This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 24c0e8bc75115344d075dd400c8f82a4ccccc769 Author: Gerson Fernando Budke <[email protected]> AuthorDate: Sat Dec 4 11:51:51 2021 -0300 boards/arm/samv7/samv71-xult: Add MCUboot support Refactor to use common sam_progmem implementation and enable MCUboot support. Signed-off-by: Gerson Fernando Budke <[email protected]> --- boards/arm/samv7/samv71-xult/README.txt | 80 ++++++++++++++++++++++ .../samv71-xult/configs/mcuboot-loader/defconfig | 62 +++++++++++++++++ .../samv71-xult/configs/mcuboot-nsh/defconfig | 63 +++++++++++++++++ boards/arm/samv7/samv71-xult/src/sam_bringup.c | 39 ++--------- 4 files changed, 210 insertions(+), 34 deletions(-) diff --git a/boards/arm/samv7/samv71-xult/README.txt b/boards/arm/samv7/samv71-xult/README.txt index d56cee6..891c46e 100644 --- a/boards/arm/samv7/samv71-xult/README.txt +++ b/boards/arm/samv7/samv71-xult/README.txt @@ -2572,3 +2572,83 @@ Configuration sub-directories probably means some kind of memory corruption. 2017-01-30: knsh configuration does not yet run correctly. + + mcuboot-loader: + This configuration exercises the port of MCUboot loader to NuttX. + + In this configuration both primary, secondary and scratch partitions are + mapped into the internal flash. + Relevant configuration settings: + + CONFIG_BOARD_LATE_INITIALIZE=y + + CONFIG_BOOT_MCUBOOT=y + CONFIG_MCUBOOT_BOOTLOADER=y + + CONFIG_SAMV7_FORMAT_MCUBOOT=y + CONFIG_USER_ENTRYPOINT="mcuboot_loader_main" + + Flash bootloader using embedded debugger: + openocd -f interface/cmsis-dap.cfg \ + -c 'transport select swd' \ + -c 'set CHIPNAME atsamv71q21' \ + -f target/atsamv.cfg \ + -c 'reset_config srst_only' \ + -c init -c targets \ + -c 'reset halt' \ + -c 'program nuttx.bin 0x400000' \ + -c 'reset halt' \ + -c 'atsamv gpnvm set 1' \ + -c 'reset run' -c shutdown + + mcuboot-nsh: + This configuration exercises the MCUboot compatible application slot + example. The application is NuttX nsh with some special commands. + + Generate signed binaries for MCUboot compatible application: + + ./apps/boot/mcuboot/mcuboot/scripts/imgtool.py sign \ + --key apps/boot/mcuboot/mcuboot/root-rsa-2048.pem --align 8 \ + --version 1.0.0 --header-size 0x200 --pad-header --slot-size 0xe0000 \ + nuttx/nuttx.bin mcuboot_nuttx.app.nsh.confirmed-v1.bin + + ./apps/boot/mcuboot/mcuboot/scripts/imgtool.py sign \ + --key apps/boot/mcuboot/mcuboot/root-rsa-2048.pem --align 8 \ + --version 2.0.0 --header-size 0x200 --pad-header --slot-size 0xe0000 \ + nuttx/nuttx.bin mcuboot_nuttx.app.nsh.confirmed-v2.bin + + Flash application version 1.0.0 at MCUboot Slot-0: + + openocd -f interface/cmsis-dap.cfg \ + -c 'transport select swd' \ + -c 'set CHIPNAME atsamv71q21' \ + -f target/atsamv.cfg \ + -c 'reset_config srst_only' \ + -c init -c targets \ + -c 'reset halt' \ + -c 'program mcuboot_nuttx.app.nsh.confirmed-v1.bin 0x420000' \ + -c 'reset halt' \ + -c 'atsamv gpnvm set 1' \ + -c 'reset run' -c shutdown + + Flash version 2.0.0 at MCUboot Slot-1: + + openocd -f interface/cmsis-dap.cfg \ + -c 'transport select swd' \ + -c 'set CHIPNAME atsamv71q21' \ + -f target/atsamv.cfg \ + -c 'reset_config srst_only' \ + -c init -c targets \ + -c 'reset halt' \ + -c 'program mcuboot_nuttx.app.nsh.confirmed-v2.bin 0x500000' \ + -c 'reset halt' \ + -c 'atsamv gpnvm set 1' \ + -c 'reset run' -c shutdown + + Relevant configuration settings: + + CONFIG_BOOT_MCUBOOT=y + CONFIG_MCUBOOT_SLOT_CONFIRM_EXAMPLE=y + + CONFIG_SAMV7_FORMAT_MCUBOOT=y + CONFIG_USER_ENTRYPOINT="nsh_main" diff --git a/boards/arm/samv7/samv71-xult/configs/mcuboot-loader/defconfig b/boards/arm/samv7/samv71-xult/configs/mcuboot-loader/defconfig new file mode 100644 index 0000000..a668ad8 --- /dev/null +++ b/boards/arm/samv7/samv71-xult/configs/mcuboot-loader/defconfig @@ -0,0 +1,62 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_SAMV7_UART0 is not set +# CONFIG_SAMV7_UART2 is not set +# CONFIG_SAMV7_UART4 is not set +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD="samv71-xult" +CONFIG_ARCH_BOARD_SAMV71_XULT=y +CONFIG_ARCH_BUTTONS=y +CONFIG_ARCH_CHIP="samv7" +CONFIG_ARCH_CHIP_SAMV71=y +CONFIG_ARCH_CHIP_SAMV71Q21=y +CONFIG_ARCH_CHIP_SAMV71Q=y +CONFIG_ARCH_CHIP_SAMV7=y +CONFIG_ARCH_CHIP_SAMV7_MEM_FLASH=0x200000 +CONFIG_ARCH_CHIP_SAMV7_MEM_RAM=0x60000 +CONFIG_ARCH_INTERRUPTSTACK=2048 +CONFIG_ARCH_IRQBUTTONS=y +CONFIG_ARCH_STACKDUMP=y +CONFIG_ARMV7M_DCACHE=y +CONFIG_ARMV7M_ICACHE=y +CONFIG_ARMV7M_LAZYFPU=y +CONFIG_BOARDCTL_RESET=y +CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=51262 +CONFIG_BOOT_MCUBOOT=y +CONFIG_BUILTIN=y +CONFIG_FS_PROCFS=y +CONFIG_MCUBOOT_BOOTLOADER=y +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_LINELEN=64 +CONFIG_NSH_READLINE=y +CONFIG_PREALLOC_TIMERS=4 +CONFIG_RAM_SIZE=393216 +CONFIG_RAM_START=0x20400000 +CONFIG_RAW_BINARY=y +CONFIG_RR_INTERVAL=200 +CONFIG_SAMV7_FORMAT_MCUBOOT=y +CONFIG_SAMV7_GPIOA_IRQ=y +CONFIG_SAMV7_GPIOB_IRQ=y +CONFIG_SAMV7_GPIOD_IRQ=y +CONFIG_SAMV7_GPIO_IRQ=y +CONFIG_SAMV7_SYSTEMRESET=y +CONFIG_SAMV7_USART1=y +CONFIG_SAMV7_XDMAC=y +CONFIG_SCHED_HPWORK=y +CONFIG_SCHED_WAITPID=y +CONFIG_SDCLONE_DISABLE=y +CONFIG_START_DAY=10 +CONFIG_START_MONTH=3 +CONFIG_START_YEAR=2014 +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_RAMTEST=y +CONFIG_USART1_SERIAL_CONSOLE=y +CONFIG_USER_ENTRYPOINT="mcuboot_loader_main" diff --git a/boards/arm/samv7/samv71-xult/configs/mcuboot-nsh/defconfig b/boards/arm/samv7/samv71-xult/configs/mcuboot-nsh/defconfig new file mode 100644 index 0000000..eff9b0d --- /dev/null +++ b/boards/arm/samv7/samv71-xult/configs/mcuboot-nsh/defconfig @@ -0,0 +1,63 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_SAMV7_UART0 is not set +# CONFIG_SAMV7_UART2 is not set +# CONFIG_SAMV7_UART4 is not set +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD="samv71-xult" +CONFIG_ARCH_BOARD_SAMV71_XULT=y +CONFIG_ARCH_BUTTONS=y +CONFIG_ARCH_CHIP="samv7" +CONFIG_ARCH_CHIP_SAMV71=y +CONFIG_ARCH_CHIP_SAMV71Q21=y +CONFIG_ARCH_CHIP_SAMV71Q=y +CONFIG_ARCH_CHIP_SAMV7=y +CONFIG_ARCH_CHIP_SAMV7_MEM_FLASH=0x200000 +CONFIG_ARCH_CHIP_SAMV7_MEM_RAM=0x60000 +CONFIG_ARCH_INTERRUPTSTACK=2048 +CONFIG_ARCH_IRQBUTTONS=y +CONFIG_ARCH_STACKDUMP=y +CONFIG_ARMV7M_DCACHE=y +CONFIG_ARMV7M_ICACHE=y +CONFIG_ARMV7M_LAZYFPU=y +CONFIG_BOARDCTL_RESET=y +CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=51262 +CONFIG_BOOT_MCUBOOT=y +CONFIG_BUILTIN=y +CONFIG_FS_PROCFS=y +CONFIG_MCUBOOT_SLOT_CONFIRM_EXAMPLE=y +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_LINELEN=64 +CONFIG_NSH_READLINE=y +CONFIG_PREALLOC_TIMERS=4 +CONFIG_PTABLE_PARTITION=y +CONFIG_RAM_SIZE=393216 +CONFIG_RAM_START=0x20400000 +CONFIG_RAW_BINARY=y +CONFIG_RR_INTERVAL=200 +CONFIG_SAMV7_FORMAT_MCUBOOT=y +CONFIG_SAMV7_GPIOA_IRQ=y +CONFIG_SAMV7_GPIOB_IRQ=y +CONFIG_SAMV7_GPIOD_IRQ=y +CONFIG_SAMV7_GPIO_IRQ=y +CONFIG_SAMV7_SYSTEMRESET=y +CONFIG_SAMV7_USART1=y +CONFIG_SAMV7_XDMAC=y +CONFIG_SCHED_HPWORK=y +CONFIG_SCHED_WAITPID=y +CONFIG_SDCLONE_DISABLE=y +CONFIG_START_DAY=10 +CONFIG_START_MONTH=3 +CONFIG_START_YEAR=2014 +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_RAMTEST=y +CONFIG_USART1_SERIAL_CONSOLE=y +CONFIG_USER_ENTRYPOINT="nsh_main" diff --git a/boards/arm/samv7/samv71-xult/src/sam_bringup.c b/boards/arm/samv7/samv71-xult/src/sam_bringup.c index c59a7f3..d922e7c 100644 --- a/boards/arm/samv7/samv71-xult/src/sam_bringup.c +++ b/boards/arm/samv7/samv71-xult/src/sam_bringup.c @@ -62,6 +62,7 @@ #ifdef HAVE_PROGMEM_CHARDEV # include "sam_progmem.h" +# include "sam_progmem_common.h" #endif #if defined(HAVE_RTC_DSXXXX) || defined(HAVE_RTC_PCF85263) @@ -165,13 +166,13 @@ int sam_bringup(void) #ifdef HAVE_S25FL1 FAR struct qspi_dev_s *qspi; #endif -#if defined(HAVE_S25FL1) || defined(HAVE_PROGMEM_CHARDEV) +#if defined(HAVE_S25FL1) FAR struct mtd_dev_s *mtd; #endif #if defined(HAVE_RTC_DSXXXX) || defined(HAVE_RTC_PCF85263) FAR struct i2c_master_s *i2c; #endif -#if defined(HAVE_S25FL1_CHARDEV) || defined(HAVE_PROGMEM_CHARDEV) +#if defined(HAVE_S25FL1_CHARDEV) #if defined(CONFIG_BCH) char blockdev[18]; char chardev[12]; @@ -440,42 +441,12 @@ int sam_bringup(void) #ifdef HAVE_PROGMEM_CHARDEV /* Initialize the SAMV71 FLASH programming memory library */ - sam_progmem_initialize(); - - /* Create an instance of the SAMV71 FLASH program memory device driver */ - - mtd = progmem_initialize(); - if (!mtd) - { - syslog(LOG_ERR, "ERROR: progmem_initialize failed\n"); - } - - /* Use the FTL layer to wrap the MTD driver as a block driver */ - - ret = ftl_initialize(PROGMEM_MTD_MINOR, mtd); - if (ret < 0) - { - syslog(LOG_ERR, "ERROR: Failed to initialize the FTL layer: %d\n", - ret); - return ret; - } - -#if defined(CONFIG_BCH) - /* Use the minor number to create device paths */ - - snprintf(blockdev, 18, "/dev/mtdblock%d", PROGMEM_MTD_MINOR); - snprintf(chardev, 12, "/dev/mtd%d", PROGMEM_MTD_MINOR); - - /* Now create a character device on the block device */ - - ret = bchdev_register(blockdev, chardev, false); + ret = sam_progmem_common_initialize(); if (ret < 0) { - syslog(LOG_ERR, "ERROR: bchdev_register %s failed: %d\n", - chardev, ret); + syslog(LOG_ERR, "ERROR: Failed to initialize progmem: %d\n", ret); return ret; } -#endif /* defined(CONFIG_BCH) */ #endif #ifdef HAVE_USBHOST
