MCUBoot 演示
简介
注意:以下说明假设对象是 Linux 或适用于 Linux (WSL) 的 Windows Subsystem 主机。WSL 安装和设置说明请参阅此处。
演示目前支持 esp32 架构。以下是针对此硬件的说明。
演示包含 MCUBoot 启动应用程序,首先禁用引导加载程序看门狗定时器,
打印其版本号,然后自行确认,这样如果是更新版本,则不会恢复到早期版本。该应用程序继续
定期打印 "hello world"。
该演示还详细介绍了应用程序的签名和升级过程,
并为在其他 SoC上 实现提供了移植指南。最后,还演示了使用 mcumgr
来检索映像诊断、
修改/上传映像,以及从您的主机 PC 触发其他主板功能。
构建和上传引导加载程序
-
下载然后输入存储库目录。
git clone --recurse-submodules https://github.com/FreeRTOS/Lab-Project-FreeRTOS-MCUBoot.git
cd Lab-Project-FreeRTOS-MCUBoot
-
应用引导加载程序和应用程序所需的补丁。
git -C lib/mcuboot apply ../../patches/mcuboot.patch
git -C lib/mcuboot/boot/espressif/hal/esp-idf/ apply ../../../../../../patches/esp-idf.patch
-
配置 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
-
连接您的 esp32 并识别其 USB 描述符(例如 '/dev/ttyUSB0'),然后设置此 ID。
export ESPPORT=/dev/<USB>
-
从以下选项中确定您想要的加密验证(如果有):
- ecdsa-p256
- rsa-2048
- rsa-3072
-
如果需要加密映像验证,请按照以下命令生成构建文件,将
signature_SCHEME
设置为完全等于上述某个选项。
cmake -GNinja -DSIGNING_SCHEME=ecdsa-p256 -B build
这将在引导加载程序项目目录中生成所选方案的私钥,
其默认名称为 mcuboot-private-key.pem
,该私钥将用于
在应用程序映像上签名。同时,cmake
目标负责将公钥嵌入引导加载程序,以便它可以验证映像。
如果您不想要加密映像验证,可以省略上方命令中 SIGNING_SCHEME
的定义。
-
最后,要将引导加载程序上传到主板,请运行以下命令。
cmake --build build --target mcuboot-flash
构建和上传应用程序
构建和闪现引导加载程序后,请继续执行以下操作。如果您在新的 shell 会话中,
您可能需要重新运行上述步骤以配置 IDF 工具链,并设置
ESPPORT
。
-
输入应用程序项目目录。
cd proj/espressif/esp32/app
-
同样,在为应用程序生成构建文件时,必须设置 SIGNING_SCHEME
以匹配为引导加载程序选择的任何方案。此外,您必须设置 KEY_PATH
以指向引导加载程序项目生成的私钥。如果您在引导加载程序中选择退出加密映像验证,
您必须同样省略下方 SIGNING_SCHEME
和
KEY_PATH
的定义。最后,您可以通过添加
-DAPP_VERSION=X.Y.Z
到以下命令来设置应用程序版本。
cmake -DSIGNING_SCHEME=ecdsa-p256 -DKEY_PATH=../bootloader/mcuboot-private-key.pem -GNinja -B build
-
构建应用程序。
cmake --build build --target app
-
上传映像有两个选项:直接闪现到主映像插槽,
或闪现到辅助映像插槽,
如果映像的版本比主映像的版本新,会在后续启动时提示升级。如果您的主插槽中没有映像,
那么直接将映像上传至主插槽:
cmake --build build --target mcuboot-app-flash
当排队升级时,如果辅助映像的版本比主映像的更新,
两个映像将被交换,更新映像将被暂时启动,
并在后续启动时恢复到原版本(如果更新映像不确认自己的话)。因此应用程序调用
boot_set_confirmed
,使其保持为主映像。已更新的映像
不执行此操作将恢复到原版本。要升级映像,请执行以下命令:
cmake --build build --target mcuboot-app-upgrade
-
最后,查看设备的输出。
idf.py monitor
调试应用程序
-
使用以下命令在两个单独的 shell 会话中配置 ESP-IDF 工具:
./lib/mcuboot/boot/espressif/hal/esp-idf/install.sh
source lib/mcuboot/boot/espressif/hal/esp-idf/export.sh
-
在一个终端中,输入应用目录并启动 OpenOCD 服务器。
cd proj/espressif/esp32/app
idf.py openocd
-
在另一个终端中,输入应用目录并启动 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.