新增sample示例
本文介绍如何在现有板仓下新增 sample 类型的单点功能示例,包括目录创建、app.defconfig 与 CMakeLists.txt 编写及编译验证。
适用场景
sample 用于组件能力的单点功能演示(如单个驱动点亮、单模块调用)。适用于在现有板仓下新增一个功能示例,无需修改板入口或主仓的 CMakeLists.txt,示例由 apps/<BOARD>/CMakeLists.txt 中的 add_app_targets 宏自动发现。
前置条件:已完成环境搭建与 repo 安装配置。
步骤
1. 创建示例目录
2. 编写 app.defconfig
在示例根目录下创建 app.defconfig,字段见附录 — app.defconfig 字段清单。
参考样例:
- samples/capture_picture/app.defconfig(示例无 patch、无组件、无第三方库)
- samples/ble_wifi/app.defconfig(示例包含 rootfs 覆盖、BSP 编译)
3. 编写 CMakeLists.txt
示例按复杂度通常分为以下四种模式,以下仅供参考,根据项目示例参考创建文件。
| 模式 | 必备文件 | 说明 |
|---|---|---|
自带 CMakeLists.txt,add_executable |
app.defconfig + CMakeLists.txt + 源文件 |
应用自管编译选项、链接库、安装目录 |
| 自带 CMakeLists.txt,调 SDK 内置 Makefile | app.defconfig + CMakeLists.txt(含 add_custom_target) |
编译 SDK mpp/sample/ 下的工程,拷贝产物到 _build/bin/ |
| 多模块 + SDK patch | app.defconfig + CMakeLists.txt + source/ + patch/ |
add_subdirectory(source) / add_subdirectory(patch) 分模块 |
| 纯自动发现(无自定义 CMakeLists.txt) | app.defconfig + *.c |
add_app_targets 宏自动建目标、链接组件库 |
注意:
- 复杂多模块示例的源码用
source/目录,单文件示例将.c直接放在示例根目录。- 依赖 SDK 改动时,在示例的
patch/下放置apply_patches.sh和可选的bsp_make_opts。- 引入新的第三方开源软件时,按 《添加第三方开源组件文档》 完成合规登记。
- 产品核心功能案例(
reference)的新增流程见 新增 reference 示例。
4. 编译
5. 验证
- 编译成功后,确认
_build/bin/下生成了示例的二进制文件; - 若示例配置了
CONFIG_BUILD_INSTALL=y,烧录镜像生成在_build/install/image/<VARIANT>/(见编译产物落点)。
附录
app.defconfig 字段清单
app.defconfig 是 Kconfig 的差异集,未列出的项一律取 Kconfig 中的默认值。
以下为部分常用字段,具体参考 open_source/Kconfig、components/*/Kconfig、configs/Kconfig 等 Kconfig 文件以及本项目示例的 app.defconfig:
| 字段 | 类型 | 用途 |
|---|---|---|
CONFIG_CHIP_NAME |
字符串 | 芯片型号,决定 _build/sdk/ 下的 SDK 目录名 |
CONFIG_CROSS_PREFIX |
字符串 | 交叉编译工具链前缀 |
CONFIG_SDK_BUILD_BSP |
布尔 | 是否编译 BSP,纯应用示例置 n |
CONFIG_SDK_BSP_DEBUG |
布尔 | BSP 编译模式:y=DEBUG=1,n=DEBUG=0 |
CONFIG_SDK_BUILD_MPP |
布尔 | 是否编译 MPP 驱动(.ko) |
CONFIG_OS_<LIB> |
布尔 | 启用 open_source/<lib>/,未列=关闭 |
CONFIG_COMP_<NAME> |
布尔 | 启用 components/<name>/ |
CONFIG_SDK_OS_LINUX |
布尔 | prepare 阶段把 linux 源码包搬入 SDK 目录 |
CONFIG_BUILD_INSTALL |
布尔 | 编译后是否 cmake --install(生成烧录镜像) |
!注意: SDK patch 与 BSP 自定义参数不通过
app.defconfig配置。 构建脚本会自动推导示例的 patch 路径。
编译产物落点
| 产物 | 路径 |
|---|---|
| 可执行文件 | _build/bin/ |
| 组件静态库 | _build/lib/ |
| 第三方库 | _build/third_party/lib/ |
| 烧录镜像(含 BSP 镜像、MPP .ko、rootfs) | _build/install/image/<VARIANT>/ |
<VARIANT> 取值取决于示例代码中定义的变体名称,该目录内容可直接用于烧录工具。
相关文档
| 文档 | 说明 |
|---|---|
| 构建文档 | 编译命令、烧写方法与产物说明 |
| 新增 reference 示例 | 产品核心功能类型案例的新增流程 |
| 新增开发板 | 新建板仓并纳入 repo 多仓管理 |
| 新增组件模块 | 在现有组件仓下创建可复用的组件模块 |
| 添加第三方开源组件 | 开源库注册与合规登记 |