构建 交叉工具链
本主题介绍此 SDK 版本中存在的交叉工具链,以及如何构建交叉工具链。
交叉工具链是指在主机(x86 或 x86_64)上执行,但为 ARM 架构生成代码的编译器、链接器和目标 C 库。C 库用于链接编译后的代码以创建目标应用程序。
SDK 中提供的工具链(<
top>/toolchains 目录)在下表中描述。
目录 | 组件 | 工具链的使用场景 |
aarch64-linux-android-4.8 | GCC - 4.8 Binutils - 2.24 库 - 无 来源 - Android 代码 | 构建 64 位可信操作系统 |
arm-eabi-4.8 | GCC -4.8 Binutils - 2.23.2 库 - 无 来源 - Android 代码 | 为可信操作系统构建 32 位模块 |
tegra-4.8.5-nv-softp-adsp | GCC - 4.8.5 Binutils - 2.23.2 库 - eglibc-2.18 来源 - Yocto 1.8 | 用于 ADSP 固件和 ADSP 插件编译 |
tegra-4.9-nv | GCC - 4.9.4 Binutils - 2.24 库 - glibc-2.21 来源 - Yocto 1.8 | 将 guest PCT 绑定到 hypervisor,构建 64 位 Quickboot,以及构建用户空间组件 |
arm-none-eabi-4_8-2014q3-20140805 | GCC - 4.8.4 20140725 Binutils - 2.23.2.20140731 库 - Newlib 2.1.0,带有主线反向移植 来源 - Linaro | 为 SPE 和 SCE 构建 32 位 ARM 代码。这也用于设置 CROSS32CC 以构建刷写内核。 有关重建 GCC 工具链的说明,请参阅 SDK 中提供的 How-to-build-toolchain.pdf,路径为 <top>/drive-t186ref-foundation_src/linaro/ 或以下网站 https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q3-update |
先决条件
1. 设置运行 Ubuntu 14.04 或更高版本的 Linux 主机系统。
2. 使用以下命令安装所需的软件包
sudo apt-get install gawk wget git-core diffstat
unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm make xsltproc docbook-utils fop dblatex xmlto realpath
3. 安装 Linux 运行文件
<
top>/drive-t186ref-linux-5.0.10.3-<
build>-oss-src.run
<top>/drive-t186ref-linux-5.0.10.3-<build>-oss-minimal-pdk.run
<top>/drive-t186ref-linux-5.0.10.3-<build>-nv-minimal-pdk.run
构建 NVIDIA tegra-4.9-nv 工具链
1. 使用以下命令更改到主机系统上的构建目录
cd <top>/drive-t186ref-linux_src/yocto
其中 <top> 是 release 安装在主机上的目录。
2. 使用以下命令解压 nvidia-layer.tgz 的内容
tar xzf nvidia-layer.tgz
3. 导出 TEMPLATECONF 以使用 meta-vib4 layer 中的模板,使用以下命令
export TEMPLATECONF=$PWD/layers/meta-vib4/conf
4. 使用以下命令初始化 Yocto Project 构建环境
source oss/genivi-7/poky/oe-init-build-env
5. Bitbake 工具链
bitbake meta-toolchain
6. 使用以下命令生成工具链
./layers/scripts-vib4/create_toolchain.sh $PWD
7. 执行 yocto 构建步骤后,构建的工具链位于
<top>/drive-t186ref-linux_src/yocto/build/install
更新 NVIDIA tegra-4.9-nv 工具链
1. 更改到工具链目录
cd <top>/toolchains
2. 备份现有工具链
mv tegra-4.9-nv tegra-4.9-nv-original
3. 将构建的工具链复制到其位置
mkdir tegra-4.9-nv
mv <top>/drive-t186ref-linux_src/yocto/build/install/* tegra-4.9-nv
构建 ADSP 工具链
1. 更改到主机系统上的构建目录
cd <top>/drive-t186ref-linux_src/yocto
2. 解压 nvidia-layer.tgz 的内容
tar xzf nvidia-layer.tgz
3. 导出 MACHINE、KERN_DIR 并启动构建
cd layers/scripts-vib3
export MACHINE=”<system_name>”
export KERN_DIR=$(realpath ../../../kernel)
rm -f ../meta-tegra/recipes-kernel/linux/kernel-tegra-early-boot.bb
rm -f ../meta-tegra/recipes-core/systemd/systemd_%.bbappend
./build_yocto.sh -c toolchain -t all
其中 <system_name> 代表机器名称。
4. 工具链已构建并部署在当前目录中名为 install 的目录中。
注意 | 建议在单独的 shell 中构建工具链。 删除 <top>/drive-t186ref-linux_src/yocto/ 中任何现有的 build 目录,以避免配置混淆。 |
提示 | 如果 bitbake 期间发生 python locale 错误,请使用以下命令作为解决方法 export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8 |