转载:https://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html
原作者:Crifan Li
crosstool-ng中,交叉编译器的(前缀)的名字的命名规则是:
arch-vendor-kernel-system
对应分别是:
1>
arch,即系统架构
表示交叉编译器,是用于哪个目标系统架构中,用于那个平台中的
即,用此交叉编译器编译出来的程序,是运行在哪种CPU上面的
arch的值,常见的有很多种,比如arm,x86,mips等等。
2>
vendor,即生成厂家,提供商
表示谁提供的,即谁制作出来这个交叉编译器的。
vendor的值,貌似是可以自己随便填写的。
其他常见写法,还有写成编译交叉编译器的作者的自己的名字的
比如,我叫crifan,那么就可以写成crifan,然后生成的交叉编译器,就是xxx-crifan-xxx-xxx了。
更加通用的做法,好像是:
把vendor写成,体系架构的值,比如我之前针对xscale的去配置crosstool-ng的时候,就写了个xscale。
或者写成CPU的厂家的名字,或者是开发板的名字等等。
3>
kernel,直译为,内核
其实指的是,你用此交叉编译器,编译出来的程序,所运行的目标系统
即,此交叉编译器,编译出来的程序,在什么系统中,什么环境中,运行。
而对应的环境或系统,主要有两种:
- Linux
表示:有OS(此处主要指的是Linux)操作系统的环境
比如,我用交叉编译器,编译一个helloworld程序,然后下载到嵌入式开发中的嵌入式Linux中运行,
就属于,用此交叉编译器,编译出来的程序,是要运行于,带OS,即嵌入式Linux系统,环境中的
此处,简称为,有OS的目标系统:Linux
- bare-metal
bare-metal,直译为:裸金属
表示:无(此处主要指的是Linux)操作系统的环境,
比如,用此交叉编译器,去编译一个Uboot,或者是其他一个小程序,是运行在,无嵌入式Linux的时候,单独运行的一个程序。
比如,你购买的嵌入式系统开发版,常常附带一些小程序,比如点亮LED,跑马灯等程序,就是这种,运行在无OS的环境的
此处,简称为:无OS系统的:bare-metal
4>
ystem,直译为,系统
其实主要表示的,交叉编译器所选择的库函数和目标系统
最常见的一些值有,gnu,gnueabi,uclibcgnueabi等等。
- gnu
等价于:glibc+oabi
- gnueabi
等价于:glibc+eabi
- uclibc
等价于:uclibc+oabi(待确认)