概述
本章介绍如何搭建 GCC 编译环境,包括 Windows 平台和 Linux 平台。
Windows 平台:以 Windows 10 64-bit 为例
Linux 平台:以 Ubuntu 22.04 x86_64 为例
准备 GCC 编译环境
GCC 编译环境包括 CMake 编译环境、Python 环境,以及其他一些工具软件,如下表所示:
软件 |
版本 |
---|---|
cmake |
3.20 及以上 |
ninja |
1.10.1 及以上 |
make |
3.82 及以上 |
ccache |
4.5.1 及以上 |
Python3 |
3.10 及以上 |
wget |
推荐最新版 |
7zip |
推荐最新版 |
用户可以下载 Realtek 提供的软件合集包,并在编译前运行脚本自动配置环境变量。这种方式不会影响用户原先的软件环境,并且可以避免因软件版本带来的兼容性问题。
下载压缩包并解压至
/opt/rtk-toolchain
文件夹下mkdir /opt/rtk-toolchain cd /opt/rtk-toolchain wget https://github.com/Ameba-AIoT/ameba-toolchain/releases/download/prebuilts-v1.0.3/prebuilts-linux-1.0.3.tar.gz tar -xzf prebuilts-linux-1.0.3.tar.gz
如果下载遇到问题,可尝试使用 aliyun 地址:
wget https://rs-wn.oss-cn-shanghai.aliyuncs.com/prebuilts-linux-1.0.3.tar.gz
备注
压缩包需要解压到默认的
/opt/rtk-toolchain
路径下。如需更改默认路径,请参考 更改工具链安装路径。预安装 Python(Linux 下不提供 Python 的免安装版本)
sudo apt install python3 python3-pip python3-venv
备注
运行
python --version
检查 Python 版本, 建议大于 3.10。如果主机中存在多个 Python 版本,可以使用命令
update-alternatives --install /usr/bin/python python /usr/bin/python3.x 1
选择特定 Python 版本,x 代表期望的版本号。如果报错
command 'python' not found
,尝试运行ln -s /usr/bin/python3 /usr/bin/python
解决问题。
安装依赖库
sudo apt install libssl-dev libncurses5
进入 SDK 根目录,运行
ameba.sh
脚本,自动配置环境变量。source ameba.sh PIP CHECK... All packages are installed correctly! ======================================================== | First choose IC platform: cd [IC]_gcc_project | Configure command: menuconfig.py | Build command: build.py ======================================================== (.venv)
备注
每次重启终端后,都需要执行 source ameba.sh
命令设置环境变量。
在 C 盘下新建
C:\rtk-toolchain
文件夹下载压缩包并解压至
C:\rtk-toolchain
文件夹下备注
压缩包需要解压到默认的
C:\rtk-toolchain
路径下。如需更改安装路径,请参考 更改工具链安装路径。进入 SDK 根目录, 双击 运行根目录下的
ameba.bat
,将自动配置环境变量,后续请继续在此窗口运行命令。PIP CHECK... All packages are installed correctly! ======================================================== | First choose IC platform: cd [IC]_gcc_project | Configure command: menuconfig.py | Build command: build.py ======================================================== (.venv) C:\sdk>
备注
如果用户想在 Windows 下使用 Git Bash 或 MSYS2 等类 Unix 的命令行环境,请在 SDK 根目录下打开新终端后运行
source ameba.sh
。
小技巧
此方式依赖 Python 虚拟环境。若出现 Python 系统错误,如提示找不到 dll 动态库等,请尝试手动删除 SDK 根目录下的 .venv
文件夹并运行 ameba.bat
脚本,将自动重新安装 Python 虚拟环境。
安装工具链
默认情况下,工具链会在第一次编译项目时被自动安装到默认路径下:
Linux:
/opt/rtk-toolchain
Windows:
C:\rtk-toolchain
在进行项目编译前,我们会检查工具链是否被正确安装以及版本是否匹配。如果弹出报错信息,请根据报错信息修复问题并尝试重新编译。
工具链压缩包默认托管在 GitHub 上,首次编译时会尝试从 GitHub 下载工具链压缩包。如果下载遇到问题,请确认主机是否可以正确访问 GitHub。如果无法正常访问,请通过以下命令更换下载源:
build.py -D USE_ALIYUN_URL=True
如果需要修改工具链的安装路径,请在系统中创建环境变量
RTK_TOOLCHAIN_DIR
,并将其赋值为修改后的安装路径。打开
~/.bashrc
文件,在其末尾添加:export RTK_TOOLCHAIN_DIR="/path/to/your/toolchain/dir"
运行以下命令使环境变量立即生效:
source ~/.bashrc
在
选项中新建变量:变量名为
RTK_TOOLCHAIN_DIR
变量值为用户希望的安装路径
重启终端使环境变量生效。
备注
完成上述安装步骤后,在 rtk-toolchain
路径下将有以下文件:
|--- prebuilts-[win/linux]-1.x.x
|
|--- asdk-10.3.1-xxxx
|
|--- vsdk-10.3.1-xxxx
SDK 路径
配置及编译 SDK 需要在 SoC 的 project 路径下进行,对应路径下均放置了供配置及编译的 Python 脚本。
SoC 对应的 GCC project 路径如下所示:
{SDK}/amebadplus_gcc_project
{SDK}/amebalite_gcc_project
{SDK}/amebalite_gcc_project
{SDK}/amebalite_gcc_project
{SDK}/amebasmart_gcc_project
{SDK}/amebagreen2_gcc_project
备注
将 {SDK}
替换为用户自己的 SDK 路径。
编译代码
Realtek 提供 build.py
脚本来简化项目的编译,常用指令如下表所示:
功能 |
命令 |
描述 |
---|---|---|
帮助 |
|
列出支持的命令 |
编译 |
|
增量编译工程 |
纯净编译 |
|
移除所有产物并编译工程 |
指定示例 |
|
编译名为 APP 的示例 |
指定目标 |
|
编译指定的 target |
清理 |
|
清理编译产物 |
调试 |
|
进入调试模式 |
帮助指令
如果您是第一次使用 build.py
脚本,可以通过以下命令了解此脚本的用法:
build.py -h
通过 -h
或 --help
选项,所有支持的命令将会被列出。
build.py -h
usage: build.py [-h] [-a APP] [-c] [-p]
[-g {flashloader,imgtool_flashloader,gen_imgtool_floader}]
[-gdb] [-debug] [-D DEFINED [DEFINED ...]] [--new NEW [NEW ...]]
options:
-h, --help show this help message and exit
-a APP, --app APP application path
-c, --clean clean
-p, --pristine pristine build
-g {flashloader,imgtool_flashloader,gen_imgtool_floader}, --target {flashloader,imgtool_flashloader,gen_imgtool_floader}
custom target
-gdb, --gdb gdb
-debug, --debug debug
-D DEFINED [DEFINED ...], --Defined DEFINED [DEFINED ...]
user defined variables
--new NEW [NEW ...] build.py --new-prj <target_dir> [-a <APP>]
纯净编译
纯净编译意味着此次编译环境没有之前残留产物的影响,所有之前编译的产物及配置项都会在此次编译之前被移除。 -p
选项和 --pristine
选项等价。
build.py -p
备注
纯净编译同时会移除
menuconfig
文件夹,之前的配置内容也将被丢弃,本次编译将会使用 初始配置。如果仅需清理编译产物但保留之前的配置选项,请使用
build.py -c
命令进行清理。
增量编译
如果不带任何参数,项目将会进行增量编译,增量编译和全量编译相比会大大节省时间。
build.py
编译指定示例
${SDK}/component/example
目录下提供了丰富的应用示例。如果您想要编译其中一个示例,可以通过 -a
或 --app
将应用名称或应用路径传递给 build.py
。
build.py -a <APP>
例如,需要编译 ${SDK}/component/example/network_protocol/http_client
示例,可以输入以下命令:
build.py -a ${SDK}/component/example/network_protocol/http_client
//or
build.py -a http_client
如果不通过 -a
传入应用名称或路径,将编译默认应用(仅使能无线连接)。
备注
example 目录下提供了名为
prj.conf
的文件,当用户未配置过项目时,build.py -a <APP>
将会组合amebaxxx_gcc_project/default.conf
与example/.../<APP>/prj.conf
以使用 初始配置。如果当前 SoC 目录下已有
menuconfig
文件夹,可先通过menuconfig.py -f /.../prj.conf
配置或手动重新配置,然后使用build.py -a <APP>
编译,也可以直接使用build.py -a <APP> -p
删除之前的配置项。
编译指定目标
默认情况下,所有必要的目标将被一起编译。
可通过
-g
或--target
选项单独编译特定的目标可通过
-h
选项查看所有可用目标
build.py -g <TARGET>
例如,要重新生成 imgtool flashloader,需输入以下命令:
build.py -g gen_imgtool_floader
项目清理
-c
和 --clean
都可以清理当前项目的产物及中间文件,但 .config
配置文件会被保留。
build.py -c
传递 CMake 的 Cache 变量
CMake 可以通过 -D
选项设置 Cache 变量的初始值。为了继承这一功能, build.py
也同样支持 -D
选项。CMake 预定义的值和用户自定义的值都可以放在 -D
后面。
build.py -D CACHE_VAL1=VALUE1 CACHE_VAL2=VALUE2 …
更多关于本项目 Cache 变量的描述,请参考 ${SDK}/amebaxxx_gcc_project
目录下的 CMakeLists.txt
文件。
备注
CMake 原生的 -D
与 build.py
的 -D
的不同之处如下:
CMake 要求每个变量定义前都要有
-D
前缀,例如:-DCACHE_VAL1=VALUE1 -DCACHE_VAL2=VALUE2
。build.py
要求所有变量跟随在一个单独的-D
后面,并在-D
和变量之间留有空格。例如:-D CACHE_VAL1=VALUE1 CACHE_VAL2=VALUE2
。
固件文件(Image)
编译完成后,固件将被拷贝到
\amebadplus_gcc_project
路径下,用户也可以在如下文件夹看到固件:\amebadplus_gcc_project\project_km0\asdk\image
\amebadplus_gcc_project\project_km4\asdk\image
CMake 生成的中间文件将会被存放在
build
文件夹。如果生成失败, 尝试运行
build.py -c
后重新编译。

