下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

MCUBoot 演示

简介

注意:以下说明假设对象是 Linux 或适用于 Linux (WSL) 的 Windows Subsystem 主机。WSL 安装和设置说明请参阅此处

演示目前支持 esp32 架构。以下是针对此硬件的说明。

演示包含 MCUBoot 启动应用程序,首先禁用引导加载程序看门狗定时器, 打印其版本号,然后自行确认,这样如果是更新版本,则不会恢复到早期版本。该应用程序继续 定期打印 "hello world"。

该演示还详细介绍了应用程序的签名和升级过程, 并为在其他 SoC上 实现提供了移植指南。最后,还演示了使用 mcumgr 来检索映像诊断、 修改/上传映像,以及从您的主机 PC 触发其他主板功能。

构建和上传引导加载程序

  1. 下载然后输入存储库目录。

    git clone --recurse-submodules https://github.com/FreeRTOS/Lab-Project-FreeRTOS-MCUBoot.git
    cd Lab-Project-FreeRTOS-MCUBoot
  2. 应用引导加载程序和应用程序所需的补丁。

    git -C lib/mcuboot apply ../../patches/mcuboot.patch
    git -C lib/mcuboot/boot/espressif/hal/esp-idf/ apply ../../../../../../patches/esp-idf.patch
  3. 配置 ESP-IDF 工具,然后输入引导加载程序项目目录。

    ./lib/mcuboot/boot/espressif/hal/esp-idf/install.sh
    source lib/mcuboot/boot/espressif/hal/esp-idf/export.sh
    cd proj/espressif/esp32/bootloader
  4. 连接您的 esp32 并识别其 USB 描述符(例如 '/dev/ttyUSB0'),然后设置此 ID。

    export ESPPORT=/dev/<USB>
  5. 从以下选项中确定您想要的加密验证(如果有):

    • ecdsa-p256
    • rsa-2048
    • rsa-3072
  6. 如果需要加密映像验证,请按照以下命令生成构建文件,将 signature_SCHEME 设置为完全等于上述某个选项。

    cmake -GNinja -DSIGNING_SCHEME=ecdsa-p256 -B build

    这将在引导加载程序项目目录中生成所选方案的私钥, 其默认名称为 mcuboot-private-key.pem,该私钥将用于 在应用程序映像上签名。同时,cmake 目标负责将公钥嵌入引导加载程序,以便它可以验证映像。

    如果您不想要加密映像验证,可以省略上方命令中 SIGNING_SCHEME 的定义。

  7. 最后,要将引导加载程序上传到主板,请运行以下命令。

    cmake --build build --target mcuboot-flash

构建和上传应用程序

构建和闪现引导加载程序后,请继续执行以下操作。如果您在新的 shell 会话中, 您可能需要重新运行上述步骤以配置 IDF 工具链,并设置 ESPPORT

  1. 输入应用程序项目目录。

    cd proj/espressif/esp32/app
  2. 同样,在为应用程序生成构建文件时,必须设置 SIGNING_SCHEME 以匹配为引导加载程序选择的任何方案。此外,您必须设置 KEY_PATH 以指向引导加载程序项目生成的私钥。如果您在引导加载程序中选择退出加密映像验证, 您必须同样省略下方 SIGNING_SCHEMEKEY_PATH 的定义。最后,您可以通过添加 -DAPP_VERSION=X.Y.Z 到以下命令来设置应用程序版本。

    cmake -DSIGNING_SCHEME=ecdsa-p256 -DKEY_PATH=../bootloader/mcuboot-private-key.pem -GNinja -B build
  3. 构建应用程序。

    cmake --build build --target app
  4. 上传映像有两个选项:直接闪现到主映像插槽, 或闪现到辅助映像插槽, 如果映像的版本比主映像的版本新,会在后续启动时提示升级。如果您的主插槽中没有映像, 那么直接将映像上传至主插槽:

    cmake --build build --target mcuboot-app-flash

    当排队升级时,如果辅助映像的版本比主映像的更新, 两个映像将被交换,更新映像将被暂时启动, 并在后续启动时恢复到原版本(如果更新映像不确认自己的话)。因此应用程序调用 boot_set_confirmed,使其保持为主映像。已更新的映像 不执行此操作将恢复到原版本。要升级映像,请执行以下命令:

    cmake --build build --target mcuboot-app-upgrade
  5. 最后,查看设备的输出。

    idf.py monitor

调试应用程序

  1. 使用以下命令在两个单独的 shell 会话中配置 ESP-IDF 工具:

    ./lib/mcuboot/boot/espressif/hal/esp-idf/install.sh
    source lib/mcuboot/boot/espressif/hal/esp-idf/export.sh
  2. 在一个终端中,输入应用目录并启动 OpenOCD 服务器。

    cd proj/espressif/esp32/app
    idf.py openocd
  3. 在另一个终端中,输入应用目录并启动 GDB 会话。

    cd proj/espressif/esp32/app
    idf.py gdb

串行启动模式和 MCUMGR 接口

串行启动模式默认启用,但可以通过设置 MCUBOOT_SERIAL 为 0 (在 mcuboot_config.h 中,位于 lib/mcuboot/boot/freertos 目录下)来禁用。在启动过程中检查串行启动引脚, 如果激活,则进入串行启动模式。演示中, 串行启动引脚配置为 GPIO 5,并且高态有效。将串行启动引脚 连接到 VCC 将触发串行模式,连接到 GND 将跳过串行模式。一旦串行模式运行, 您可以将主板和 mcumgr 接口,关于 mcumgr 的安装说明,请点击这里

MCUMGR 将通过 UART 引脚与主板通信,此演示中,UART 引脚设置为 GPIO 27 (RX)GPIO 26 (TX)。您可以使用 这种 USB 转 UART 线。

mcumgr 定义一个连接,设置 USB 描述符, 与您连接设备的 USB 转 UART 线相对应。

mcumgr conn add esp type="serial" connstring="dev=/dev/<USB>,baud=115200,mtu=256"

将启动串行引脚连接到 VCC,然后重置主板以进入串行启动恢复模式。主板 将记录其已进入串行启动模式。您可以继续使用 mcumgr 接口。

要列出设备上的映像,请运行以下命令:

mcumgr -c esp image list

要上传映像,请运行以下命令:

mcumgr -c esp image upload /path/to/mcuboot-image.bin

这需要有签名/格式化的 MCUBoot 映像。构建应用程序后,可以在 其构建目录下找到,为 build/mcuboot-app.bin

要重置主板,请运行以下命令:

mcumgr -c esp reset
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.