1. 程式人生 > >編譯Linux kernel時設定交叉編譯器

編譯Linux kernel時設定交叉編譯器

在預設情況下,核心構建系統預設核心是本地編譯,即編譯的核心是執行在與宿主系統相同的體系架構上。如果是為其他的架構編譯核心,即交叉編譯,我們需要設定兩個變數:ARCH和CROSS_COMPILE。其中:

ARCH指明目標體系架構,即編譯好的核心執行在什麼平臺上,如x86、arm或mips等。

CROSS_COMPILE指定使用的交叉編譯器的字首。對於我們的交叉工具鏈來說,其字首是i686-none-linux-gnu-。

在頂層的Makefile中,我們可以看到工具鏈中的編譯器、連結器等均以$(CROSS_COMPILE)作為字首:
linux-3.7.4/Makefile:
AS      = $(CROSS_COMPILE)as
LD      = $(CROSS_COMPILE)ld
CC      = $(CROSS_COMPILE)gcc
CPP     = $(CC) -E
AR      = $(CROSS_COMPILE)ar
NM      = $(CROSS_COMPILE)nm
STRIP       = $(CROSS_COMPILE)strip
OBJCOPY     = $(CROSS_COMPILE)objcopy
OBJDUMP     = $(CROSS_COMPILE)objdump

可以使用多種方式定義這兩個變數,比如通過在環境變數中定義ARCH、CROSS_COMPILE;或者每次執行make時,通過命名行為這兩個變數的賦值,如:
make ARCH=i386 CROSS_COMPILE=i686-none-linux-gnu-

也可以直接更改頂層Makefile。這種方法比較方便,但是要小心,以免破壞Makefile檔案。本書中我們採用這種方式,將頂層Makefile中的如下指令碼:
linux-3.7.4/Makefile:
ARCH        ?= $(SUBARCH)
CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)

更改為:
linux-3.7.4/Makefile:
ARCH        ?= i386
CROSS_COMPILE   ?= i686-none-linux-gnu-