Yocto理论篇 | Yocto交叉开发工具链生成

当涉及到创建交叉开发工具链时,Yocto Project 将完成大部分工作。在Yocto项目开发环境中,交叉开发工具链用于构建在目标硬件上运行的镜像和应用程序。只需几个命令,OpenEmbedded构建系统就可以创建这些必要的工具链。

下图显示了关于工具链构造和使用的高级构建环境。

大部分工作发生在Build Host上。这是用于构建镜像的机器,通常在Yocto Project 环境中工作。运行BitBake 创建镜像时,OpenEmbedded构建系统使用主机gcc 编译器引导名为gcc-cross的交叉编译器。gcc-cross编译器是BitBake在创建目标镜像时用来编译源文件的。可以将gcc-cross简单地看作是一个自动生成的交叉编译器,只在BitBake内部使用。

注意:Extensible SDK不使用gcc-cross-canadian,因为此SDK提供了OpenEmbedded构建系统的副本,其中的sysroot包含gcc-cross

启动gcc-cross时发生的事件链如下:

gcc -> binutils-cross -> gcc-cross-initial -> linux-libc-headers -> glibc-initial -> glibc -> gcc-cross -> gcc-runtime
  • gcc:构建主机的GNU Compiler Collection(GCC)。
  • binutils-cross:运行引导操作的gcc-cross-initial所需的最小二进制工具。
  • gcc-cross-initial:创建交叉编译器的引导过程的早期阶段。这个阶段构建了足够的gcc-cross、C库和其他部分,以便在以后的阶段中完成最终的交叉编译器的构建。此工具是一个“native”包(即它被设计为在构建主机上运行)。
  • linux-libc-headers:交叉编译器需要的头文件。
  • glibc-initial:引导glibc所需的Embedded GNU C Library(GLIBC)的初始版本。
  • glibc:  GNU C Library。
  • gcc-cross:交叉编译器引导过程的最后一个阶段。此阶段将生成BitBake在为目标设备构建镜像时使用的实际交叉编译器。
  • gcc: The build host's GNU Compiler Collection (GCC).

注意:如果要用自定义版本替换此交叉编译器工具链,则必须替换gcc-cross。此工具也是一个“native”包(即它被设计为在构建主机上运行)。

  • gcc-runtime:工具链引导过程产生的运行库。此工具生成一个二进制文件,其中包含目标设备所需的运行库。

可以使用OpenEmbedded构建系统来为用于开发应用程序的可重定位SDK构建安装程序。当您运行安装程序时,它会安装包含开发工具(例如gcc-cross-canadia、binutils-cross-canadian和其他nativesdk-*工具)的工具链,这些工具是SDK的原生工具(即SDK_ARCH的原生工具),需要交叉编译和测试软件。此图显示了用于轻松构建此工具链的命令。这个交叉开发工具链是为了在SDKMACHINE上执行而构建的,可能与构建主机可能是同一台机器,也可能不是同一台机器。

注意:如果您的目标体系结构受Yocto Project的支持,那么可以利用Yocto Project附带的、已经包含交叉开发工具链安装程序的预构建镜像。

以下是可重定位工具链的引导过程:

gcc -> binutils-crosssdk -> gcc-crosssdk-initial -> linux-libc-headers ->
     glibc-initial -> nativesdk-glibc -> gcc-crosssdk -> gcc-cross-canadian
  • gcc:构建主机的GNU Compiler Collection(GCC)。
  • binutils-crosssdk:运行引导操作的gcc-crosssdk-initial所需的最小二进制工具。
  • gcc-crosssdk-initial:创建交叉编译器的引导过程的早期阶段。这个阶段构建了足够的gcc-crosssdk和支持部分,这样引导过程的最后一个阶段就可以生成完成的交叉编译器。此工具是在生成主机上运行的“native”二进制文件。
  • linux-libc-headers:交叉编译器需要的头文件。
  • glibc-initial:引导nativesdk-glibc所需的Embedded GLIBC的初始版本。
  • nativesdk-glibc:Embedded GLIBC需要引导gcc-crosssdk
  • gcc-crosssdk:可重定位交叉编译器引导过程的最后一个阶段。gcc-crosssdk是一个临时编译器,从不离开构建主机。它的目的是在引导过程中帮助创建最终的gcc-cross-canadian编译器,它是可重定位的。此工具也是一个“native”包(即它被设计为在构建主机上运行)。
  • gcc-cross-canadian:最终的可重定位交叉编译器。在SDKMACHINE上运行时,此工具生成在目标设备上运行的可执行代码。每个体系结构只生成一个cross-canadian编译器,因为它们可以针对不同的处理器优化,使用通过编译命令传递给编译器的配置。这避免了对多个编译器的需要,从而减少了工具链的大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值