【ESP32-menuconfig(1) -- Build Type及Bootloader config】
Build Type Bootloader config
- menuconfig介绍
- Build type
- CONFIG_APP_BUILD_TYPE
- CONFIG_APP_BUILD_TYPE_PURE_RAM_APP
- CONFIG_APP_REPRODUCIBLE_BUILD
- CONFIG_APP_NO_BLOBS
- CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS
- CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS
- Bootloader config
- Bootloader manager
- CONFIG_BOOTLOADER_COMPILE_TIME_DATE
- CONFIG_BOOTLOADER_PROJECT_VER
- Application Rollback
- CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE
- CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK
- CONFIG_BOOTLOADER_APP_SECURE_VERSION
- CONFIG_BOOTLOADER_APP_SEC_VER_SIZE_EFUSE_FIELD
- CONFIG_BOOTLOADER_EFUSE_SECURE_VERSION_EMULATE
- Bootloader Rollback
- CONFIG_BOOTLOADER_ANTI_ROLLBACK_ENABLE
- CONFIG_BOOTLOADER_SECURE_VERSION
- CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION
- CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE
- CONFIG_BOOTLOADER_APP_TEST
- CONFIG_BOOTLOADER_NUM_PIN_APP_TEST
- CONFIG_BOOTLOADER_APP_TEST_PIN_LEVEL
- Log
- CONFIG_BOOTLOADER_LOG_LEVEL
- Format
- Settings
- Serial Flash Configurations
- CONFIG_BOOTLOADER_SPI_CUSTOM_WP_PIN
- CONFIG_BOOTLOADER_SPI_WP_PIN
- CONFIG_BOOTLOADER_FLASH_DC_AWARE
- CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT
- CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH
- CONFIG_BOOTLOADER_VDDSDIO_BOOST
- CONFIG_BOOTLOADER_FACTORY_RESET
- CONFIG_BOOTLOADER_NUM_PIN_FACTORY_RESET
- CONFIG_BOOTLOADER_FACTORY_RESET_PIN_LEVEL
- CONFIG_BOOTLOADER_OTA_DATA_ERASE
- CONFIG_BOOTLOADER_DATA_FACTORY_RESET
- CONFIG_BOOTLOADER_HOLD_TIME_GPIO
- CONFIG_BOOTLOADER_HOLD_TIME_GPIO
- CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE
- CONFIG_BOOTLOADER_WDT_ENABLE
- CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE
- CONFIG_BOOTLOADER_WDT_TIME_MS
- CONFIG_BOOTLOADER_WDT_TIME_MS
- CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP
- CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON
- CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS
- CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC
- CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC_IN_CRC
- CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC_SIZE
Bootloader config)
menuconfig介绍
最近的开发中,不可避免的要通过idf.py menuconfig来配置工程,但是官网文档这块做的比较杂,于是我决定自己把menuconfig完整看一遍
首先,简单介绍一下ESP-IDF的menuconfig,ESP-IDF 的 menuconfig 是一个基于 Kconfig 系统的编译时配置工具,用于定制项目功能和硬件设置。它通过文本用户界面(TUI)或图形界面(在支持的 IDE 中)提供交互式配置,生成 sdkconfig 文件,进而影响项目构建和功能实现。
至于menuconfig具体的选项,可以在官方文档网站看到
(备注,这部分文档针对最新版本的V5.5版本,建议非5.5版本的更新到5.5版本,离线的那个5.4.1版本,真的一言难尽,难评)
V5.4版本的文档无配置描述
V5.5版本新增配置描述
Configuration Options Reference - ESP32 - — ESP-IDF 编程指南 v5.5 文档
不过内容是全英文的,说实话这也是国产芯片之殇了,英文文档远多于中文,乐鑫已经算做的比较好的了。
接下来我们来逐项分析(翻译)一下
PS:(狗头保命,翻译来自AI,因为量大,所以和我项目无关的内容我基本只复制了,没有验证对不对)
由于内容过多(主要是bootload内容,这篇文章只介绍build type和bootload的内容)
而且我发现,实际menuconfig展示的内容,和文档描述顺序些许不同,但是选项含义应该是覆盖全的,本人学习ESP32不过半个月,具体原因也说不上来
Build type
CONFIG_APP_BUILD_TYPE
功能:选择应用构建方式(二进制文件+引导加载程序,或仅生成 ELF 文件直接加载到 RAM)。
选项:
CONFIG_APP_BUILD_TYPE_APP_2NDBOOT(默认):生成 FLASH 兼容的二进制文件,包含引导加载程序。
CONFIG_APP_BUILD_TYPE_RAM(实验性):生成 ELF 文件,加载到 RAM,需 JTAG/UART 调试,IRAM/DRAM 限制严格。
CONFIG_APP_BUILD_TYPE_PURE_RAM_APP
功能:禁用外部内存(PSRAM/SPI FLASH)初始化,节省约 26KB RAM,禁用 spi_flash 组件(如 app_update)。
CONFIG_APP_REPRODUCIBLE_BUILD
功能:消除构建中的日期、时间、路径信息,生成一致的二进制文件,自动创建 .gdbinit 文件。
说明:该选项有助于生成一致固件,方便版本控制和调试,但对运行时无直接影响。
CONFIG_APP_NO_BLOBS
功能:禁用 WiFi/Bluetooth 二进制库,WiFi 和 Bluetooth 功能将不可用。
CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS
功能:支持 ESP-IDF v2.1 之前的引导加载程序,增加约 1KB IRAM 使用。
CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS
功能:支持 ESP-IDF v3.1 之前的引导加载程序和分区表(无 MD5 校验)。
Bootloader config
Bootloader manager
CONFIG_BOOTLOADER_COMPILE_TIME_DATE
功能:引导加载程序是否包含编译时间戳,存储在描述结构中。
适用性:启用有助于固件版本追踪,禁用可生成一致二进制文件。
推荐:生产环境中禁用,调试时启用。
原因:生产环境需一致性,调试时时间戳便于追踪。
CONFIG_BOOTLOADER_PROJECT_VER
功能:设置引导加载程序版本号(uint32_t),存储在描述结构中。
范围:0 到 4294967295,默认 1。
Application Rollback
CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE
功能:支持应用回滚,OTA 更新后标记新应用为 PENDING_VERIFY,需用户代码确认有效性,否则回滚到上一版本。
CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK
功能:防止回滚到较低安全版本的固件,基于 eFuse 存储的安全版本号。
适用性:增强安全性,防止使用存在漏洞的旧固件。推荐启用
CONFIG_BOOTLOADER_APP_SECURE_VERSION
功能:设置应用的安全版本号,存储在 eFuse 中,引导加载程序选择更高或相等版本的应用。
适用性:与反回滚配合使用,需定义 OTA 分区(ota_0 + ota_1)。
CONFIG_BOOTLOADER_APP_SEC_VER_SIZE_EFUSE_FIELD
功能:定义 eFuse 安全版本字段大小(ESP32S3 为 16 位)。
适用性:决定安全版本号的最大值,影响可升级次数。
CONFIG_BOOTLOADER_EFUSE_SECURE_VERSION_EMULATE
功能:模拟 eFuse 安全版本读写,仅用于测试,需分区表包含 emul_efuse 分区。
适用性:调试时可用,生产环境禁用以避免模拟漏洞。
Bootloader Rollback
CONFIG_BOOTLOADER_ANTI_ROLLBACK_ENABLE
功能:防止回滚到较低安全版本的引导加载程序,基于 eFuse 安全版本,增强引导加载程序安全性。
CONFIG_BOOTLOADER_SECURE_VERSION
功能:设置引导加载程序的安全版本号,ROM 引导程序检查版本。
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION
功能:设置引导加载程序编译优化级别。
选项:
SIZE(-Os):优化大小。
DEBUG(-Og):便于调试。
PERF(-O2):优化性能。
NONE(-O0):无优化(已弃用)。
CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE
功能:保护未映射内存区域,防止意外访问触发异常。
CONFIG_BOOTLOADER_APP_TEST
备注:这三个APP_TEST内容一般来说调试时可用,生产环境通常禁用。
功能:通过 GPIO 触发从 TEST 分区启动测试应用
CONFIG_BOOTLOADER_NUM_PIN_APP_TEST
功能:指定测试分区启动的 GPIO 编号
CONFIG_BOOTLOADER_APP_TEST_PIN_LEVEL
功能:设置测试分区 GPIO 触发电平(高/低)。
Log
CONFIG_BOOTLOADER_LOG_LEVEL
CONFIG_BOOTLOADER_LOG_VERSION功能:选择引导加载程序日志版本(V1 或 V2)。CONFIG_BOOTLOADER_LOG_LEVEL功能:设置引导加载程序日志详细级别(无、错误、警告、信息、调试、详细)。
Format
CONFIG_BOOTLOADER_LOG_COLORS功能:启用 ANSI 颜色日志,需终端支持。
适用性:调试时便于阅读日志,生产环境无影响。CONFIG_BOOTLOADER_LOG_COLORS_SUPPORT功能:运行时动态启用颜色日志,增加少量 RAM/FLASH 使用。
适用性:调试时可选,生产环境禁用以节省资源。CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE功能:选择日志时间戳来源(无、毫秒计数)。
选项:NONE:无时间戳,节省资源。CPU_TICKS:从 RTOS 滴答计数,基于 APB 时钟或 REF_TICK。CONFIG_BOOTLOADER_LOG_TIMESTAMP_SUPPORT功能:运行时动态启用时间戳,增加少量 RAM/FLASH 使用。
适用性:调试时提供灵活性,生产时禁用。
Settings
CONFIG_BOOTLOADER_LOG_MODE功能:选择日志模式(文本或二进制)。
选项:TEXT:人类可读,适合调试。BINARY:减少 FLASH 使用(10%-35%),需主机工具解析。
Serial Flash Configurations
CONFIG_BOOTLOADER_SPI_CUSTOM_WP_PIN
功能:自定义 SPI FLASH WP 引脚(用于 QIO/QOUT 模式,eFuse 自定义引脚时)。
CONFIG_BOOTLOADER_SPI_WP_PIN
功能:指定自定义 WP 引脚的 GPIO 编号。
CONFIG_BOOTLOADER_FLASH_DC_AWARE
功能:允许应用调整 SPI FLASH 虚拟周期位以支持更高频率,强制引导加载程序使用 DOUT 模式。
适用性:高频 FLASH 操作可能需要,需验证硬件支持。
CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT
功能:支持 XMC 品牌 FLASH 芯片的启动流程。
适用性:若 FLASH 为 XMC 芯片,需启用;否则可禁用。
CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH
功能:启用对 32 位地址(>16MB)FLASH 的缓存访问,仅限四线 FLASH。
CONFIG_BOOTLOADER_VDDSDIO_BOOST
功能:设置 VDDSDIO LDO 电压,1.8V 时可提升至 1.9V 防止 FLASH 编程 brownout。
选项:
1_8V
1_9V
CONFIG_BOOTLOADER_FACTORY_RESET
功能:通过 GPIO 触发工厂重置,清除数据分区并从工厂分区启动。
适用性:便于设备恢复出厂设置,需定义 GPIO。
CONFIG_BOOTLOADER_NUM_PIN_FACTORY_RESET
功能:指定工厂重置 GPIO 编号,启用内部上拉。
CONFIG_BOOTLOADER_FACTORY_RESET_PIN_LEVEL
功能:设置工厂重置 GPIO 触发电平(高/低)。
选项:
LOW:低电平触发。
HIGH:高电平触发。
CONFIG_BOOTLOADER_OTA_DATA_ERASE
功能:工厂重置时清除 OTA 数据,从工厂分区或 OTA0 启动。
CONFIG_BOOTLOADER_DATA_FACTORY_RESET
功能:指定工厂重置时清除的分区(如 NVS、phy_init)。
CONFIG_BOOTLOADER_HOLD_TIME_GPIO
功能:设置工厂重置或测试模式 GPIO 保持时间(秒)。
适用性:确保触发可靠,需测试时间设置。
CONFIG_BOOTLOADER_HOLD_TIME_GPIO
功能:设置工厂重置或测试模式 GPIO 保持时间(秒)。
CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE
功能:保护未映射内存区域,防止意外访问触发异常。
CONFIG_BOOTLOADER_WDT_ENABLE
功能:启用 RTC 看门狗,防止启动代码因电源不稳定锁死。
CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE
功能:允许用户代码禁用 RTC 看门狗。
适用性:需用户代码手动管理 WDT(如调用 wdt_hal_feed 或 wdt_hal_disable)。
CONFIG_BOOTLOADER_WDT_TIME_MS
功能:设置 RTC 看门狗超时时间(ms,0-120000,默认 9000)。
CONFIG_BOOTLOADER_WDT_TIME_MS
功能:设置 RTC 看门狗超时时间(ms,0-120000,默认 9000)。
CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP
功能:从深度睡眠唤醒时跳过固件校验(校验和、SHA256、签名)。
CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON
功能:上电重置时跳过固件校验。
CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS
功能:始终跳过固件校验。
CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC
功能:在 RTC FAST 内存中保留自定义数据区域,重启后保留(除断电)。
CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC_IN_CRC
功能:自定义 RTC 内存是否包含在 CRC 计算中。
CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC_SIZE
功能:设置 RTC FAST 内存自定义区域大小(需 4 字节对齐)。