1@page aos-tools_user_manual 构建工具 aos-tools 2 3[更正文档](https://gitee.com/alios-things/documentation/edit/rel_3.3.0/aos-tools/aos-tools_user_manual.md)      [贡献说明](https://help.aliyun.com/document_detail/302301.html) 4 5aos-tools 是 AliOS Things 的命令行编译系统,支持组件管理、程序编译、烧录等功能。<br />aos-tools 使用git 来获取组件的代码和维护代码的版本管理。 6# 安装 aos-tools 7使用miniconda3创建一个虚拟环境,并在其虚拟环境中安装aos-tools。 8```shell 9pip install -U aos-tools 10``` 11详细安装操作请参考《[HaaS100快速开始](https://g.alicdn.com/alios-things-3.3/doc/haas100_quick_start.html)》。 12# aos-tools 命令 13使用 aos-tools 需遵循的格式如下: 14``` 15aos command options 16``` 17可选元素显示在方括号 [ ] 中。例如,许多命令会用到`组件名`参数: 18``` 19aos install [component0 component1 ... componentn] 20aos list [-r] 21``` 22## help 23通过 aos 的 help 命令,可以查看 aos-tools 支持哪些命令,并可以获取该命令完整的使用说明。 24``` 25aos help 26``` 27可以通过在 aos 工作目录下运行以下命令来查看有关某个命令的详细信息: 28``` 29aos help command 30``` 31例如,以下命令会生成 aos `init` 参数的说明和选项列表,该参数会在当前目录中初始化 aos,创建 aos 工作目录。 32``` 33aos help init 34``` 35如果您仅想查看可用选项的列表,请运行: 36``` 37aos command --help 38``` 39或者 40``` 41aos command -h 42``` 43例如: 44``` 45aos init --help 46``` 47## init 48通过 aos init 命令来初始AliOS Things 的工作区: 49``` 50mkdir alios_iot 51cd alios_iot 52aos init 53``` 54执行完毕之后,会在`alios_iot`目录生成一个隐藏的`.aos`文件,存储的内容为 `key: value` 形式键值对。内容为: 55``` 56gitee_token: 32e702f14950e51e3a230e7ca8a60f10 57occ_host: occ.t-head.cn 58repo: https://gitee.com/alios-things/manifest.git 59branch: master 60``` 61如果使用定制化的manifest仓库(包含各个组件的类型、仓库url、版本等),如git@gitlab.alibaba-inc.com:alios_iot/manifest.git,分支为v1.0.0,则使用一下命令初始化工作区: 62```shell 63aos init git@gitlab.alibaba-inc.com:alios_iot/manifest.git -b v1.0.0 64``` 65## search 66在aos工作目录下使用。 根据关键字从云端查找相应的组件,并列出组件的简单描述。 67``` 68aos search rhino 69``` 70## install 71``` 72aos install helloworld_demo 73``` 74下载 `helloworld_demo` 示例工程,以及该所依赖的组件,每一个组件都对应一个 git 仓库,通过 `git clone` 命令将远程代码库中代码复制到本地目录。下载完组件后,当前的工作目录结构如下: 75``` 76components/ 77hardware/arch 78hardware/board 79hardware/chip 80kernel/ 81solutions/helloworld_demo/ 82``` 83如果下载指定branch或tag的组件,则使用 `-b`选项,如下载v1.0.0分支。 84``` 85aos install cli -b v1.0.0 86``` 87如果从本地的组件压缩包,安装组件,则使用: 88``` 89aos install -L xxx_v1.0.zip 90``` 91## uninstall 92删除单个组件,不修改其它组件的依赖关系。 93``` 94aos uninstall component1 95``` 96## list 97在 aos 工作目录下使用。显示单个或者多个组件的描述信息。 下面介绍几种典型场景的使用: 98 99- 显示服务器所有的组件信息,并更新组件描述信息到本地数据库: 100``` 101aos list -r 102``` 103如果组件本地也存在,那么会在组件名字前显示 * 标记,例如: 104``` 105* aos (V7.3.0) - aos kernel api 106* at (V7.3.0) - AT 组件负责完成 AT 命令的发送、命令接收等整个 AT 命令数据交互流程。 107 aui_cloud (V7.3.0) - 专为rtos打造的语音解决方案,提供了语音合成、语义理解、本地语义端文本理解等接口。 108 av (V7.3.0) - av是一个轻量级的多媒体组件,主要包含AV基础框架、播放器和音频服务三部分。 109 ble_mesh (V7.3.0) - ble_host and mesh stack 110 board_dummy (V7.3.0) - csi_dummy development board configure. 111 button (V7.3.0) - 按键服务组件,支持通过GPIO和ADC控制。 112 cb2201 (V7.3.0) - CB2201 board configure. 113``` 114 115- 显示本地所有组件信息 116``` 117aos list 118``` 119 120- 显示组件的依赖信息,包括依赖和被依赖的组件信息: 121``` 122aos list rhino -d 123``` 124 125- 显示各种类型的组件信息,包括solution组件、chip组件、board组件、common组件: 126``` 127aos list -s 128aos list -c 129aos list -b 130aos list -m 131``` 132## rename 133在 aos 工作目录下使用。此命令不会对云端进行操作。一般是在用户基于某个已经存在的组件进行开发,当开发完毕时需要修改组件名字时用到。 运行此命令会修改以下几部分的内容: 134 135- 文件夹名字 136- `package.yaml`里面`name`字段 137- 当被其他组件依赖时,在其他组件的`package.yaml`文件里的`depend`字段内容也会进行修改 138## copy 139复制一个已有组件为一个新的组件。运行该命令会修改: 140 141- 文件夹名字 142- `package.yaml`里面`name`字段 143## show 144在 aos 工作目录下的solution类型组件下使用。用于显示方案依赖的组件列表、库(路径)、头文件、宏定义、变量、编译选项、链接选项、链接脚本、工具链、组件源码等信息。<br />当一个solution依赖单个或者多个board组件时,可以通过命令 `aos show -b board_name` 来查看方案依赖的组件列表和指定的board信息。 145## toolchain 146可以在任意目录下使用。可以安装csky和arm的工具链,安装路径在`~/.aliot`下。<br />可以使用`-d`选项删除已安装的toolchain。 147## export 148在aos工作目录下使用。 此命令可以将AliOS Things工作目录下的单个组件或者多个组件以及这些组件所依赖的组件全部导出到指定的目录。 149 150- 在solution类型组件下使用此命令可以导出所有类型组件到指定目录 151- 在其他目录下使用此命令可以导出除solution组件外的其他组件到指定目录 152``` 153aos export csi_pangu button /tmp/1 154``` 155## pack 156在aos工作目录下使用。 此命令可以将AliOS Things工作目录下的单个组件,压缩成zip包后导出到指定的目录。该命令与 `aos install -L` 配合使用, `aos pack` 负责将组件打成压缩包,然后共享给其他开发者;其他开发者获取到该压缩包后,可使用`aos install -L`命令安装 157``` 158aos pack component1 ../destdir 159``` 160## upgrade 161在aos目录下使用,将package.yaml里面的version作为仓库分支,更新组件代码。 162## format 163在aos工作目录下使用此命令可以格式化组件的`package.yaml`文件,并保存到组件相应的目录中。 164``` 165aos format component1 166``` 167## config 168在solution类型组件目录下使用该命令可以将该solution的配置变量显示出来。比如: 169``` 170BOARD_PATH = /home/xxx/work/git_project/yoc7.3/boards/csky/pangu_cpu0 171BOARD = PANGU_CPU0 172CONFIG_TEE_CA = 1 173CONFIG_CHIP_PANGU = 1 174cpu_num = 804 175CHIP = CSI_PANGU 176CONFIG_DECODER_AMRNB = 1 177ARCH = CSKY 178CPU = CK804EF 179CONFIG_DECODER_AMRWB = 1 180CONFIG_DECODER_PCM = 1 181CHIP_PATH = /home/xxx/work/git_project/yoc7.3/components/csi_pangu 182``` 183## convert 184在aos工作目录下使用。 当用户想把一个源码目录快速变为一个 AliOS Things 组件时,可以使用这个命令。 执行以下命令会在`<dir>`目录下生成`package.yaml`文件模板,用户可根据需求再适当的调整修改`package.yaml`文件。 185``` 186aos convert <dir> 187``` 188 189 190## make 191当您通过 `aos install helloworld_demo` 命令下载了一个示例工程后,对应的工程代码及相关的组件代码已经安装到AliOS Things 工作环境中,可以通过以下命令,实现工程的编译: 192``` 193cd solutions/helloworld_demo 194aos make 195``` 196如果您是第一次使用 aos-tools , `aos make` 命令会自动下载对应的编译工具链,并安装到系统的`~/.aliot`目录,您将看以下信息: 197``` 198scons: Reading SConscript files ... 199100.00% [##################################################] Speed: 6.787MB/S 200scons: done reading SConscript files. 201scons: Building targets ... 202``` 203使用solution组件依赖的其它板子,如haas100,编译工程,则输入命令: 204``` 205aos make -b haas100 206``` 207使用`V=1`可以查看编译的详细信息。 208``` 209aos make V=1 210``` 211## make clean 212在solution目录下使用,清除当前solution的编译信息。 213``` 214aos make clean 215``` 216## make distclean 217在solution目录下使用,清除当前solution的编译信息。 218``` 219aos make distclean 220``` 221## burn 222在solution目录下使用,使用aos make编译完成后,使用该命令烧录固件。烧录的参数配置,烧录工具,由当前solution使用的board组件或chip组件指定;烧录的文件,从solution组件的SConstruct文件中获取;如果SConstruct文件中未指定,则从当前solution的out目录下获取那个最新的`*@*.bin`格式的文件。 223``` 224aos burn 225``` 226如果是使用aos make -b <board_name>编译的话,则烧录固件时,也需要指定同样的板子。比如: 227``` 228# 编译时指定板子haas100 229aos make -b haas100 230# 烧录固件时也必须指定同样的板子 231aos burn -b haas100 232``` 233成功烧录以后,将在当前目录生成`.config_burn`文件,保存串口号。如果下次烧录时,串口号有变化,则删除该文件后,重新烧录。 234默认情况下,burn命令只烧录编译出来的bin文件。如果想要烧录更多文件,则需要在指定`flash_program`的那个`package.yaml`文件里,加上`program_data_files`字段。比如要额外烧录haas1000组件里`release/write_flash_tool/ota_bin/littlefs.bin`文件,则需要在haas1000组件的`package.yaml`里面,按照如下修改: 235``` 236hw_info: 237 flash_program: release/aos_burn_tool/flash_program.py 238 # 以下为新增内容:在flash_program下面添加program_data_files,注意"-"号和对齐。 239 program_data_files: 240 - filename: release/write_flash_tool/ota_bin/littlefs.bin 241 address: 0xB32000 242``` 243## debug 244在solution目录下使用,启动gdb server。配合Visual Studio Code的调试功能使用。 245## monitor 246在solution目录下使用,使用该命令打开串口。该命令成功执行之后,将在当前目录生成`.config_monitor`文件,保存串口号和波特率。下次可直接使用 `aos monitor` ,而无需再指定串口和波特率。 247``` 248aos monitor [port] [baudrate] 249``` 250 251 252## make solution@board -c config 253为了兼容aos-cube的功能,保留该指令。<br />在aos顶层目录下使用,配置当前需要编译的solution和board。该命令将在当前目录下生成一个 `.config`文件。 254``` 255aos make helloworld_demo@haas100 -c config 256``` 257当配置完成以后,上述的`aos make` 、`aos make clean` 、`aos make distclean` 、`aos burn` 指令也随之升级,可以在aos顶层目录下使用。<br />另外,相比于`aos make clean`的功能, `aos make distclean` 命令将会额外执行删除`.config`文件的操作。 258## create project 259在非AliOS Things仓库目录下运行,创建工作区,并下载指定的solution作为模板解决方案,进行二次开发。 260``` 261aos create project -b <board> -t <solution> -d <destdir> <solution_name> 262``` 263其中 -b 选项,指定 开发板名称,如haas100;<br />-t 选项,指定 已有的解决方案名称,如http_demo。如果未设置,默认为helloworld_demo;<br />-d 选项,指定 工作区workspace目录,如果该目录指向已 **初始化过的工作区** ,则复用原来的工作区;<br />-r 选项,指定 远程manifest仓库地址,默认为 `https://gitee.com/alios-things/manifest.git`;<br />-B 选项,指定 远程manifest仓库的分支,默认为 `master`;<br />solution_name,指定新的solution名字,是将 -t选项 指定的解决方案 重命名。 264``` 265# 根据模板helloworld_demo,创建一个新的解决方案mysolution 266aos create project -b haas100 -t helloworld_demo -d /home/johnny/myworkspace mysolution 267``` 268## sdk 269在solution目录下使用,复制当前solution的所依赖组件的头文件和库文件至aos_sdk目录下。用户可将该solution目录提供给其他开发者,做二次开发。<br /> 270 271