defunct: playing around with bootloaders
This commit is contained in:
8
software/apps/snippets/bootloader/CMakeLists.txt
Normal file
8
software/apps/snippets/bootloader/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
||||
|
||||
project(bootloader LANGUAGES C)
|
||||
zephyr_include_directories(../../../include)
|
||||
add_subdirectory(../../../lib lib)
|
||||
target_sources(app PRIVATE src/main.c)
|
||||
34
software/apps/snippets/bootloader/README.md
Normal file
34
software/apps/snippets/bootloader/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Firmware Node Application
|
||||
|
||||
This Zephyr application provides firmware management capabilities for the irrigation system.
|
||||
|
||||
**Tested on Zephyr 4.1.99**
|
||||
|
||||
## Features
|
||||
|
||||
### Step 1: Shell with Reset Command
|
||||
- Shell interface with custom "reset" command
|
||||
- Warm reboot functionality
|
||||
|
||||
### Planned Features
|
||||
- MCUboot support with partition manager
|
||||
- Firmware version display
|
||||
- MCUmgr support for OTA updates
|
||||
|
||||
## Building
|
||||
|
||||
```bash
|
||||
west build -p auto -b weact_stm32g431_core apps/firmware_node -- -DBOARD_FLASH_RUNNER=blackmagicprobe
|
||||
```
|
||||
|
||||
## Flashing
|
||||
|
||||
```bash
|
||||
west flash
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Connect to the device via serial console and use the shell:
|
||||
- `reset` - Reboot the system
|
||||
- `help` - Show available commands
|
||||
5
software/apps/snippets/bootloader/VERSION
Normal file
5
software/apps/snippets/bootloader/VERSION
Normal file
@@ -0,0 +1,5 @@
|
||||
VERSION_MAJOR = 0
|
||||
VERSION_MINOR = 0
|
||||
PATCHLEVEL = 1
|
||||
VERSION_TWEAK = 0
|
||||
EXTRAVERSION = testing
|
||||
8
software/apps/snippets/bootloader/erase.sh
Executable file
8
software/apps/snippets/bootloader/erase.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
/home/edi/zephyr-sdk-0.17.1/arm-zephyr-eabi/bin/arm-zephyr-eabi-gdb \
|
||||
-ex 'target extended-remote /dev/ttyACM0' \
|
||||
-ex 'monitor swdp_scan' \
|
||||
-ex 'attach 1' \
|
||||
-ex 'monitor erase_mass' \
|
||||
-ex 'detach' \
|
||||
-ex 'quit' \
|
||||
16
software/apps/snippets/bootloader/prj.conf
Normal file
16
software/apps/snippets/bootloader/prj.conf
Normal file
@@ -0,0 +1,16 @@
|
||||
CONFIG_SHELL=y
|
||||
CONFIG_REBOOT=y
|
||||
|
||||
# MCUboot support for recovery request function
|
||||
CONFIG_MCUBOOT_BOOTUTIL_LIB=y
|
||||
CONFIG_MCUBOOT_IMG_MANAGER=y
|
||||
CONFIG_IMG_MANAGER=y
|
||||
|
||||
# Flash and Stream Configuration (required for IMG_MANAGER)
|
||||
CONFIG_FLASH=y
|
||||
CONFIG_STREAM_FLASH=y
|
||||
|
||||
# Retention system
|
||||
CONFIG_RETENTION=y
|
||||
CONFIG_RETENTION_BOOT_MODE=y
|
||||
CONFIG_RETAINED_MEM=y
|
||||
42
software/apps/snippets/bootloader/src/main.c
Normal file
42
software/apps/snippets/bootloader/src/main.c
Normal file
@@ -0,0 +1,42 @@
|
||||
#include <zephyr/kernel.h>
|
||||
#include <app_version.h>
|
||||
#include <zephyr/shell/shell.h>
|
||||
#include <zephyr/sys/reboot.h>
|
||||
#include <zephyr/dfu/mcuboot.h>
|
||||
#include <zephyr/retention/bootmode.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/* Shell command handler for "reset" */
|
||||
static int cmd_reset(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
shell_print(sh, "Rebooting system...");
|
||||
k_sleep(K_MSEC(100)); // Optional delay for user to see the message
|
||||
sys_reboot(SYS_REBOOT_WARM);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_download(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
int rc;
|
||||
|
||||
/* Set boot mode to serial recovery */
|
||||
rc = bootmode_set(BOOT_MODE_TYPE_BOOTLOADER);
|
||||
if (rc < 0) {
|
||||
shell_error(sh, "Failed to set boot mode: %d", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
shell_print(sh, "Boot mode set to recovery. Rebooting to bootloader...");
|
||||
k_sleep(K_MSEC(100));
|
||||
sys_reboot(SYS_REBOOT_WARM);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Register the shell command */
|
||||
SHELL_CMD_REGISTER(reset, NULL, "Reboot the system", cmd_reset);
|
||||
SHELL_CMD_REGISTER(download, NULL, "Download firmware", cmd_download);
|
||||
|
||||
int main(void){
|
||||
printk("Bootloader test version %s\n", APP_VERSION_EXTENDED_STRING);
|
||||
return 0;
|
||||
}
|
||||
5
software/apps/snippets/bootloader/sysbuild.conf
Normal file
5
software/apps/snippets/bootloader/sysbuild.conf
Normal file
@@ -0,0 +1,5 @@
|
||||
# Sysbuild configuration for firmware_node with MCUboot
|
||||
|
||||
# Enable MCUboot as bootloader
|
||||
SB_CONFIG_BOOTLOADER_MCUBOOT=y
|
||||
SB_CONFIG_MCUBOOT_MODE_SINGLE_APP=y
|
||||
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Copyright (c) 2021 Nordic Semiconductor ASA
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include "flash_partitions_128kb.dtsi"
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
zephyr,code-partition = &slot0_partition;
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Devicetree Overlay for 128KB Flash
|
||||
* - MCUboot Bootloader (32KB)
|
||||
* - Application Slot (96KB)
|
||||
*/
|
||||
|
||||
&flash0 {
|
||||
/delete-node/ partitions;
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
boot_partition: partition@0 {
|
||||
label = "mcuboot";
|
||||
reg = <0x00000000 DT_SIZE_K(32)>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
slot0_partition: partition@8000 {
|
||||
label = "image-0";
|
||||
reg = <0x00008000 DT_SIZE_K(96)>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* Add retention memory to the existing SRAM node */
|
||||
&sram0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
retainedmem {
|
||||
compatible = "zephyr,retained-ram";
|
||||
status = "okay";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
boot_mode: retention@7f00 {
|
||||
compatible = "zephyr,retention";
|
||||
status = "okay";
|
||||
reg = <0x7f00 0x100>;
|
||||
prefix = [08 04];
|
||||
checksum = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
zephyr,boot-mode = &boot_mode;
|
||||
zephyr,console = &cdc_acm_uart0;
|
||||
};
|
||||
};
|
||||
|
||||
&zephyr_udc0 {
|
||||
status = "okay";
|
||||
|
||||
cdc_acm_uart0: cdc_acm_uart0 {
|
||||
compatible = "zephyr,cdc-acm-uart";
|
||||
label = "CDC_ACM_0";
|
||||
};
|
||||
};
|
||||
46
software/apps/snippets/bootloader/sysbuild/mcuboot.conf
Normal file
46
software/apps/snippets/bootloader/sysbuild/mcuboot.conf
Normal file
@@ -0,0 +1,46 @@
|
||||
#
|
||||
# MCUboot Configuration for Serial Recovery over USB-CDC
|
||||
#
|
||||
|
||||
# Enables serial recovery mode in MCUboot.
|
||||
CONFIG_MCUBOOT_SERIAL=y
|
||||
|
||||
# Tell MCUboot to check for a trigger to enter recovery
|
||||
CONFIG_BOOT_SERIAL_BOOT_MODE=y
|
||||
|
||||
# --- USB Stack Configuration ---
|
||||
CONFIG_USB_DEVICE_STACK=y
|
||||
CONFIG_USB_DEVICE_PRODUCT="MCUboot Serial Recovery"
|
||||
|
||||
# Use USB CDC ACM for MCUboot serial recovery (not UART)
|
||||
CONFIG_BOOT_SERIAL_CDC_ACM=y
|
||||
|
||||
# --- Disable Zephyr Console to avoid conflicts ---
|
||||
# MCUboot's serial_adapter doesn't work well with the general console subsystem.
|
||||
CONFIG_UART_CONSOLE=n
|
||||
CONFIG_CONSOLE_HANDLER=n
|
||||
CONFIG_CONSOLE=n
|
||||
|
||||
# --- Flash and Stream Configuration (required for IMG_MANAGER) ---
|
||||
CONFIG_FLASH=y
|
||||
CONFIG_STREAM_FLASH=y
|
||||
|
||||
# --- mcumgr Configuration ---
|
||||
# MCUMGR requires NET_BUF, even for serial transport.
|
||||
CONFIG_NET_BUF=y
|
||||
CONFIG_NET_LOG=n
|
||||
|
||||
# Enables the mcumgr library and necessary command handlers
|
||||
CONFIG_MCUMGR=y
|
||||
CONFIG_IMG_MANAGER=y
|
||||
CONFIG_MCUMGR_GRP_IMG=y
|
||||
CONFIG_MCUMGR_GRP_OS=y
|
||||
|
||||
# --- Retention Configuration ---
|
||||
CONFIG_RETAINED_MEM=y
|
||||
CONFIG_RETENTION=y
|
||||
CONFIG_RETENTION_BOOT_MODE=y
|
||||
|
||||
# --- Optional: Reduce memory usage ---
|
||||
CONFIG_MAIN_STACK_SIZE=2048
|
||||
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1024
|
||||
17
software/apps/snippets/bootloader/sysbuild/mcuboot.overlay
Normal file
17
software/apps/snippets/bootloader/sysbuild/mcuboot.overlay
Normal file
@@ -0,0 +1,17 @@
|
||||
#include "flash_partitions_128kb.dtsi"
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
zephyr,code-partition = &boot_partition;
|
||||
zephyr,console = &cdc_acm_uart0;
|
||||
};
|
||||
};
|
||||
|
||||
&zephyr_udc0 {
|
||||
status = "okay";
|
||||
|
||||
cdc_acm_uart0: cdc_acm_uart0 {
|
||||
compatible = "zephyr,cdc-acm-uart";
|
||||
label = "CDC_ACM_0";
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user