針對arm-linux的交叉編譯環(huán)境分析及建立步驟介紹

2013-11-07 23:31 來源:電源網(wǎng) 作者:和靜

交叉編譯環(huán)境介紹

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

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

針對目標系統(tǒng)的編譯器gcc

針對目標系統(tǒng)的二進制工具binutils

目標系統(tǒng)的標準c庫glibc

目標系統(tǒng)的linux內(nèi)核頭文

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

下載源代碼

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

編譯binutils

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

配置linux內(nèi)核頭文件

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

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

第一次編譯gcc

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

交叉編譯glibc

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

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

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

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

第二次編譯gcc

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

運行make install。

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

幾點注意事項

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

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

第三點、第二次編譯gcc時可能會出現(xiàn)libc.so的錯誤,這是需要利用文本編輯器手動修改libc.so。

ARM Linux 交叉編譯環(huán)境

相關(guān)閱讀

暫無數(shù)據(jù)

一周熱門

  • 合翔電子X中之杰智能:揭秘一家離散制造企業(yè)的柔性智造秘訣!
    合翔(常州)電子有限公司成立于1996年,主要生產(chǎn)蜂鳴器并廣泛應用于汽車、筆記本電腦、家用電器等領(lǐng)域。公司有BYD、奇瑞
  • AI 推動未來科學 晶泰科技共襄未來科學大獎周
    近日,為期五天的未來科學大獎周在中國香港舉辦。未來科學大獎周旨在弘揚科學精神,禮贊科學成就,以前瞻視角引領(lǐng)公眾探尋世界科
  • Quobly宣布容錯量子計算關(guān)鍵里程碑
    法國領(lǐng)先的量子計算初創(chuàng)公司Quobly報告稱,F(xiàn)D-SOI技術(shù)可以作為商業(yè)量子計算的可擴展平臺,充分利用傳統(tǒng)的半導體制造