使用yocto仅构建gcc

时间:2016-05-31 18:16:05

标签: yocto gcc4.8

我试图使用yocto只构建gcc。我尝试了“bitbake-layers show-recipes”它显示了gcc的多个配方,类似于bitbake -s。

#bitbake-layers show-recipes 
gcc:
  meta                 4.8.2
gcc-cross:
  meta                 4.8.2
gcc-cross-canadian-arm:
  meta                 4.8.2
gcc-cross-initial:
  meta                 4.8.2
gcc-crosssdk:
  meta                 4.8.2
gcc-crosssdk-initial:
  meta                 4.8.2
gcc-runtime:
  meta                 4.8.2
gccmakedep:
  meta                 1:1.0.2

#bitbake -s 
gcc                                                 :4.8.2-r0                          
gcc-cross                                           :4.8.2-r0                          
gcc-cross-canadian-arm                              :4.8.2-r0                          
gcc-cross-initial                                   :4.8.2-r0                          
gcc-crosssdk                                        :4.8.2-r0                          
gcc-crosssdk-initial                                :4.8.2-r0                          
gcc-runtime                                         :4.8.2-r0                          
gccmakedep                                         1:1.0.2-r3

请指导我理解为什么有多个与gcc相关的食谱以及我必须构建的食谱。

在yocto中,食谱和包装是否有一对一的匹配。即,为了创建每个包,只有一个相应的配方?

2 个答案:

答案 0 :(得分:4)

依次解释每一个:

  • gcc是在目标机器上运行的gcc的配方。
  • gcc-cross是构建系统使用的交叉编译器。如果您为需要使用gcc编译的目标构建任何配方,那么这将用于编译它。
  • gcc-cross-canadian-是SDK的最终可重定位交叉编译器,在本例中是ARM体系结构。
  • gcc-crosssdk是生产gcc-cross-canadian的中间步骤。
  • * -initial是为标准交叉编译器和SDK单独引导工具链所需的编译器的初始版本。
  • gcc-runtime构建作为gcc一部分的运行时组件(例如libstdc ++)。
  • gccmakedep实际上不是gcc本身的一部分,它是一个脚本,作为X11实用程序的一部分,某些项目需要确定每个源文件的依赖关系。

当你说“你只需要构建gcc”时,你的意思并不完全清楚,但我怀疑它是目标的gcc(在这种情况下它是“gcc”,但我怀疑你可能需要更多比起packagegroup-core-buildessential可能是你想要的)或者你想要一个可以单独安装的交叉编译器,在这种情况下你可能应该bitbake meta-toolchainbitbake -c populate_sdk imagename。这包含的不仅仅是gcc,但无论如何,gcc可能还不够。

答案 1 :(得分:0)

海湾合作委员会是一个庞大的项目。也许这recipe可以帮助你更好地理解GCC和Yocto。以下信息是使用Yocto Project Cookbook"嵌入式Linux项目的一些信息。作者:Alex Gonzalez

  

GNU工具链包含以下组件:

     

汇编程序(GNU as):binutils包的一部分

     

链接器(GNU Id):   binutils包的一部分

     

编译器(GNU gcc):支持C,C ++,   Java,Ada,Fortran和Objective C

     

调试器(GNU gdb):GNU调试器

     

二进制文件工具(objdump,nm,objcopy,readelf,strip等):   这些是binutils包的一部分

     

这些组件足以构建裸机应用程序   引导程序如u-boot,Linux Kernel因为它们不需要C   库,他们实现了他们需要的C库函数。   LInux用户空间应用程序需要符合POSIX标准的C库。

     

glibc是Yocto项目中使用的默认C库。

     

在嵌入式系统上,我们需要一个交叉编译工具链。我们建立   在主机上,但在目标上运行结果二进制文件   通常不同的架构。有几种类型的工具链   基于构建机器,目标机器。

     

最常见的组合是:

     

Native:这是一个运行工具链的x86机器,它也是在x86机器上构建的   生成二进制文件以在x86机器上运行。这在桌面上很常见   电脑。

     

交叉编译:这是嵌入式中最常见的   系统;例如,运行工具链的x86机器也有   是在x86机器上构建的,但是生成二进制文件来运行   不同的架构,就像ARM一样。

     

跨本机:这通常是   工具链在目标上运行。一个例子是工具链   已经在x86机器上构建,但在ARM上运行并生成

     

加拿大人:很少见,这是构建,主机和目标的地方   机器都不同。