KM4 & KM0 工程编译日志

KM4 & KM0 固件生成
备注
如果想要获取 .map
文件进行调试, 请在如下路径中查找:
\amebadplus_gcc_project\project_km0\asdk\image
\amebadplus_gcc_project\project_km4\asdk\image
编译完成后,固件将被拷贝到
\amebalite_gcc_project
路径下,用户也可以在如下文件夹看到固件:\amebalite_gcc_project\project_km0\asdk\image
\amebalite_gcc_project\project_km4\asdk\image
CMake 生成的中间文件将会被存放在
build
文件夹。如果生成失败, 尝试运行
build.py -c
后重新编译。

KM4 & KR4 工程编译日志

KM4 & KR4 固件生成
备注
如果想要获取 .map
文件进行调试, 请在如下路径中查找:
amebalite_gcc_project\project_kr4\vsdk\image
amebalite_gcc_project\project_km4\asdk\image
编译完成后,固件将被拷贝到
\amebalite_gcc_project
路径下,用户也可以在如下文件夹看到固件:\amebalite_gcc_project\project_km0\asdk\image
\amebalite_gcc_project\project_km4\asdk\image
CMake 生成的中间文件将会被存放在
build
文件夹。如果生成失败, 尝试运行
build.py -c
后重新编译。

