构建并安装 i.MX8 交叉编译工具链
使用 Yocto 可以构建一套特定硬件平台的 SDK,里面包含编译器、链接器、调试器和源码头文件等,通常也称它们为编译工具链(toolchain)。所谓的交叉编译,就是在某架构平台上(例如 x86_64)进行编译,但编译出来的二进制文件却是用在另一个架构平台的(例如 i.MX8)。
构建工具链
通用 SDK
当我们执行 source setup-environment <build>
配置构建环境时,会看到如下提示:
You can now run 'bitbake <target>'
Common targets are:
core-image-minimal
meta-toolchain
meta-toolchain-sdk
adt-installer
meta-ide-support
这里的 meta-toolchain 目标,就是通用 SDK,输入下面命令,即可构建出这套工具链。
bitbake meta-toolchain
Qt SDK
meta-toolchain-qt 是在 meta-toolchain 基础上增加了 Qt 图形库的支持,通过下面命令可以构建出带 Qt 的工具链。
bitbake meta-toolchain-qt
对于 Qt5 则使用如下命令:
bitbake meta-toolchain-qt5
特定 SDK
通用 SDK 能够用于编译 U-Boot 和 Linux 内核等不依赖目标文件系统的二进制文件,如果想要编译的程序依赖文件系统(例如软件库),那就需要构建特定 SDK,以产生符合目标平台的根文件系统 sysroot 目录。
通过执行 populate_sdk 任务可以构建出这套工具链:
bitbake <target> -c populate_sdk
target 可以是该平台对应的任意镜像目标,例如 imx-image-full。
bitbake imx-image-full -c populate_sdk
由于 imx-image-full 镜像包含 Qt5,因此所构建出来的工具链已经包含 Qt5 图形库相关依赖文件。
安装工具链
构建好工具链之后,可以在当前 build 目录下的 tmp/deploy/sdk/ 目录找到它们。以 imx-image-full 目标为例,安装命令如下:
cd tmp/deploy/sdk/
./fsl-imx-xwayland-glibc-x86_64-imx-image-full-aarch64-imx8mqevk-toolchain-5.4-zeus.sh
上述命令默认安装路径为 /opt/fsl-imx-xwayland/5.4-zeus/。安装完成后,在该目录下可看到如下内容:
environment-setup-aarch64-poky-linux
site-config-aarch64-poky-linux
sysroots
version-aarch64-poky-linux
在正式使用该编译工具链之前,只需要通过下面命令设置环境变量即可。
source /opt/fsl-imx-xwayland/5.4-zeus/environment-setup-aarch64-poky-linux
现在,你可以在终端命令行中找到许多以 aarch64-poky-linux-
为前缀的工具,例如 aarch64-poky-linux-gcc
、aarch64-poky-linux-g++
、aarch64-poky-linux-gdb
等等。
测试
为了测试工具链是否正常工作,我们通过编写一个简单的程序来验证。hello.c 内容如下:
#include <stdio.h>
int main(void)
{
printf("Hello, GetIoT.tech\n");
return 0;
}
执行编译
${CC} hello.c -o hello
将编译好的 hello 二进制可执行文件传输到 i.MX8 板上,运行结果如下。
root@imx8mqevk:~# ./hello
Hello, GetIoT.tech