AVDK 创建新工程注意事项
本文基于工程实践整理,记录从模板复制/新建工程后必须手动完成的配置项,避免编译报错或分区表不生效
AVDK版本为 2.0.2,SOC为 BK7258
目录
- 一、工程目录结构
- 二、清理从模板带来的无关配置
- 三、分区表配置
- 3.1 四个必须保持一致的文件
- 3.2 分区表工具的选择逻辑
- 3.3 分区对齐要求
- 3.4 修改 app 分区大小示例
- 四、必须加入分区表白名单
- 4.1 为什么要加
- 4.2 需要修改的两个文件
- 五、编译与清理
- 5.1 编译命令
- 5.2 清理构建
- 六、常见问题排查
- 6.1
FLASH overflowed by XXXXX bytes - 6.2 修改 config 后没有生效
- 6.3 分区表修改后 vendor_flash.c 没有更新
- 6.1
- 七、关键配置速查表
- 八、推荐的最小工程创建流程
一、工程目录结构
在projects/下创建新工程目录,典型结构如下:
projects/your_project/ ├── CMakeLists.txt # 顶层 cmake 入口 ├── Makefile # 顶层 make 入口(通常从模板复制) ├── pj_config.mk # 预构建目标配置(可选) ├── README.md ├── config/ │ ├── bk7258/ # CPU0 配置 │ │ ├── config # Kconfig 默认配置(关键) │ │ ├── configuration.json # 固件打包配置 │ │ ├── partitions.csv # 新格式分区表 │ │ └── bk7258_partitions.csv # 旧格式分区表(优先被工具读取) │ └── bk7258_cp1/ # CPU1 配置 │ └── config └── main/ ├── CMakeLists.txt ├── app_main.c └── vendor_flash.c # 自定义 Flash 分区表 C 文件二、清理从模板带来的无关配置
如果工程是从media/doorbell、media/audio_record_to_sdcard等模板复制而来,config/bk7258/config中通常会残留大量与本工程无关的模块开关,例如:
CONFIG_INTEGRATION_DOORBELL=y CONFIG_LCD_ST7282=y CONFIG_LCD_HX8282=y ... CONFIG_CS2_P2P_SERVER=y CONFIG_INTEGRATION_DOORBELL_CS2=y这些配置即使不依赖,也会增大固件体积、浪费 RAM/Flash。建议删除或改为标准关闭格式:
-CONFIG_INTEGRATION_DOORBELL=y +# CONFIG_INTEGRATION_DOORBELL is not setKconfig bool 类型关闭的标准写法
| 状态 | 写法 | 是否推荐 |
|---|---|---|
| 开启 | CONFIG_XXX=y | 是 |
| 关闭 | # CONFIG_XXX is not set | 是 |
| 关闭 | CONFIG_XXX=n | 不推荐,部分工具不识别 |
三、分区表配置
3.1 四个必须保持一致的文件
当使用自定义分区表时,以下四个文件必须完全一致:
| 文件 | 作用 | 是否自动生成 |
|---|---|---|
config/bk7258/bk7258_partitions.csv | 旧格式分区表,优先级最高 | 手动维护 |
config/bk7258/partitions.csv | 新格式分区表 | 手动维护 |
main/vendor_flash.c | 链接器/运行时使用的分区表 C 数组 | 加入分区表白名单后可自动生成 |
config/bk7258/configuration.json | 固件打包配置 | 加入分区表白名单后可自动生成 |
3.2 分区表工具的选择逻辑
构建系统按以下优先级选择 CSV 文件(代码见bk_idk/components/part_table/part_table.mk):
ifeq ("$(config_value)", "y") # CONFIG_OVERRIDE_FLASH_PARTITION=y PARTITIONS_CSV_FILE := $(PROJECT_DIR)/csv/bk7258.csv ifneq ($(wildcard $(PROJECT_DIR)/config/bk7258/bk7258_partitions.csv),) PARTITIONS_CSV_FILE := $(PROJECT_DIR)/config/bk7258/bk7258_partitions.csv # 优先 endif else PARTITIONS_CSV_FILE := $(ARMINO_DIR)/middleware/boards/bk7258/partitions.csv # SDK 默认 endif也就是说:
CONFIG_OVERRIDE_FLASH_PARTITION=y时,优先使用config/bk7258/bk7258_partitions.csv- 关闭时,使用 SDK 默认分区表
bk_idk/middleware/boards/bk7258/partitions.csv
3.3 分区对齐要求
代码分区(Execute=TRUE)的 Offset 和 Size 必须68K 对齐;非代码分区 Size 只需 4K 对齐。
68K 整数倍示例:
| 倍数 | 大小 |
|---|---|
| 31 × 68K | 2108K |
| 32 × 68K | 2176K |
| 33 × 68K | 2244K |
| 34 × 68K | 2312K |
3.4 修改 app 分区大小示例
例如 把 app 从 1768K 改为 2244K(33 × 68K):
config/bk7258/bk7258_partitions.csv
-app,,2124k,code,TRUE,FALSE +app,,2244k,code,TRUE,FALSEconfig/bk7258/partitions.csv
-primary_cpu0_app,0x11000,1768K,TRUE,TRUE, +primary_cpu0_app,0x11000,2244K,TRUE,TRUE, -primary_cpu1_app,0x1cb000,476K,TRUE,TRUE, +primary_cpu1_app,0x242000,460K,TRUE,TRUE, -primary_cpu2_app,0x242000,272K,TRUE,TRUE, +primary_cpu2_app,0x2b9000,272K,TRUE,TRUE, -ota,0x286000,1428K,,TRUE, +ota,0x2fd000,1428K,,TRUE, -usr_config,0x3eb000,68K,,TRUE, +usr_config,0x462000,68K,,TRUE,注意:修改 app 大小后,后续分区的起始地址必须手动顺延,是否会自动调整,要看是否为缺省自动状态。
main/vendor_flash.c和config/bk7258/configuration.json在加入分区表白名单后,重新运行 CMake 配置会自动更新。如果未加入白名单,则需手动同步。
四、必须加入分区表白名单
4.1 为什么要加
如果新工程名不在part_table组件的bk7258xx_supported_projects列表中:
- 分区表工具不会读取工程目录下的
partitions.csv vendor_flash.c/configuration.json不会自动生成/更新- 构建时可能使用 SDK 默认分区表,导致分区不一致
4.2 需要修改的两个文件
文件 1:bk_idk/components/part_table/part_table.mk
找到bk7258xx_supported_projects定义处,追加新工程名:
bk7258xx_supported_projects := $(bk7258xx_supported_projects) matter audio_ns_recoder your_project_name文件 2:bk_idk/components/part_table/CMakeLists.txt
找到bk7258xx_supported_projects的list(APPEND ...)块,追加新工程名:
list(APPEND bk7258xx_supported_projects ... "your_project_name" )两个文件都必须修改,缺一不可:
CMakeLists.txt影响 CMake 阶段,触发自动生成vendor_flash.c/configuration.jsonpart_table.mk影响 Makefile 阶段,决定build_main.mk是否调用分区表工具生成 bootloader JSON
五、编译与清理
5.1 编译命令
makebk7258PROJECT=your_project_name如果不指定PROJECT,默认构建media/doorbell:
ifeq ("$(PROJECT)", "") export PROJECT := media/doorbell endif5.2 清理构建
清理指定工程(推荐):
rm-rfbuild/your_project_namemakebk7258PROJECT=your_project_name清理所有工程:
makeclean注意:根目录
make clean不接受PROJECT=参数,总是清理整个build/目录。
六、常见问题排查
6.1FLASH overflowed by XXXXX bytes
原因:app 分区大小 < 实际固件.text段大小。
排查步骤:
- 确认工程名已加入
part_table.mk和CMakeLists.txt的白名单 - 确认
bk7258_partitions.csv/partitions.csv/vendor_flash.c/configuration.json中 app 大小一致 - 确认大小满足 68K 对齐
- 删除旧 build 目录后重新编译
6.2 修改 config 后没有生效
原因:build 目录缓存了旧配置。
解决:
rm-rfbuild/your_project_namemakebk7258PROJECT=your_project_name6.3 分区表修改后 vendor_flash.c 没有更新
原因:工程名不在CMakeLists.txt的bk7258xx_supported_projects中,CMake 阶段没有触发自动生成。
解决:按第 4 节加入白名单,然后删除 build 目录重新配置。
七、关键配置速查表
| 配置项 | 位置 | 说明 |
|---|---|---|
CONFIG_OVERRIDE_FLASH_PARTITION | config/bk7258/config | 开启后使用工程自定义分区表 |
bk7258xx_supported_projects | bk_idk/components/part_table/part_table.mk | Makefile 阶段分区表白名单 |
bk7258xx_supported_projects | bk_idk/components/part_table/CMakeLists.txt | CMake 阶段分区表白名单 |
bk7258_partitions.csv | config/bk7258/bk7258_partitions.csv | 旧格式,优先级最高 |
partitions.csv | config/bk7258/partitions.csv | 新格式 |
vendor_flash.c | main/vendor_flash.c | 链接器/运行时分区表 |
configuration.json | config/bk7258/configuration.json | 固件打包配置 |
八、推荐的最小工程创建流程
- 复制模板工程到
projects/your_project/ - 清理
config/bk7258/config中无关模块开关 - 确认
CONFIG_OVERRIDE_FLASH_PARTITION=y - 在
bk_idk/components/part_table/part_table.mk和CMakeLists.txt中加入工程名 - 根据实际需求调整
config/bk7258/bk7258_partitions.csv和partitions.csv - 删除
build/your_project/ - 执行
make bk7258 PROJECT=your_project - 检查生成的
vendor_flash.c和configuration.json是否与 CSV 一致