以下内容摘自《ESP32-C3物联网工程开发实战》

组件(components)

组件是模块化且独立的代码,在编译系统中以文件夹的形式管理(文件夹名默认为组件名)。通过组件的编译脚本,可以指定其编译参数和依赖关系。在编译时组件会被编译成独立的静态库(.a文件),最终在链接阶段共同组成应用程序。
ESP-IDF 的关键功能(如操作系统、外设驱动、网络协议栈等)是以组件的形式提供的,这些组件保存在 ESP-IDF 根目录下的 components 目录中,开发者无须将这些组件复制到myProject 的 components 目录中,只需要在CMakeLists.txt 中使用 REQUIRES 或PRIV_REQUIRES指明对它们的依赖关系即可,编译系统会自动找到该组件并对其进行编译。
因此myProject 下 components 目录并不是必需的,这里仅用于包含项目的部分自定义组件,自定义组件可以是第三方库或者用户的自定义代码。除此之外,组件也可以来自非ESP-IDF 或非当前工程的任意目录,如来源于在其他目录下保存的开源项目。这时只需要在根目录的CMakeLists.txt中通过设置 EXTRA_COMPONENT_DIRS变量来添加该组件的查找位置即可。该目录同样会对ESP-IDF同名组件进行覆盖。

入口程序

main 目录和其他组件(如 component1)的文件结构是一样的,它是一个必须存在的特殊组件。一个工程有且仅有一个main 目录,该目录包含了项目本身的源代码和用户程序的入口app_main,用户程序默认从这里开始执行。main组件的特殊之处还有,它默认依赖于所有搜索路径中的组件,因此不必在自己的 CMakeLists.txt 中使用 REQUIRES 或 PRIV_REQUIRES 指明依赖关系。

配置文件

工程的根目录下包含了一个名为 sdkconfig 配置文件,该文件包含了工程所有组件的配置参数。sdkconfig 是由编译系统自动生成的,可通过命令 idf.pymenuconfig 进行修改并重新生成。menuconfig 中的选项主要从工程的Kconfig.projbuild以及组件的Kconfig 导入,组件的开发者一般通过在Kconfig中添加配置项,使组件具有灵活可配置的特性。

编译目录(build)

使用命令idf.py build编译产生的中间文件和最终的可执行程序,将默认保存在工程的build目录中。一般情况下,用户不必查看build目录的内容,ESP-IDF预定义了操作该目录的命令,如使用命令idf.py flash 将自动找到编译生成的二进制文件,并烧录到指定的Flash 地址;使用命令 idf.py fullclean可以对整个build目录进行清理。

分区表(partitions.csv)

每一个工程都会配置相应的分区表,用于划分Flash的空间,指明可执行程序和用户数据空间的大小、起始地址等。命令 idf.py flash 或者 OTA 升级程序据此将固件烧录到 Flash 的对应地址。ESP-IDF在 components/partition_table中提供了几套系统默认的分区表,如 partitions_singleapp.csv 和 partitionstwo_ota.csv等,用户可以在 menuconfig 中进行选择。
如果系统默认的分区表不能满足项目的要求,则开发者可以在项目的目录下添加自定义的分区表 partitions.csv,并在menuconfig 中选择自定义的分区表。