构建并安装 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-gccaarch64-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

Leave a Reply