docs: Update cn trans for bootloader and host-apps in api-guides

This commit is contained in:
Zhang Shuxian 2024-07-12 11:33:47 +08:00
parent 9ca974c8b3
commit 3f535886a4
4 changed files with 38 additions and 18 deletions

View File

@ -25,7 +25,7 @@ The bootloader does not support booting apps from older versions of ESP-IDF. Whe
.. note:: .. note::
If testing an OTA update for an existing product in production, always test it using the same ESP-IDF bootloader binary that is deployed in production. If testing an OTA update for an existing product in production, always test it using the same ESP-IDF bootloader binary that is deployed in production.
.. only:: esp32 .. only:: esp32
@ -54,7 +54,7 @@ The :ref:`first-stage-bootloader` in ROM reads the :ref:`second-stage-bootloader
.. only:: esp32 .. only:: esp32
Bootloaders prior to ESP-IDF V4.0 used the bootloader's own header to configure the SPI flash, meaning these values could not be changed in an update. To maintain compatibility with older bootloaders, the app re-initializes the flash settings during app startup using the configuration found in the app header. Bootloaders prior to ESP-IDF V4.0 used the bootloader's own header to configure the SPI flash, meaning these values could not be changed in an update. To maintain compatibility with older bootloaders, the app re-initializes the flash settings during app startup using the configuration found in the app header.
Log Level Log Level
--------- ---------

View File

@ -109,6 +109,7 @@ On Linux, applications prints an error message and a rudimentary backtrace once
/lib/x86_64-linux-gnu/libc.so.6(+0x1097dc)[0x7f49f0ecd7dc] /lib/x86_64-linux-gnu/libc.so.6(+0x1097dc)[0x7f49f0ecd7dc]
Note that the addresses (``+0x...``) are relative binary addresses, which still need to be converted to the source code line numbers (see below). Note that the addresses (``+0x...``) are relative binary addresses, which still need to be converted to the source code line numbers (see below).
Note furthermore that the backtrace is created from the signal handler, which means that the two uppermost stack frames are not of interest. Instead, the third line is the uppermost stack frame where the issue occurred: Note furthermore that the backtrace is created from the signal handler, which means that the two uppermost stack frames are not of interest. Instead, the third line is the uppermost stack frame where the issue occurred:
.. code-block:: .. code-block::

View File

@ -25,24 +25,24 @@ ESP-IDF 软件引导加载程序 (Bootloader) 主要执行以下任务:
.. note:: .. note::
如果在生产中测试现有产品的 OTA 更新,请确保测试中使用的 ESP-IDF 引导加载程序二进制文件与生产中部署的相同。 如果在生产中测试现有产品的 OTA 更新,请确保测试中使用的 ESP-IDF 引导加载程序二进制文件与生产中部署的相同。
.. only:: esp32 .. only:: esp32
ESP-IDF V2.1 之前的版本 ESP-IDF V2.1 之前的版本
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
与新版本相比ESP-IDF V2.1 之前的版本构建的引导加载程序对硬件的配置更少。使用这些早期 ESP-IDF 版本的引导加载程序并构建新应用程序时,请启用配置选项 :ref:`CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS` 与新版本相比ESP-IDF V2.1 之前的版本构建的引导加载程序对硬件的配置更少。使用这些早期 ESP-IDF 版本的引导加载程序并构建新应用程序时,请启用配置选项 :ref:`CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS`
ESP-IDF V3.1 之前的版本 ESP-IDF V3.1 之前的版本
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ESP-IDF V3.1 之前的版本构建的引导加载程序不支持分区表二进制文件中的 MD5 校验。使用这些 ESP-IDF 版本的引导加载程序并构建新应用程序时,请启用配置选项 :ref:`CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS` ESP-IDF V3.1 之前的版本构建的引导加载程序不支持分区表二进制文件中的 MD5 校验。使用这些 ESP-IDF 版本的引导加载程序并构建新应用程序时,请启用配置选项 :ref:`CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS`
ESP-IDF V5.1 之前的版本 ESP-IDF V5.1 之前的版本
^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^
ESP-IDF V5.1 之前的版本构建的引导加载程序不支持 :ref:`CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM`。使用这些 ESP-IDF 版本的引导加载程序并构建新应用程序时,不应使用该选项。 ESP-IDF V5.1 之前的版本构建的引导加载程序不支持 :ref:`CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM`。使用这些 ESP-IDF 版本的引导加载程序并构建新应用程序时,不应使用该选项。
配置 SPI flash 配置 SPI flash
@ -54,7 +54,7 @@ ROM 中的 :ref:`first-stage-bootloader` 从 flash 中读取 :ref:`second-stage-
.. only:: esp32 .. only:: esp32
ESP-IDF V4.0 版本之前的引导加载程序使用其自身的文件头来配置 SPI flash这意味着无法在 OTA 更新时更改 SPI flash 配置。为了与旧引导加载程序兼容,应用程序在其启动期间使用应用程序文件头中的配置信息重新初始化 flash 配置。 ESP-IDF V4.0 版本之前的引导加载程序使用其自身的文件头来配置 SPI flash这意味着无法在 OTA 更新时更改 SPI flash 配置。为了与旧引导加载程序兼容,应用程序在其启动期间使用应用程序文件头中的配置信息重新初始化 flash 配置。
日志级别 日志级别
--------- ---------
@ -116,7 +116,7 @@ ROM 中的 :ref:`first-stage-bootloader` 从 flash 中读取 :ref:`second-stage-
- :ref:`CONFIG_BOOTLOADER_NUM_PIN_APP_TEST` - 设置启动 TEST 分区的管脚编号,该管脚将被配置为输入并启用内部上拉。要触发测试应用,必须在重置时将此管脚拉低或拉高(可配置)。 - :ref:`CONFIG_BOOTLOADER_NUM_PIN_APP_TEST` - 设置启动 TEST 分区的管脚编号,该管脚将被配置为输入并启用内部上拉。要触发测试应用,必须在重置时将此管脚拉低或拉高(可配置)。
释放管脚输入并重启设备后,将重新启用默认的启动顺序,即启动工厂分区或任意 OTA 应用分区槽。 释放管脚输入并重启设备后,将重新启用默认的启动顺序,即启动工厂分区或任意 OTA 应用分区槽。
- :ref:`CONFIG_BOOTLOADER_HOLD_TIME_GPIO` - 设置 GPIO 电平保持的时间,默认为 5 秒。设备重置后,管脚电平必须保持该设定的时间,才能执行恢复出厂设置或引导测试分区(如适用)。 - :ref:`CONFIG_BOOTLOADER_HOLD_TIME_GPIO` - 设置 GPIO 电平保持的时间,默认为 5 秒。设备重置后,管脚电平必须保持该设定的时间,才能执行恢复出厂设置或引导测试分区(如适用)。
@ -163,12 +163,18 @@ ROM 中的 :ref:`first-stage-bootloader` 从 flash 中读取 :ref:`second-stage-
当启用 Secure Boot V2 时,由于引导加载程序最先加载到固定大小的缓冲区中进行验证,对二进制文件大小的绝对限制为 {IDF_TARGET_MAX_BOOTLOADER_SIZE}(不包括 4 KB 签名)。 当启用 Secure Boot V2 时,由于引导加载程序最先加载到固定大小的缓冲区中进行验证,对二进制文件大小的绝对限制为 {IDF_TARGET_MAX_BOOTLOADER_SIZE}(不包括 4 KB 签名)。
从深度睡眠中快速启动
----------------------
引导加载程序有 :ref:`CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP` 选项,可以减少从深度睡眠中唤醒的时间(有利于降低功耗)。当 :ref:`CONFIG_SECURE_BOOT` 选项禁用时,该选项可用。由于无需镜像校验,唤醒时间减少。
.. only:: SOC_RTC_FAST_MEM_SUPPORTED .. only:: SOC_RTC_FAST_MEM_SUPPORTED
从深度睡眠中快速启动 在第一次启动时,引导加载程序将启动的应用程序的地址存储在 RTC FAST 存储器中。而在唤醒过程中,这个地址用于启动而无需任何检查,从而实现了快速加载。
----------------------
引导加载程序有 :ref:`CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP` 选项,可以减少从深度睡眠中唤醒的时间(有利于降低功耗)。当 :ref:`CONFIG_SECURE_BOOT` 选项禁用时,该选项可用。由于无需镜像校验,唤醒时间减少。在第一次启动时,引导加载程序将启动的应用程序的地址存储在 RTC FAST 存储器中。而在唤醒过程中,这个地址用于启动而无需任何检查,从而实现了快速加载。 .. only:: not SOC_RTC_FAST_MEM_SUPPORTED
{IDF_TARGET_NAME} 没有 RTC 存储器,因此无法存储正在运行的分区状态。每次唤醒会读取整个分区表,并加载正确的应用程序,而不进行额外的检查,因而使得加载速度更快。
自定义引导加载程序 自定义引导加载程序
---------------------- ----------------------

