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

关于,运行在有OS的Linux下,和,无OS的bare-metal,到底有何区别

目前,还没有完全搞懂。

但是,之前遇到一个实际的例子:

之前用比较新的一个交叉编译器去编译比较老的uboot时,会出现一个错误:

【已解决】uboot交叉编译出错:gcc/config/arm/lib1funcs.asm:1266: undefined reference to `raise’

其就是和这个kernel有关:

编译的uboot,目标运行平台,不是Linux,而是裸的开发板,即Linux还没有运行呢,Uboot去运行,去初始化开发板的时候

详细的情况,见该贴中的解释。

例 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.3.1. crosstool-ng中kernel的值

crosstool-ng中,和kernel对应的值,应该就是"Operating System"中的"Target OS"的值了。

比如我之前配置为Linux的话,就是:


Operating System
  Target OS (linux)  --->

                

对应的配置参数是:GEN_CHOICE_KERNEL中的CT_KERNEL_linux

对应的help的解释是:


  ┌────────────────────────────────────────── linux ──────────────────────────────────────────┐
  │ CT_KERNEL_linux:                                                                          │
  │                                                                                           │
  │ Build a toolchain targeting systems running Linux as a kernel.                            │
  │                                                                                           │
  │ Symbol: KERNEL_linux [=y]                                                                 │
  │ Type  : boolean                                                                           │
  │ Prompt: linux                                                                             │
  │   Defined at config.gen/kernel.in:8                                                       │
  │   Depends on: GEN_CHOICE_KERNEL [=y] && KERNEL_linux_AVAILABLE [=y]                       │
  │   Location:                                                                               │
  │     -> Operating System                                                                   │
  │       -> Target OS (GEN_CHOICE_KERNEL [=y])                                               │
  │   Selects: KERNEL_SUPPORTS_SHARED_LIBS [=y]                                               │