AVDK 创建新工程注意事项
2026/7/28 14:20:43 网站建设 项目流程

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.1FLASH overflowed by XXXXX bytes
    • 6.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/doorbellmedia/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 set

Kconfig 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 × 68K2108K
32 × 68K2176K
33 × 68K2244K
34 × 68K2312K

3.4 修改 app 分区大小示例

例如 把 app 从 1768K 改为 2244K(33 × 68K):

config/bk7258/bk7258_partitions.csv

-app,,2124k,code,TRUE,FALSE +app,,2244k,code,TRUE,FALSE

config/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.cconfig/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_projectslist(APPEND ...)块,追加新工程名:

list(APPEND bk7258xx_supported_projects ... "your_project_name" )

两个文件都必须修改,缺一不可:

  • CMakeLists.txt影响 CMake 阶段,触发自动生成vendor_flash.c/configuration.json
  • part_table.mk影响 Makefile 阶段,决定build_main.mk是否调用分区表工具生成 bootloader JSON

五、编译与清理

5.1 编译命令

makebk7258PROJECT=your_project_name

如果不指定PROJECT,默认构建media/doorbell

ifeq ("$(PROJECT)", "") export PROJECT := media/doorbell endif

5.2 清理构建

清理指定工程(推荐):

rm-rfbuild/your_project_namemakebk7258PROJECT=your_project_name

清理所有工程:

makeclean

注意:根目录make clean不接受PROJECT=参数,总是清理整个build/目录。


六、常见问题排查

6.1FLASH overflowed by XXXXX bytes

原因:app 分区大小 < 实际固件.text段大小。

排查步骤:

  1. 确认工程名已加入part_table.mkCMakeLists.txt的白名单
  2. 确认bk7258_partitions.csv/partitions.csv/vendor_flash.c/configuration.json中 app 大小一致
  3. 确认大小满足 68K 对齐
  4. 删除旧 build 目录后重新编译

6.2 修改 config 后没有生效

原因:build 目录缓存了旧配置。

解决:

rm-rfbuild/your_project_namemakebk7258PROJECT=your_project_name

6.3 分区表修改后 vendor_flash.c 没有更新

原因:工程名不在CMakeLists.txtbk7258xx_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固件打包配置

八、推荐的最小工程创建流程

  1. 复制模板工程到projects/your_project/
  2. 清理config/bk7258/config中无关模块开关
  3. 确认CONFIG_OVERRIDE_FLASH_PARTITION=y
  4. bk_idk/components/part_table/part_table.mkCMakeLists.txt中加入工程名
  5. 根据实际需求调整config/bk7258/bk7258_partitions.csvpartitions.csv
  6. 删除build/your_project/
  7. 执行make bk7258 PROJECT=your_project
  8. 检查生成的vendor_flash.cconfiguration.json是否与 CSV 一致

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询