View File

@ -27,7 +27,7 @@ ESP-IDF 应用程序通常在主机上进行构建(交叉编译),然后上
1. 使用 `FreeRTOS POSIX/Linux 模拟器 <https://www.freertos.org/FreeRTOS-simulator-for-Linux.html>`_ 可以模拟 FreeRTOS 调度。在此模拟的基础上,在主机上运行应用程序时也会模拟或使用其他 API。 1. 使用 `FreeRTOS POSIX/Linux 模拟器 <https://www.freertos.org/FreeRTOS-simulator-for-Linux.html>`_ 可以模拟 FreeRTOS 调度。在此模拟的基础上,在主机上运行应用程序时也会模拟或使用其他 API。
2. 使用 `CMock <https://www.throwtheswitch.org/cmock>`_ 可以模拟所有依赖文件,并在完全独立的情况下运行代码。 2. 使用 `CMock <https://www.throwtheswitch.org/cmock>`_ 可以模拟所有依赖文件,并在完全独立的情况下运行代码。
原则上这两种方法POSIX/Linux 模拟器和使用 CMock 模拟)可以混用,但此功能在 ESP-IDF 中尚未实现。注意,尽管名称中包含 POSIX/Linux但目前的 FreeRTOS POSIX/Linux 模拟器也支持在 macOS 系统中运行。在主机上运行 ESP-IDF 应用程序通常用于测试,但模拟环境和模拟依赖文件并不能完全代表目标设备。因此,仍然需要在目标设备上测试,此时测试的侧重点通常在集成和系统测试上。 注意,尽管名称中包含 POSIX/Linux但目前的 FreeRTOS POSIX/Linux 模拟器也支持在 macOS 系统中运行。在主机上运行 ESP-IDF 应用程序通常用于测试,但模拟环境和模拟依赖文件并不能完全代表目标设备。因此,仍然需要在目标设备上测试,此时测试的侧重点通常在集成和系统测试上。
.. note:: .. note::
@ -44,6 +44,18 @@ POSIX/Linux 模拟器的模拟
ESP-IDF 已支持使用 `FreeRTOS POSIX/Linux 模拟器 <https://www.freertos.org/FreeRTOS-simulator-for-Linux.html>`_ 预览应用程序在目标芯片上的运行效果。使用该模拟器可以在主机上运行 ESP-IDF 组件,并使这类组件可用于在主机上运行的 ESP-IDF 应用程序。目前,只有一部分组件可以在 Linux 上构建。此外,各组件移植到 Linux 上后,其功能可能也会受到限制,或与在芯片目标上构建该组件的功能有所不同。有关所需组件在 Linux 上是否受支持的更多信息,请参阅 :ref:`component-linux-mock-support` ESP-IDF 已支持使用 `FreeRTOS POSIX/Linux 模拟器 <https://www.freertos.org/FreeRTOS-simulator-for-Linux.html>`_ 预览应用程序在目标芯片上的运行效果。使用该模拟器可以在主机上运行 ESP-IDF 组件,并使这类组件可用于在主机上运行的 ESP-IDF 应用程序。目前,只有一部分组件可以在 Linux 上构建。此外,各组件移植到 Linux 上后,其功能可能也会受到限制,或与在芯片目标上构建该组件的功能有所不同。有关所需组件在 Linux 上是否受支持的更多信息,请参阅 :ref:`component-linux-mock-support`
注意,该模拟器在控制和中断线程时大量依赖于 POSIX 信号和信号处理程序。因此,它具有以下 *限制*
.. list::
- 避免使用不是 *async-signal-safe* 的函数,例如 ``printf()``。特别是,在多个优先级不同的任务中调用这些函数可能会导致崩溃和死锁。
- 不是由 FreeRTOS API 函数创建的线程,禁止从中调用任何 FreeRTOS 原语。
- 在 FreeRTOS 模拟器中,如果一个任务使用了像 ``select()`` 这样的原生阻塞或等待机制,模拟器可能会错误地将这些任务视为处于 *就绪状态*然后尝试调度它们执行。实际上这些任务可能仍然处于阻塞状态。FreeRTOS 对于那些使用了 FreeRTOS API 而被阻塞的任务,调度器只能识别出 *等待状态*
- 当一个模拟的 FreeRTOS 任务调用可能被信号中断的 API 时,这些 API 将持续接收模拟的 FreeRTOS 时钟中断。因此,调用这些 API 的代码应设计为能够处理潜在的中断信号,或者通过链接器进行 API 的包装处理。
由于测试和开发过程会受到这些限制影响,我们期望寻找到更好的解决方案用于在主机上运行 ESP-IDF 应用程序。
此外,请注意,如果您使用的是 ESP-IDF 中的 FreeRTOS 模拟组件(``tools/mocks/freertos``),这些限制不会影响程序运行。但是,该模拟组件也无法执行任何调度。
.. only:: not esp32p4 .. only:: not esp32p4
.. note:: .. note::
@ -97,6 +109,7 @@ ESP-IDF 已支持使用 `FreeRTOS POSIX/Linux 模拟器 <https://www.freertos.or
/lib/x86_64-linux-gnu/libc.so.6(+0x1097dc)[0x7f49f0ecd7dc] /lib/x86_64-linux-gnu/libc.so.6(+0x1097dc)[0x7f49f0ecd7dc]
注意,这些地址 (``+0x...``) 是相对的二进制地址,仍然需要转换为源代码行号(见下文)。 注意,这些地址 (``+0x...``) 是相对的二进制地址,仍然需要转换为源代码行号(见下文)。
另外,回溯信息是由信号处理程序生成的,从回溯信息的第三行开始,才是问题发生的的堆栈帧,而最上面的两个堆栈帧不是导致错误的代码部分所以不重要。 另外,回溯信息是由信号处理程序生成的,从回溯信息的第三行开始,才是问题发生的的堆栈帧,而最上面的两个堆栈帧不是导致错误的代码部分所以不重要。
.. code-block:: .. code-block::