3.1.2. crosstool-ng中交叉编译前缀的命名规则
crosstool-ng中,交叉编译器的(前缀)的名字的命名规则是:
arch-vendor-kernel-system
对应分别是:
arch,即系统架构
表示交叉编译器,是用于哪个目标系统架构中,用于那个平台中的
即,用此交叉编译器编译出来的程序,是运行在哪种CPU上面的
arch的值,常见的有很多种,比如arm,x86,mips等等。
例 3.1. 举例:交叉编译器中的arch的值
arm-cortex_a8-linux-gnueabi中的arm
mips-ar2315-linux-gnu中的mips
powerpc-e500v2-linux-gnuspe中的powerpc
x86_64-unknown-mingw32中的x86_64
3.1.2.2. 交叉编译器名字中的vendor部分
vendor,即生成厂家,提供商
表示谁提供的,即谁制作出来这个交叉编译器的。
vendor的值,貌似是可以自己随便填写的。
其他常见写法,还有写成编译交叉编译器的作者的自己的名字的
比如,我叫crifan,那么就可以写成crifan,然后生成的交叉编译器,就是xxx-crifan-xxx-xxx了。
更加通用的做法,好像是:
把vendor写成,体系架构的值,比如我之前针对xscale的去配置crosstool-ng的时候,就写了个xscale。
或者写成CPU的厂家的名字,或者是开发板的名字等等。
例 3.2. 举例:交叉编译器中的vendor的值
- arm-cortex_a8-linux-gnueabi中的cortex_a8,就属于CPU的名字
- mips-ar2315-linux-gnu中的ar2315
- powerpc-e500v2-linux-gnuspe中的e500v2,也是CPU的内核名
- arm-buildroot-linux-uclibcgnueabi中的buildroot,是之前折腾Buildroot时,看到的,即Buildroot把自己视为当前自己制作出来的交叉编译器的vendor。
3.1.2.3. 交叉编译器名字中的kernel部分
kernel,直译为,内核
其实指的是,你用此交叉编译器,编译出来的程序,所运行的目标系统
即,此交叉编译器,编译出来的程序,在什么系统中,什么环境中,运行。
而对应的环境或系统,主要有两种:
- Linux
表示:有OS(此处主要指的是Linux)操作系统的环境
比如,我用交叉编译器,编译一个helloworld程序,然后下载到嵌入式开发中的嵌入式Linux中运行,
就属于,用此交叉编译器,编译出来的程序,是要运行于,带OS,即嵌入式Linux系统,环境中的
此处,简称为,有OS的目标系统:Linux
- bare-metal
bare-metal,直译为:裸金属
表示:无(此处主要指的是Linux)操作系统的环境,
比如,用此交叉编译器,去编译一个Uboot,或者是其他一个小程序,是运行在,无嵌入式Linux的时候,单独运行的一个程序。
比如,你购买的嵌入式系统开发版,常常附带一些小程序,比如点亮LED,跑马灯等程序,就是这种,运行在无OS的环境的
此处,简称为:无OS系统的:bare-metal
例 3.3. 举例:交叉编译器中的kernel的值
- arm-bare_newlib_cortex_m3_nommu-eabi中的bare_newlib_cortex_m3_nommu,此处的bare,应该就是指的是bare-metal,用于运行在无OS的环境下
- powerpc-e300c3-linux-gnu中的linux
- m68k-unknown-uclinux-uclibc中的uclinux,就是指的是编译出来的程序,是运行于没有MMU的uclinux下
3.1.2.4. 交叉编译器名字中的system部分
system,直译为,系统
其实主要表示的,交叉编译器所选择的库函数和目标系统
最常见的一些值有,gnu,gnueabi,uclibcgnueabi等等。
所以,针对上述,gnu,eabi,uclibc等几个选项,对应的常见的一些组合的含义是:
- gnu
等价于:glibc+oabi
- gnueabi
等价于:glibc+eabi
- uclibc
等价于:uclibc+oabi(待确认)
例 3.4. 举例:交叉编译器中的system的值
- arm-cortex_a8-linux-gnueabi中的gnueabi,即glibc+eabi
- mips-ar2315-linux-gnu中的gnu,即glibc+oabi
- powerpc-e500v2-linux-gnuspe中的gnuspe,没搞懂啥意思。。
- x86_64-unknown-mingw32中的mingw32,用的是Windows下的mingw32的库
|