《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 建立針對(duì)arm-linux的交叉編譯環(huán)境
建立針對(duì)arm-linux的交叉編譯環(huán)境
摘要: 交叉編譯是嵌入式開(kāi)發(fā)過(guò)程中的一項(xiàng)重要技術(shù),它的主要特征是某機(jī)器中執(zhí)行的程序代碼不是在本機(jī)編譯生成,而是由另一臺(tái)機(jī)器編譯生成,一般把前者稱(chēng)為目標(biāo)機(jī),后者稱(chēng)為主機(jī)。采用交叉編譯的主要原因在于,多數(shù)嵌入式目標(biāo)系統(tǒng)不能提供足夠的資源供編譯過(guò)程使用,因而只好將編譯工程轉(zhuǎn)移到高性能的主機(jī)中進(jìn)行。
Abstract:
Key words :

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

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

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

針對(duì)目標(biāo)系統(tǒng)的編譯器gcc

針對(duì)目標(biāo)系統(tǒng)的二進(jìn)制工具binutils

目標(biāo)系統(tǒng)的標(biāo)準(zhǔn)c庫(kù)glibc

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

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

下載源代碼

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

編譯binutils

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

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

首先執(zhí)行make mrproper進(jìn)行清理工作,然后執(zhí)行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)進(jìn)行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架構(gòu),因?yàn)槿笔〖軜?gòu)為主機(jī)的cpu架構(gòu)),這一步需要根據(jù)目標(biāo)機(jī)的實(shí)際情況進(jìn)行詳細(xì)的配置,筆者進(jìn)行的實(shí)驗(yàn)中目標(biāo)機(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

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

交叉編譯glibc

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

configure的運(yùn)行參數(shù)設(shè)置如下(因?yàn)槭墙徊婢幾g,所以要將編譯器變量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的交叉編譯過(guò)程就算完成了,這里需要指出的是,glibc的安裝路徑設(shè)置為$PREFIXARCH=arm/arm-linux,如果此處設(shè)置不當(dāng),第二次編譯gcc時(shí)可能找不到glibc的頭文件和庫(kù)。

第二次編譯gcc

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

運(yùn)行make install。

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

幾點(diǎn)注意事項(xiàng)

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

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

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

 

本文來(lái)源于與非網(wǎng) http://www.eefocus.com
原文地址:http://www.eefocus.com/article/11-03/2075521299493313.html

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 国产精品国色综合久久| 日本大片在线看黄a∨免费| 妞干网免费观看视频| 久久男人av资源网站| 欧美精品久久天天躁| 国产一区二区精品久久| 国产精品18久久久久久麻辣| 一级特色大黄美女播放网站| 日本高清免费不卡在线播放| 免费a级黄毛片| 老师让我她我爽了好久视频| 国产天堂亚洲国产碰碰| 足恋玩丝袜脚视频免费网站| 青青青国产在线观看| 色哟哟视频在线观看网站| 女人洗澡一级毛片一级毛片| 亚洲精品午夜久久久伊人| 精品国产日韩一区三区| 国产片**aa毛片视频| 91成人在线播放| 在线观免费看高清影视剧| 一级片免费网站| 丁香六月综合网| 性高朝久久久久久久| 亚洲不卡在线观看| 欧美日韩视频精品一区二区| 台湾无码一区二区| 色综合综合色综合色综合| 国产精品日本一区二区在线播放 | 大香大香伊人在钱线久久下载| 国产青草视频在线观看| 在线一区二区观看| 久久精品亚洲视频| 爱爱帝国亚洲一区二区三区| 免费在线观看污| 精品人妻无码区二区三区| 国产成人女人毛片视频在线| 五月开心激情网| 天堂资源在线中文| 丰满岳乱妇在线观看视频国产| 日本无吗免费一二区|