KM4 & KR4 工程编译日志

KM4 & KR4 固件生成
备注
如果想要获取 .map
文件进行调试, 请在如下路径中查找:
amebalite_gcc_project\project_kr4\vsdk\image
amebalite_gcc_project\project_km4\asdk\image
编译完成后,固件将被拷贝到
\amebalite_gcc_project
路径下,用户也可以在如下文件夹看到固件:\amebalite_gcc_project\project_km0\asdk\image
\amebalite_gcc_project\project_km4\asdk\image
CMake 生成的中间文件将会被存放在
build
文件夹。如果生成失败, 尝试运行
build.py -c
后重新编译。

KM4 & KR4 工程编译日志

KM4 & KR4 固件生成
备注
如果想要获取 .map
文件进行调试, 请在如下路径中查找:
amebalite_gcc_project\project_kr4\vsdk\image
amebalite_gcc_project\project_km4\asdk\image
编译完成后,固件将被拷贝到
\amebasmart_gcc_project
路径下,用户也可以在如下文件夹看到固件:\amebasmart_gcc_project\project_hp\asdk\image
\amebasmart_gcc_project\project_lp\asdk\image
\amebasmart_gcc_project\project_ap\asdk\image
CMake 生成的中间文件将会被存放在
build
文件夹。如果生成失败, 尝试运行
build.py -c
后重新编译。

