基于 CLI 的编译与下载
概述
本章介绍如何在 CLI 环境中编译 SDK,然后将固件下载到芯片中。
编译流程
配置及编译可以在任意目录下进行。 ameba.py build [args] 指令用于编译。用户可以参考 常用指令 一节了解该指令的使用方法。
编译步骤如下:
配置环境:
source path/to/your/sdk/env.sh(在 Windows 系统中执行env.bat)选择芯片型号:
ameba.py soc执行编译指令:
ameba.py build,开始编译CMake 生成的中间文件将会被存放在
build_RTLxxx/build文件夹编译完成后,固件将被拷贝到当前目录下的
build_RTLxxx目录下,其中RTLxxx为芯片型号
编译指令的更多用法请参考 编译指令 。
固件(Image)是编译的最终产物,用户需要将其下载到芯片中。
编译指令
ameba.py build 指令是通过封装底层脚本 tools/scripts/build.py 实现的,常用指令如下表所示:
功能 |
命令 |
描述 |
|---|---|---|
帮助 |
|
列出支持的命令 |
编译 |
|
增量编译工程 |
纯净编译 |
|
移除所有产物并编译工程 |
指定示例 |
|
编译名为 APP 的示例 |
指定目标 |
|
编译指定的 target |
清理 |
|
清理编译产物 |
调试 |
|
进入调试模式 |
帮助指令
如果您是第一次使用 build 指令,可以通过以下命令了解此指令的用法:
ameba.py build -h
通过 -h 或 --help 选项,所有支持的命令将会被列出。
纯净编译
纯净编译意味着此次编译环境没有之前残留产物的影响,所有之前编译的产物及配置项都会在此次编译之前被移除。 -p 选项和 --pristine 选项等价。
ameba.py build -p
备注
纯净编译同时会移除
menuconfig文件夹,之前的配置内容也将被丢弃,本次编译将会使用 初始配置。如果仅需清理编译产物但保留之前的配置选项,请使用
ameba.py build -c命令进行清理。
增量编译
如果不带任何参数,项目将会进行增量编译,增量编译和全量编译相比会大大节省时间。
ameba.py build
编译指定示例
${SDK}/component/example 目录下提供了丰富的应用示例。如果您想要编译其中一个示例,可以通过 -a 或 --app 将应用名称或应用路径传递给 build.py。
ameba.py build -a <APP>
例如,需要编译 ${SDK}/component/example/network_protocol/http_client 示例,可以输入以下命令:
ameba.py build -a ${SDK}/component/example/network_protocol/http_client
//or
ameba.py build -a http_client
如果不通过 -a 传入应用名称或路径,将编译默认应用(仅使能无线连接)。
备注
example 目录下提供了名为
prj.conf的文件,当用户未配置过项目时,ameba.py build -a <APP>将会组合component/soc/amebaxxx/project/default.conf与example/.../<APP>/prj.conf以使用 初始配置。如果当前 build_RTLxxx 目录下已有
menuconfig文件夹,可先通过ameba.py menuconfig -f /.../prj.conf配置或手动重新配置,然后使用ameba.py build -a <APP>编译,也可以直接使用ameba.py build -a <APP> -p删除之前的配置项。
编译指定目标
默认情况下,所有必要的目标将被一起编译。
可通过
-g或--target选项单独编译特定的目标可通过
-h选项查看所有可用目标
ameba.py build -g <TARGET>
例如,要重新生成 imgtool flashloader,需输入以下命令:
ameba.py build -g gen_imgtool_floader
项目清理
-c 和 --clean 都可以清理当前项目的产物及中间文件,但 .config 配置文件会被保留。
ameba.py build -c
传递 CMake 的 Cache 变量
CMake 可以通过 -D 选项设置 Cache 变量的初始值。为了继承这一功能, ameba.py build 也同样支持 -D 选项。CMake 预定义的值和用户自定义的值都可以放在 -D 后面。
ameba.py build -D CACHE_VAL1=VALUE1 CACHE_VAL2=VALUE2 …
备注
CMake 原生的 -D 与 ameba.py build 的 -D 的不同之处如下:
CMake 要求每个变量定义前都要有
-D前缀,例如:-DCACHE_VAL1=VALUE1 -DCACHE_VAL2=VALUE2。ameba.py build要求所有变量跟随在一个单独的-D后面,并在-D和变量之间留有空格。例如:-D CACHE_VAL1=VALUE1 CACHE_VAL2=VALUE2。
固件下载
我们提供了 ImageTool 专门用于固件的下载,请参考 Image Tool 。