1. 配置管理
1.1 Kconfig配置系统
ESP-IDF基于Kconfig配置系统,配置文件以Kconfig
命名,分布于各组件目录,顶层有主Kconfig
文件。通过idf.py menuconfig
生成sdkconfig
文件,作为编译时配置输入。
- 根目录
Kconfig
定义全局配置选项。 - 各组件目录
Kconfig
定义组件相关配置。 sdkconfig
存储最终配置,影响编译选项和功能启用。
1.2 代码示例
根目录Kconfig
片段:
kconfig
config IDF_CMAKE
bool
default "y"
config IDF_TARGET_ARCH_XTENSA
bool
default "y"
1.3 配置流程
- 执行
idf.py menuconfig
,加载所有Kconfig
文件,生成sdkconfig
。 - 编译时读取
sdkconfig
,设置编译选项。
2. 新项目添加
2.1 目录结构
<project_root>/
main/
CMakeLists.txt
<source>.c/.cpp
CMakeLists.txt
sdkconfig.defaults (可选)
Kconfig.projbuild (可选)
2.2 示例代码
main/CMakeLists.txt
示例:
cmake
idf_component_register(SRCS "hello_world_main.c"
PRIV_REQUIRES spi_flash
INCLUDE_DIRS "")
2.3 添加流程
- 复制示例项目目录。
- 修改
main
目录源代码。 - 通过
idf.py menuconfig
配置项目。
3. 新板卡支持
3.1 目录和文件
- 新板卡支持放置于
boards
目录(需手动添加)。 - 包含引脚定义、启动代码、板级配置文件。
3.2 配置
- 在项目配置中选择对应板卡。
- 编译时根据板卡配置宏选择代码。
4. 新组件添加
4.1 目录结构
- 在
components
目录新建组件文件夹。 - 包含
CMakeLists.txt
和Kconfig
。
4.2 示例代码
CMakeLists.txt
示例:
cmake
idf_component_register(SRCS "my_component.c"
INCLUDE_DIRS "include"
PRIV_REQUIRES driver esp_common)
Kconfig
示例:
kconfig
menu "My Component"
config MY_COMPONENT_ENABLE
bool "Enable My Component"
default y
endmenu
4.3 添加流程
- 新建组件目录,添加代码和配置。
- 顶层
CMakeLists.txt
自动递归添加组件。
5. 编译链路
5.1 起始配置文件
- 项目根目录下的
sdkconfig
。
5.2 编译流程
- 顶层
CMakeLists.txt
加载配置,设置编译选项。 - 递归调用组件
CMakeLists.txt
,注册源文件和依赖。 - 生成目标文件和固件镜像。
5.3 代码示例
顶层CMakeLists.txt
片段:
cmake
idf_build_get_property(build_component_targets __BUILD_COMPONENT_TARGETS)
foreach(component_target ${build_component_targets})
__component_get_property(dir ${component_target} COMPONENT_DIR)
add_subdirectory(${dir} ${component_target})
endforeach()
5.4 编译链路流程图

6. 示例项目代码
examples/get-started/hello_world/main/hello_world_main.c
示例:
c
void app_main(void)
{
printf("Hello world!\n");
esp_chip_info_t chip_info;
esp_chip_info(&chip_info);
printf("This is %s chip with %d CPU cores\n",
CONFIG_IDF_TARGET,
chip_info.cores);
}