跳转至

增量编译文件系统

本文介绍在不重编 BSP 的情况下,仅增量编译 rootfs 并打包烧录镜像。

注意:此文以HiSpark SDK为例介绍使用CMake(或make)增量编译,其他版本SDK可进行内容参考

适用场景

适用于修改了案例的源码或者需要编译出文件系统进行快速重编译的场景。 需要满足以下条件:

  • 成功执行过一次 bash scripts/build.sh build --target ...,若未执行过,需先进行一次正确编译。
  • 案例自身存在 rootfs/CMakeLists.txt 文件,可以产出文件系统。若无则需参考其他案例代码编写。

步骤

确保文件系统生成配置已开启

在某些情况下,案例可能编写了文件系统的构建文件,但默认不开启,可通过以下方式进行配置:

一、在目标应用的 app.defconfig 中确保以下配置项 CONFIG_BUILD_INSTALL 值为 y。 二、运行 bash scripts/menuconfig.sh,进入 Build 菜单,勾选 Run cmake --install after build,按 s 保存退出。

app.defconfig 位于案例源码目录中。
注意:修改 app.defconfig 后需用build.sh重新指定 --target 展开 defconfig,否则CONFIG_BUILD_INSTALL的更改不生效。

执行增量编译

首次构建(若未编译过):

# 首次编译
bash scripts/build.sh build --target cv610_ev_board references ai_table_lamp

# 切换到其他案例
bash scripts/build.sh build --target cv610_ev_board <案例类别> <案例名>

注意:切换 target 时,新案例自身的 SDK patch 会被应用,旧案例对 SDK 的 patch 不会自动回滚。 若两个案例自身的 patch 存在冲突,一定要重新全量编译。


增量编译

只修改 hi_aiot_solution 的 apps 或 components 目录下的应用或组件源码,直接使用 CMake 命令增量编译。

# 若有案例新增c文件,刷新案例源码的CMakeLists.txt,
# 编译时重新执行file(GLOB),同理组件的新增源码
# 若仅修改源码,无需刷新CMakeLists.txt
touch apps/cv610_ev_board/references/ai_table_lamp/source/CMakeLists.txt

# 构建 TableLamp 及其依赖
cmake --build _build --target TableLamp
# 等价于
cd _build && make TableLamp

# 重新打包烧录镜像
cmake --install _build

TableLamp 为真实构建名,在案例自身 CMakeLists.txtadd_executable 中定义,编译后可用 cmake --build _build --target help 验证该名字是否在列表中。

编译结果

编译产物位于以下目录:

路径 说明
_build/install/bin/ 可执行文件
_build/install/<VARIANT>/ 烧录镜像(仅产出文件系统的案例,含 uImagerootfs*、分区表)

<VARIANT> 取值取决于应用配置中定义的变体名称,参考案例的README确认。
该目录内容可直接用于烧录工具。


验证

cmake --build 输出 [100%] Built target <TARGET_NAME> 即表示增量编译成功。

确认编译产物已生成:

# 可执行文件
ls _build/install/bin/

# 烧录镜像(产出文件系统的案例)
ls _build/install/image/*/uImage

附录

放置预编译 BSP 镜像

BSP 编译耗时较长。对于仅修改应用层代码的场景,可将预编译好的uImage放入构建目录sdk/<bsp_pub_dir>/pub下,使构建系统自动跳过 BSP 编译。

保持 CONFIG_SDK_BUILD_BSP=y。关闭该选项虽也能跳过 BSP 编译,但会禁用依赖SDK_BUILD_BSP选项的 LCD 驱动、触摸屏驱动等 Kconfig 选项,以实际源码和配置为准。