在创建image时,生成Yocto SDK:(To build the toolchain installer and populate the SDK image)
$bitbake <image name> -c populate_sdk
这里的image就是Linux的rootfs的bb文件的名字,每个bb文件代表一个要构建的target。
比如:
$bitbake fsl-image-gui -c populate_sdk
那在Yocto项目里,你会找到fsl-image-gui.bb文件。
该命令的结果是生成一个工具链安装程序,里面包含了一个sysroot文件系统,它和你的目标板上的根文件系统是对应的。
这个工具链是完全独立的,对目标系统的无依赖性。它里面的二进制文件链接的是它自己的libc副本。
要实现这种独立性,使用指定的库,就要设置一个自己的dynamic loader,所以在toolchain的sh文件安装时将dynamic loader这个文件(比如ld-linux.so)的指定位置或叫做指针,进行配置,使这里面所有的程序都使用这个动态库加载器。
这也是在sdk外面做了一层包装,需要进行一次安装的原因。
还要注意一点,这个生成的交叉工具链只有一套,而不管是哪种架构。这是因为gcc工具链有编译选项来处理硬件信息。这些选项信息,包含在环境变量脚本里。这样就减少了工具所占用的空间。但对不同的目标板或硬件架构,还是需要有各自的sysroot,因为这部分是特定于目标板本身的,比如其中那些二进制文件。
在执行bitbake命令前,要先source一下build environment setup script, 比如oe-init-build-env。还要保证conf/local.conf里面的变量设置正确。
特别的,你使用的MACHINE变量要和你要编译的硬件架构是匹配的,或者你要编一个不同硬件架构的工具链,那就要设置正确的SDKMACHINE变量。

本文介绍了如何使用Bitbake构建Yocto SDK,生成包含sysroot的工具链安装程序,该工具链独立且针对目标板的硬件架构。通过设置dynamicloader确保程序使用指定的库。在执行bitbake命令前需配置环境,如source build environment setup script和正确设置MACHINE变量。完成构建后,执行部署目录下的SDK安装脚本,选择安装路径并source环境设置脚本,即可开始使用SDK进行ARM程序编译。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



