yocto是一个很强大的嵌入式image 构建工具,借助yocto可以轻松的构建出一个开发板镜像。如果我们想借助yocto开发一些应用层的程序,有以下两种方法可供选择:
(1)按照yocto的构建规则添加自己的程序和编译脚步,通常稍微繁琐一些。
(2)使用yocto提供的SDK来交叉编译自己的程序。
yocto提供的SDK是一个独立的开发环境,不再依赖yocto,SDK包含的内容:
(1)Cross-Development Toolchain:工具链包含编译器、调试器等各种工具。
(2)Libraries, Headers, and Symbols::与目标image 匹配的Libraries, Headers, and Symbols。
(3)Environment Setup Script::一旦运行 *.sh 文件,就会通过定义变量来建立交叉开发环境,完成SDK使用的准备工作。
yocto 提供了extensible 和 standard 两种SDK,二者的区别如下:
extensible SDK功能更为强大,可以基于extensible SDK直接构建系统image,对应的size也更大。单纯应用层的程序开发,选择standard SDK即可,交叉编译好后copy 应用程序到开放板运行即可,所以本文主要记录standard SDK的构建和使用方法。
yocto的下载方法不再赘述,配置和编译SDK命令如下:
DISTRO=fsl-imx-x11 MACHINE=imx6dl-riotboard source fsl-setup-release.sh -b build-x11
bitbake -c populate_sdk fsl-image-multimedia
编译好的SDK 位于/tmp/deploy/sdk目录,该目录下会生成以下文件:
zhy@zhy-ThinkPad-E480:~/code/rIoTboard/yocoto/imx-4.14/build-x11/tmp/deploy/sdk$ ls -l
total 475016
-rw-r--r-- 2 zhy zhy 6302 11月 27 22:20 fsl-imx-x11-glibc-x86_64-fsl-image-multimedia-cortexa9hf-neon-toolchain-4.14-sumo.host.manifest
-rwxr-xr-x 2 zhy zhy 464634174 11月 27 22:27 fsl-imx-x11-glibc-x86_64-fsl-image-multimedia-cortexa9hf-neon-toolchain-4.14-sumo.sh
-rw-r--r-- 2 zhy zhy 63419 11月 27 22:19 fsl-imx-x11-glibc-x86_64-fsl-image-multimedia-cortexa9hf-neon-toolchain-4.14-sumo.target.manifest
-rw-r--r-- 2 zhy zhy 153760 11月 27 22:19 fsl-imx-x11-glibc-x86_64-fsl-image-multimedia-cortexa9hf-neon-toolchain-4.14-sumo.testdata.json
-rw-r--r-- 2 zhy zhy 4507 11月 27 20:29 x86_64-buildtools-nativesdk-standalone-4.14-sumo.host.manifest
-rwxr-xr-x 2 zhy zhy 21386212 11月 27 20:30 x86_64-buildtools-nativesdk-standalone-4.14-sumo.sh
-rw-r--r-- 2 zhy zhy 0 11月 27 20:28 x86_64-buildtools-nativesdk-standalone-4.14-sumo.target.manifest
-rw-r--r-- 2 zhy zhy 121607 11月 27 20:28 x86_64-buildtools-nativesdk-standalone-4.14-sumo.testdata.json
执行fsl-imx-x11-glibc-x86_64-fsl-image-multimedia-cortexa9hf-neon-toolchain-4.14-sumo.sh脚本就可以将SDK安装到PC:
./fsl-imx-x11-glibc-x86_64-fsl-image-multimedia-cortexa9hf-neon-toolchain-4.14-sumo.sh
默认会将SDK安装在/opt/目录:
zhy@zhy-ThinkPad-E480:~/code/rIoTboard/yocoto/imx-4.14/build-x11/tmp/deploy/sdk$ ./fsl-imx-x11-glibc-x86_64-fsl-image-multimedia-cortexa9hf-neon-toolchain-4.14-sumo.sh
NXP i.MX Release Distro SDK installer version 4.14-sumo
=======================================================
Enter target directory for SDK (default: /opt/fsl-imx-x11/4.14-sumo):
You are about to install the SDK to "/opt/fsl-imx-x11/4.14-sumo". Proceed[Y/n]? y
[sudo] password for zhy:
Extracting SDK..............................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . /opt/fsl-imx-x11/4.14-sumo/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
2 SDK 使用根据上面的安装log,使用的时候执行以下命令即可:
. /opt/fsl-imx-x11/4.14-sumo/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
接下来使用SDK编译一个简单的程序,首先创建test.cpp,里面添加内容:
#includeint main()
{std::cout<< "Hello World"<< std::endl;
return 0;
}
编译的时候直接可以使用CXX这个环境变量:
$CXX test.cpp
编译后会产出a.out程序,可以看出编译出的程序是ARM架构的:
file a.out
a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=c939a8eb3d8b83d9b61aa95bd9a70b976d32feec, with debug_info, not stripped
将a.out 复制到RIoTBoard开发板上运行:
1 https://www.rpsys.net/yocto-docs/sdk-manual/sdk-intro.html
2 https://zhuanlan.zhihu.com/p/570051717
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