安全性
内存保护
从 ESP-IDF v6.2 开始,在 ESP32-C5、ESP32-C6、ESP32-C61、ESP32-H2 和 ESP32-P4 上,二级引导加载程序不再配置或锁定任何 RISC-V PMP 表项。完整的 PMP 配置改由应用程序在启动早期编程并锁定。
被引导加载程序锁定的 PMP 表项在下一次 CPU 复位前无法重新配置。由于已部署设备上的引导加载程序通常不会更新,旧版引导加载程序锁定的表项可能与使用较新 ESP-IDF 版本构建的应用程序所期望的 PMP 布局发生冲突,导致启动失败,或使内存保护在没有任何提示的情况下失效。
使用 ESP-IDF 构建的应用程序不受影响,因为应用程序会在启动阶段、任何应用代码运行之前,自行编程并锁定完整的 PMP 配置。
由 ESP-IDF 二级引导加载程序启动的自定义(非 ESP-IDF)应用程序不得假定交接时任何 PMP 表项已被预先配置或锁定。此前,引导加载程序会配置并锁定覆盖 ROM 和外设地址空间等区域的表项;此类应用程序现在必须自行完成 PMP 配置。
镜像校验功能从 bootloader_support 中拆分
镜像校验与安全启动签名校验已从 bootloader_support 移至新的
esp_image_verify 组件。bootloader_support 不再依赖 mbedtls。
此前通过
bootloader_support间接获得mbedtls或app_update依赖的组件,现在必须在PRIV_REQUIRES/REQUIRES中显式声明。bootloader_common_get_sha256_of_partition()已弃用,请改用esp_partition_get_sha256()。在未包含
esp_image_verify组件的工程中(未启用 OTA 或签名镜像功能),调用esp_partition_get_sha256()或上述弃用函数会在链接时因esp_image_get_metadata/bootloader_sha256_flash_contents未定义引用而失败。请将esp_image_verify(或app_update,它包含该组件并提供 OTA API)添加到调用组件的PRIV_REQUIRES或工程的COMPONENTS列表中。启用 CONFIG_SECURE_SIGNED_ON_UPDATE_NO_SECURE_BOOT 的工程必须包含
esp_image_verify组件,该组件提供启动时校验当前应用签名的检查。 使用 OTA 的应用会通过app_update自动引入该组件;裁剪组件依赖图的应用(如启用MINIMAL_BUILD)必须将esp_image_verify(或app_update)添加到PRIV_REQUIRES或工程的COMPONENTS中。否则构建将以#error失败,而不会静默跳过已配置的安全检查。Kconfig 选项
CONFIG_SECURE_SIGNED_DATA_PARTITION已重命名为CONFIG_APP_UPDATE_SECURE_SIGNED_DATA_PARTITION(通过sdkconfig.rename兼容旧名称)。