
AVDK 创建新工程注意事项本文基于工程实践整理记录从模板复制/新建工程后必须手动完成的配置项避免编译报错或分区表不生效AVDK版本为 2.0.2SOC为 BK7258目录一、工程目录结构二、清理从模板带来的无关配置三、分区表配置3.1 四个必须保持一致的文件3.2 分区表工具的选择逻辑3.3 分区对齐要求3.4 修改 app 分区大小示例四、必须加入分区表白名单4.1 为什么要加4.2 需要修改的两个文件五、编译与清理5.1 编译命令5.2 清理构建六、常见问题排查6.1FLASH overflowed by XXXXX bytes6.2 修改 config 后没有生效6.3 分区表修改后 vendor_flash.c 没有更新七、关键配置速查表八、推荐的最小工程创建流程一、工程目录结构在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_DOORBELLy CONFIG_LCD_ST7282y CONFIG_LCD_HX8282y ... CONFIG_CS2_P2P_SERVERy CONFIG_INTEGRATION_DOORBELL_CS2y这些配置即使不依赖也会增大固件体积、浪费 RAM/Flash。建议删除或改为标准关闭格式-CONFIG_INTEGRATION_DOORBELLy # CONFIG_INTEGRATION_DOORBELL is not setKconfig bool 类型关闭的标准写法状态写法是否推荐开启CONFIG_XXXy是关闭# CONFIG_XXX is not set是关闭CONFIG_XXXn不推荐部分工具不识别三、分区表配置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.mkifeq ($(config_value), y) # CONFIG_OVERRIDE_FLASH_PARTITIONy 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_PARTITIONy时优先使用config/bk7258/bk7258_partitions.csv关闭时使用 SDK 默认分区表bk_idk/middleware/boards/bk7258/partitions.csv3.3 分区对齐要求代码分区ExecuteTRUE的 Offset 和 Size 必须68K 对齐非代码分区 Size 只需 4K 对齐。68K 整数倍示例倍数大小31 × 68K2108K32 × 68K2176K33 × 68K2244K34 × 68K2312K3.4 修改 app 分区大小示例例如 把 app 从 1768K 改为 2244K33 × 68Kconfig/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.csvvendor_flash.c/configuration.json不会自动生成/更新构建时可能使用 SDK 默认分区表导致分区不一致4.2 需要修改的两个文件文件 1bk_idk/components/part_table/part_table.mk找到bk7258xx_supported_projects定义处追加新工程名bk7258xx_supported_projects : $(bk7258xx_supported_projects) matter audio_ns_recoder your_project_name文件 2bk_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 编译命令makebk7258PROJECTyour_project_name如果不指定PROJECT默认构建media/doorbellifeq ($(PROJECT), ) export PROJECT : media/doorbell endif5.2 清理构建清理指定工程推荐rm-rfbuild/your_project_namemakebk7258PROJECTyour_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_namemakebk7258PROJECTyour_project_name6.3 分区表修改后 vendor_flash.c 没有更新原因工程名不在CMakeLists.txt的bk7258xx_supported_projects中CMake 阶段没有触发自动生成。解决按第 4 节加入白名单然后删除 build 目录重新配置。七、关键配置速查表配置项位置说明CONFIG_OVERRIDE_FLASH_PARTITIONconfig/bk7258/config开启后使用工程自定义分区表bk7258xx_supported_projectsbk_idk/components/part_table/part_table.mkMakefile 阶段分区表白名单bk7258xx_supported_projectsbk_idk/components/part_table/CMakeLists.txtCMake 阶段分区表白名单bk7258_partitions.csvconfig/bk7258/bk7258_partitions.csv旧格式优先级最高partitions.csvconfig/bk7258/partitions.csv新格式vendor_flash.cmain/vendor_flash.c链接器/运行时分区表configuration.jsonconfig/bk7258/configuration.json固件打包配置八、推荐的最小工程创建流程复制模板工程到projects/your_project/清理config/bk7258/config中无关模块开关确认CONFIG_OVERRIDE_FLASH_PARTITIONy在bk_idk/components/part_table/part_table.mk和CMakeLists.txt中加入工程名根据实际需求调整config/bk7258/bk7258_partitions.csv和partitions.csv删除build/your_project/执行make bk7258 PROJECTyour_project检查生成的vendor_flash.c和configuration.json是否与 CSV 一致