yoctools
yoctools是 YoC 软件开发平台的命令行编译系统,通过 yoctools工具建立 YoC 在Linux下的开发环境,支持 YoC 组件管理、程序编译、烧录等功能。yoctools支持 Git 来获取 YoC 组件的代码,只是为了让您在 YoC 环境中更轻松地使用 Git,每个组件都是一个独立的 Git仓库,仍然支持使用 Git 命令来维护代码的版本管理。
1. 安装
通过 pip 命令来安装 yoctools 到你的系统中,yoctools 支持 python2.7+、python3.6+。一般来说安装最新版本的yoctools到系统即可。
1.1 安装最新版本的yoctools
sudo pip install yoctools -U
1.2 安装指定版本的yoctools
sudo pip install yoctools==2.0.33
2. 命令
使用 YocTools 需遵循的格式如下:
yoc command options
可选元素显示在方括号 [ ] 中。例如,许多命令会用到组件名
参数:
yoc install [component0 component1 ... componentn]
yoc list <-r>
2.1 help
通过 yoc 的 help 命令,可以查看 yoctools 支持哪些命令,并可以获取该命令完整的使用说明。
yoc help
可以通过在 yoc 工作目录下运行以下命令来查看有关某个命令的详细信息:
yoc help command
例如,以下命令会生成 yoc init
参数的说明和选项列表,该参数会在当前目录中初始化 yoc,创建 yoc 工作目录。
yoc help init
如果您仅想查看可用选项的列表,请运行:
yoc command --help
或者
yoc command -h
例如:
yoc init --help
2.2 init
通过 yoc init 命令来初始YoC 的开发环境:
mkdir yoc_workspace
cd yoc_workspace
yoc init
执行完毕之后,会在yoc_workspace
目录生成一个隐藏的.yoc
文件,存储的内容为 key: value
形式键值对。内容为:
gitee_token: 32e702f14950e51e3a230e7ca8a60f10
repo: https://gitee.com/yocop/manifest.git
occ_host: occ.t-head.cn
branch: master
使用yoc init --aone
或者yoc init git@gitlab.alibaba-inc.com:yocopen/manifest.git
可以生成内网的开发环境,此时.yoc文件内容如下:
gitee_token: 32e702f14950e51e3a230e7ca8a60f10
repo: git@gitlab.alibaba-inc.com:yocopen/manifest.git
occ_host: occ.t-head.cn
branch: master
2.3 search
在yoc工作目录下使用。 根据关键字从云端查找相应的组件,并列出组件的简单描述。
yoc search dummy
2.4 install
yoc install helloworld
或者指定分支下载(不填-b则默认master分支):
yoc install helloworld -b v7.4.0
下载 helloworld
示例工程,以及该所依赖的组件,每一个组件都对应一个 git 仓库,通过 git clone
命令将远程代码库中代码复制到本地目录。下载完组件后,当前的工作目录结构如下:
boards/
components/
solutions/helloworld/
使用yoc install helloworld -s
可以只安装helloworld这个组件,而不下载helloworld所依赖的其他所有组件。
如果helloworld组件已经存在,可以通过加上-f
选项来强制安装:yoc install helloworld -s -f
,此时会在helloworld当前所在的分支进行类似git pull的操作。
2.5 list
在 yoc 工作目录下使用。显示单个或者多个组件的描述信息。 下面介绍几种典型场景的使用:
- 显示服务器所有的组件信息,并更新组件描述信息到本地数据库:
yoc list -r
如果组件本地也存在,那么会在组件名字前显示 * 标记,例如:
* aos (V7.3.0) - aos kernel api
* at (V7.3.0) - AT 组件负责完成 AT 命令的发送、命令接收等整个 AT 命令数据交互流程。
aui_cloud (V7.3.0) - 专为rtos打造的语音解决方案,提供了语音合成、语义理解、本地语义端文本理解等接口。
av (V7.3.0) - av是一个轻量级的多媒体组件,主要包含AV基础框架、播放器和音频服务三部分。
ble_mesh (V7.3.0) - ble_host and mesh stack
board_dummy (V7.3.0) - csi_dummy development board configure.
button (V7.3.0) - 按键服务组件,支持通过GPIO和ADC控制。
cb2201 (V7.3.0) - CB2201 board configure.
- 显示本地所有组件信息
yoc list
- 显示组件的依赖信息,包括依赖和被依赖的组件信息:
yoc list aos -d
- 显示各种类型的组件信息,包括solution组件、chip组件、board组件、common组件:
yoc list -s
yoc list -c
yoc list -b
yoc list -m
2.6 rename
在 yoc 工作目录下使用。此命令不会对云端进行操作。一般是在用户基于某个已经存在的组件进行开发,当开发完毕时需要修改组件名字时用到。 运行此命令会修改以下几部分的内容:
- 文件夹名字
package.yaml
里面name
字段- 当被其他组件依赖时,在其他组件的
package.yaml
文件里的depend
字段内容也会进行修改
2.7 show
在 yoc 工作目录下的solution类型组件下使用。用于显示方案依赖的组件列表、库(路径)、头文件、宏定义、变量、编译选项、链接选项、链接脚本、工具链、组件源码等信息。
- 当一个solution依赖单个或者多个board组件时,可以通过命令
yoc show -b board_name
来查看方案依赖的组件列表和指定的board信息。 - 当一个solution依赖多个sdk类型组件时,可以通过命令
yoc show -s sdk_chip_xxx
来查看某个芯片sdk的组件列表和信息。
2.8 toolchain
可以在任意目录下使用。可以安装csky的工具链,安装路径在/usr/local/thead
下,并且会在/usr/bin/
目录下实现软连接。
2.9 export
在yoc工作目录下使用。 此命令可以将YoC工作目录下的单个组件或者多个组件以及这些组件所依赖的组件全部导出到指定的目录。
- 在solution类型组件下使用此命令可以导出所有类型组件到指定目录
- 在其他目录下使用此命令可以导出除solution组件外的其他组件到指定目录
yoc export csi_pangu button /tmp/1
2.10 format
在yoc工作目录下使用此命令可以格式化组件的package.yaml
文件,并保存到组件相应的目录中。
yoc format component1
2.11 variable
在solution类型组件目录下使用该命令可以将该solution的配置变量显示出来。比如:
BOARD_PATH = /home/xxx/work/git_project/yoc7.3/boards/csky/pangu_cpu0
BOARD = PANGU_CPU0
CONFIG_TEE_CA = 1
CONFIG_CHIP_PANGU = 1
cpu_num = 804
CHIP = CSI_PANGU
CONFIG_DECODER_AMRNB = 1
ARCH = CSKY
CPU = CK804EF
CONFIG_DECODER_AMRWB = 1
CONFIG_DECODER_PCM = 1
CHIP_PATH = /home/xxx/work/git_project/yoc7.3/components/csi_pangu
2.12 convert
在yoc工作目录下使用。
当用户想把一个源码目录快速变为一个 yoc 组件时,可以使用这个命令。
执行以下命令会在<dir>
目录下生成package.yaml
文件模板,用户可根据需求再适当的调整修改package.yaml
文件。
yoc convert <dir>
2.13 cdk
在solution类型目录下使用。 可以使用此命令将工程转换为CDK工程,在当前目录会生成project.cdkproj文件。 如果没有script目录,还会生成script目录,里面存放CDK所需要的烧录脚本文件模板,用户需要根据需求进行修改。
2.14 sync
在yoc工作目录下使用。 可以自动同步每个组件当前分支的最新代码。如果有未提交的代码,那么会有警告类型的提示信息。
2.15 status
在yoc工作目录下使用。 可以显示每个组件的修改和未提交文件的状态。
2.16 log
在yoc工作目录下使用。 可以显示每个组件最新的commit点信息。 比如要导出到某个文件,可以使用以下命令实现:
yoc log > commit.log
2.17 checkout
在yoc工作目录下使用。
可以将多个组件批量checkout到某个分支。
yoc checkout -b develop
或者可以通过使用
yoc log
命令导出的文件批量切换到commit点yoc checkout -f commit.log
2.18 branch
在yoc工作目录下使用。 可以查看多个组件的本地和远程分支。
查看本地分支:
yoc branch
查看本地和远程分支:
yoc branch -a
2.19 tag
在yoc工作目录下使用。 使用此命令可以列出多个组件的TAG信息。
2.20 cpu
在yoc工作目录下使用。 使用此命令可以列出当前yoctools工具所支持的cpu列表。
2.21 depcheck
在solution目录下使用。 可以检测并且checkout当前solution所依赖的各个组件到真正的分支版本。 使用场景:
- 有些组件当前的分支和依赖他的solution中描写的版本号可能不一致。
- 同个工作目录下有多个solution,但是他们依赖的组件版本可能不一样。
2.22 map
在solution目录下使用。 可以解析编译完成的*.map文件,直接显示各个组件的代码密度,也可以将更详细的信息导出到excel文件。
3. 工程编译
当您通过 yoc install helloworld
命令下载了一个示例工程后,对应的工程代码及相关的组件代码已经安装到yoc 工作环境中,可以通过以下命令,实现工程的编译:
cd solutions/helloworld
make
如果您是第一次使用 yoctools , make
命令会自动下载对应的编译工具链,并安装到系统中,您将看以下信息:
scons: Reading SConscript files ...
100.00% [##################################################] Speed: 6.787MB/S
scons: done reading SConscript files.
scons: Building targets ...
4. 注意事项
1、yoctools依赖于python和pip,可基于python2或python3版本来使用。使用者需要保证两者处于同一大版本(注意:python有两个发展分支,分别为python2和python3)。可执行命令python --version和pip --version来判断 2、yoctools仅支持 python2.7+、python3.6+。对于ubuntu16.04及以下版本,预装的python3版本均在3.6以下,若需要使用python3,请自行安装高版本python3环境,并建个软链接指向python。
5. Q&A
5.1 linux环境下找不到pip或者安装时速度很慢如何办?
- 以ubuntu为例,通过修改/etc/apt/sources.list,可将源修改为mirrors.aliyun.com,然后执行sudo apt-get update。其他linux发行版源的修改,请自行搜索。
- 若开发者使用默认使用python2,ubuntu下可通过sudo apt-get install -y python-pip安装pip。若默认使用python3,则通过sudo apt-get install -y python3-pip安装。
- 安装后请执行pip2 --version或pip3 --version判断是否安装成功。
- 安装成功后,可通过建立软链接重新指向到pip(如果pip命令执行时还是找不到或已经存在)
- 可通过which命令获取到pip等命令安装的位置
5.2 系统中存在多个版本的python或pip怎么办,如何快速切换?
- 可通过update-alternatives命令来切换,具体使用方法请自行搜索。若发行版中不存在的话,可直接通过软链接的方式切换。
5.3 执行pip命令时发生错误怎么办?
- 请确认pip和python是否处于同一个大版本
5.4 ubuntu20.04下python2下无法安装pip怎么办?
- 首先将当前的python版本切换到python2
- 下载get-pip脚本:curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py
- 执行命令安装:sudo python2 get-pip.py
- 判断是否安装成功pip2 --version,并可通过软链接指向pip
5.5 遇到下载不完整的警告提示
有时候在执行yoc install的命令下载组件时会遇到如下的警告提示:
Component: xxx maybe not fetch integrallty(miss README.md
or package.yaml
), Please check the branch is right.
这个表示xxx组件没有下载完整,可能是当时网络不好引起的。可以先把这个xxx组件的目录删除了,然后再通过yoc install xxx -b <version> -s
来下载单个组件。
5.6 安装了最新版本的yoctools,但是功能还是老版本的
此时,需要先完全的卸载掉yoctools。在终端多次输入sudo pip uninstall yoctools
直至出现WARNING: Skipping yoctools as it is not installed.
这种提示。然后再使用sudo pip install yoctools -U
命令来安装最新的yoctools。