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

                  2013-11-07 23:31 來源:電源網 作者:和靜

                  交叉編譯環境介紹

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

                  linux下的交叉編譯環境重要包括以下幾個部分:

                  針對目標系統的編譯器gcc

                  針對目標系統的二進制工具binutils

                  目標系統的標準c庫glibc

                  目標系統的linux內核頭文

                  交叉編譯環境的建立步驟

                  下載源代碼

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

                  編譯binutils

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

                  配置linux內核頭文件

                  首先執行make mrproper進行清理工作,然后執行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)進行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架構,因為缺省架構為主機的cpu架構),這一步需要根據目標機的實際情況進行詳細的配置,筆者進行的實驗中目標機為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參數指定目標機類型,并使用--disable-threads、--disable-shared、--enable-languages=c參數,然后執行make install。這一步將生成一個最簡的gcc。由于編譯整個gcc是需要目標機的glibc庫的,它現在還不存在,因此需要首先生成一個最簡的gcc,它只需要具備編譯目標機glibc庫的能力即可。

                  交叉編譯glibc

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

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

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

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

                  第二次編譯gcc

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

                  運行make install。

                  到此為止整個交叉編譯環境就完全生成了。

                  幾點注意事項

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

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

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

                  ARM Linux 交叉編譯環境

                  相關閱讀

                  暫無數據

                  一周熱門

                  亚洲日韩精品无码专区网站| 亚洲日本韩国在线| www.91亚洲| 亚洲综合色丁香婷婷六月图片 | 国产成人亚洲综合在线| 亚洲日韩国产二区无码| 亚洲AV永久青草无码精品| 久久久精品国产亚洲成人满18免费网站| 色婷婷六月亚洲综合香蕉| 亚洲国产欧美国产综合一区| 亚洲欧洲日产国码久在线| 亚洲精品人成网线在线播放va| 亚洲中文字幕久久久一区| 亚洲小说图区综合在线| 亚洲精品国产精品| 亚洲AV成人一区二区三区观看| 亚洲AV无码国产剧情| mm1313亚洲国产精品无码试看| 精品亚洲国产成人av| 一本久久综合亚洲鲁鲁五月天 | 久久精品国产亚洲AV果冻传媒| 亚洲av无码国产精品色午夜字幕 | 亚洲AV无码片一区二区三区| 爱爱帝国亚洲一区二区三区| 亚洲A∨午夜成人片精品网站| 亚洲国产成人精品无码久久久久久综合 | 亚洲av无码一区二区三区乱子伦| 国产亚洲精品va在线| 亚洲AV永久无码精品水牛影视| 亚洲国产老鸭窝一区二区三区| 在线免费观看亚洲| 亚洲另类精品xxxx人妖| 亚洲а∨天堂久久精品9966| 亚洲成a∧人片在线观看无码| 国产成人va亚洲电影| 不卡精品国产_亚洲人成在线| 国产亚洲精品精华液| 久久精品亚洲一区二区三区浴池| 亚洲视频免费观看| 色偷偷亚洲女人天堂观看欧| 亚洲A∨精品一区二区三区下载 |