KM4 & KM0 & CA32 编译日志

KM4 & KM0 & CA32 固件生成
备注
如果想要获取 .map
文件进行调试, 请在如下路径中查找:
\amebasmart_gcc_project\project_hp\asdk\image
\amebasmart_gcc_project\project_lp\asdk\image
\amebasmart_gcc_project\project_ap\asdk\image
编译完成后,固件将被拷贝到
\amebagreen2_gcc_project
路径下,用户也可以在如下文件夹看到固件:\amebagreen2_gcc_project\project_km4tz\asdk\image
\amebagreen2_gcc_project\project_km4ns\asdk\image
CMake 生成的中间文件将会被存放在
build
文件夹。如果生成失败, 尝试运行
build.py -c
后重新编译。TBD:添加编译 log 截图
KM4_TZ & KM4_NS 工程编译日志

KM4_TZ & KM4_NS 固件生成
备注
如果想要获取
.map
文件进行调试, 请在如下路径中查找:
\amebagreen2_gcc_project\project_km4tz\asdk\image
\amebagreen2_gcc_project\project_km4ns\asdk\image
创建外部工程
前文介绍了如何在 amebaxxx_gcc_project
目录下进行配置与编译,这种模式下用户将在 Realtek 提供的 SDK 中开发自己的项目。但在一些场景下,用户希望创建独立于 Realtek SDK 的工程目录,方便独立维护或更新,或方便多团队开发。下文介绍基于外部工程的开发模式。
1. 创建命令
进入到 SoC 对应的 GCC project 路径下,运行:
cd {SDK}/amebaxxx_gcc_project build.py --new <project_dir> [-a <APP_NAME>]将以 example 中的
APP_NAME
为模板,在project_dir
路径下建立新的工程。例如:build.py --new ~/my_project -a http_client工程路径下包含:
ameba.bat
ameba.sh
:用户可以通过这些脚本设置环境变量。
menuconfig.py
build.py
:用于配置及编译工程
CMakeLists.txt
:编译此新建工程的入口文件
Kconfig
:在此可添加用户自己的配置项
<APP_NAME>
文件夹:指定模板的文件将被拷贝至相应文件夹
prj.conf
:用于记录该工程的默认配置
2. 在创建的工程目录下设置环境
工程目录下的
ameba.bat
和ameba.sh
建立了对 Realtek SDK 根目录下同名脚本的引用,用户可通过任意位置的脚本设置环境。
3. 在创建的工程目录下配置
使用方法同 配置 SDK 中的命令。配置生成的
menuconfig
文件夹将会生成在此工程目录下。
4. 在创建的工程目录下编译
使用方法同 编译 SDK 中的命令。编译生成的
build
文件夹将会生成在此工程目录下。
固件下载
我们提供了 ImageTool 专门用于固件的下载,请参考 Image Tool。