<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 建立針對arm-linux的交叉編譯環(huán)境

建立針對arm-linux的交叉編譯環(huán)境

——
作者: 時(shí)間:2007-04-18 來(lái)源: 收藏
交叉編譯環(huán)境介紹 

交叉編譯是嵌入式開(kāi)發(fā)過(guò)程中的一項重要技術(shù),它的主要特征是某機器中執行的程序代碼不是在本機編譯生成,而是由另一臺機器編譯生成,一般把前者稱(chēng)為目標機,后者稱(chēng)為主機。采用交叉編譯的主要原因在于,多數嵌入式目標系統不能提供足夠的資源供編譯過(guò)程使用,因而只好將編譯工程轉移到高性能的主機中進(jìn)行。 

linux下的交叉編譯環(huán)境重要包括以下幾個(gè)部分: 

針對目標系統的gcc 

針對目標系統的二進(jìn)制工具binutils 

目標系統的標準c庫glibc 

目標系統的linux內核頭文件 

交叉編譯環(huán)境的建立步驟 

下載源代碼 

下載包括binutils、gcc、glibc及l(fā)inux內核的源代碼(需要注意的是,glibc和內核源代碼的版本必須與目標機上實(shí)際使用的版本保持一致),并設定shell變量PREFIX指定可執行程序的安裝路徑。 

編譯binutils 

首先運行configure文件,并使用--prefix=$PREFIX參數指定安裝路徑,使用--target=arm-linux參數指定目標機類(lèi)型,然后執行make install。 

配置linux內核頭文件 

首先執行make mrproper進(jìn)行清理工作,然后執行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)進(jìn)行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架構,因為缺省架構為主機的cpu架構),這一步需要根據目標機的實(shí)際情況進(jìn)行詳細的配置,筆者進(jìn)行的實(shí)驗中目標機為HP的ipaq-hp3630 PDA,因而設置system type為SA11X0,SA11X0 Implementations中選擇Compaq iPAQ H3600/H3700。 

配置完成之后,需要將內核頭文件拷貝到安裝目錄: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux 

第一次編譯gcc 

首先運行configure文件,使用--prefix=$PREFIX參數指定安裝路徑,使用--target=arm-linux參數指定目標機類(lèi)型,并使用--disable-threads、--disable-shared、--enable-languages=c參數,然后執行make install。這一步將生成一個(gè)最簡(jiǎn)的gcc。由于編譯整個(gè)gcc是需要目標機的glibc庫的,它現在還不存在,因此需要首先生成一個(gè)最簡(jiǎn)的gcc,它只需要具備編譯目標機glibc庫的能力即可。 

交叉編譯glibc 

這一步驟生成的代碼是針對目標機cpu的,因此它屬于一個(gè)交叉編譯過(guò)程。該過(guò)程要用到linux內核頭文件,默認路徑為$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一個(gè)名為sys-linux的軟連接,使其內核頭文件所在的include目錄;或者,也可以在接下來(lái)要執行的configure命令中使用--with-headers參數指定linux內核頭文件的實(shí)際路徑。 

configure的運行參數設置如下(因為是交叉編譯,所以要將變量CC設為arm-linux-gcc): 

CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 

最后,按以上配置執行configure和make install,glibc的交叉編譯過(guò)程就算完成了,這里需要指出的是,glibc的安裝路徑設置為$PREFIXARCH=arm/arm-linux,如果此處設置不當,第二次編譯gcc時(shí)可能找不到glibc的頭文件和庫。 

第二次編譯gcc 

運行configure,參數設置為--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。 

運行make install。 

到此為止整個(gè)交叉編譯環(huán)境就完全生成了。 

幾點(diǎn)注意事項 

第一點(diǎn)、在第一次編譯gcc的時(shí)候可能會(huì )出現找不到stdio.h的錯誤,解決辦法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS變量的設定中增加-Dinhibit_libc和-D__gthr_posix_h。 

第二點(diǎn)、對與2.3.2版本的glibc庫,編譯linuxthread/sysdeps/pthread/sigaction.c時(shí)可能出錯,需要通過(guò)補丁glibc-2.3.2-arm.patch解決:執行patch -p1 < glibc-2.3.2-arm.patch 

第三點(diǎn)、第二次編譯gcc時(shí)可能會(huì )出現libc.so的錯誤,這是需要利用文本手動(dòng)修改libc.so。 




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>