ESP-IDF 例程——build_system
6. build_system 目录
6.1 wrappers
| 字段 | 描述 |
|---|---|
| 例程名称 | 使用包装器重新定义IDF函数 |
| 所在文件夹路径 | examples\build_system\wrappers |
| 核心功能说明 | 展示如何使用链接器包装器(wrapper)功能重新定义或覆盖ESP-IDF和引导加载程序中的任何公共函数,用于修改默认函数行为或扩展功能 |
| 主要调用的内部/外部函数或模块 | - bootloader_print_banner(引导加载程序函数) |
- esp_restart(ESP-IDF函数)
- 链接器选项:-Wl,–wrap=function_name |
| 输入输出参数说明 | 配置参数: - 无特定输入参数,通过链接器选项配置要包装的函数
输出结果:
- 引导加载程序启动时显示自定义消息
- 重启前显示自定义消息
- 成功重新定义函数的日志输出 |
| 适用场景及典型应用案例 | - 需要修改ESP-IDF或引导加载程序默认行为但不希望修改源代码的场景 - 功能扩展和定制开发
- 调试和测试场景,临时替换函数实现
- 跨版本兼容处理 |
6.2 技术要点
- 利用链接器的–wrap选项实现函数包装
- 包装函数命名规则:__wrap_function_name
- 原函数通过__real_function_name访问
- 仅适用于全局函数,静态函数无法被包装
- 包装内部函数存在版本兼容性风险
- 需注意函数内存位置(IRAM/Flash)的兼容性
6.3 构建与运行
- 设置目标芯片:
idf.py set-target esp32c3 - 构建项目:
idf.py build - 烧录并监控:
idf.py flash monitor
6.4 预期输出
I (30) boot-wrapper: message from a bootloader wrapper [...]Restarting in 5 seconds... Restarting is progress... [...]
ESP-IDF 例程——build_system
https://blog.zhaosn.top/ESP32-examples/06.build_system/