当涉及到创建交叉开发工具链时,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编译器,因为它们可以针对不同的处理器优化,使用通过编译命令传递给编译器的配置。这避免了对多个编译器的需要,从而减少了工具链的大小。