1. 程式人生 > >交叉編譯環境的搭建(Linux-2.6.32核心)

交叉編譯環境的搭建(Linux-2.6.32核心)

1、建立安裝目錄

#mkdir /usr/local/arm

如果您的PC 端linux 系統已經有這個資料夾,這步就跳過

2、將交叉編譯工具解壓到安裝目錄(注意C是大寫)

#tar -xjvf arm-linux-gcc-4.3.2.tar.bz2  -C  /usr/local/arm/

3、修改環境變數

#gedit /etc/bash.bashrc

在最後一行一行加上

PATH=$PATH:/usr/local/arm/arm-linux-gcc-4.3.2/bin

通過gedit編輯器修改防止出錯後恢復麻煩

注意該行內容不能寫錯,否則會很麻煩

若是出現
[[email protected]

src]# vim /etc/profile-bash: vim: command not found

在命令列中輸入
#export PATH="/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/bin:/sbin"

4、啟用環境變數

#source /etc/bash.bashrc

5、環境驗證

#arm-linux-gcc -v

報錯:

./arm-linux-gcc: No such file or directory

需要安裝32位的相容環境,方法如下:

#sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

出現版本依賴問題,繼續報錯:

下列軟體包有未滿足的依賴關係:
lib32bz2-1.0 : 預依賴: libc6-i386 (>= 2.9-18) 但是它將不會被安裝
libc6:i386 : 依賴: libgcc1:i386 但是它將不會被安裝
nylas : 依賴: git
E: 有未能滿足的依賴關係。請嘗試不指明軟體包的名字來執行“apt-get -f install”(也可以指定一個解決辦法)。

解決方案類似:

檢視以安裝的libc6

[email protected]virtual-machine:/etc/apt# dpkg -l | grep libc6
ii libc6:amd64 2.19-0ubuntu69 amd64 GNU C Library: Shared libraries

問題解釋:當前系統以安裝的 libc6的版本為“2.19-10ubuntu2 “,而我們安裝其他軟體所依賴的是“2.19-0ubuntu6.9” 。
也就是問題在於,依賴的某個軟體的版本,跟系統以安裝的版本不一致。但 apt-get又不會自動去解除安裝以安裝的自動安裝上依賴的目標版本。所以導致我們需要手動去解決這個問題。當前解決這個問題辦法有很多種,我們這裡選擇了,直接強制覆蓋安裝目標版本,替代原來系統已安裝的版本。

# apt-get install  libc6=2.19-0ubuntu6

類似報錯還是這樣解決:
1.安裝時報錯軟體的依賴關係

2.檢視版本

 #dpkg -l | grep libc6

3.制覆蓋安裝目標版本,替代原來系統已安裝的版本

 #apt-get install  libc6=2.19-0ubuntu6

解決了依賴問題,有版本顯示則交叉編譯環境已經建立了,如下圖

[email protected]-virtual-machine:/Linux-2.6.32# arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2008q3-72' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) 

6、配置核心環境

1.解壓Linux-2.6.32

#tar –zxvf Linux-2.6.32.tar.gz –C /

2.配置核心:

#make menuconfig

報錯:

HOSTCC scripts/basic/fixdep
scripts/basic/fixdep.c:107:23: error: sys/types.h: No such file or directory
scripts/basic/fixdep.c:108:22: error: sys/stat.h: No such file or directory
make[1]: *** [scripts/basic/fixdep] Error 1
make: *** [scripts_basic] Error 2

解釋:ubuntu中並沒有所需要的庫。所以上面的錯誤說sys/types.h找不到也是缺少庫的原因。

解決方法:

安裝lib6-dev

#apt-get install lib6-dev

報錯:

The following packages have unmet dependencies:
libc6-dev : Depends: libc6 (= 2.19-0ubuntu6.9) but 2.19-10ubuntu2 is to be installed
E: Unable to correct problems, you have held broken packages.

以上報錯的含義是:
libc6-dev: 依賴: libc6的 “ 2.19-0ubuntu6.9”版本, 但是系統已安裝的是 “2.19-10ubuntu2” 。
理解了這層意思之後,接下來問題就迎刃而解了。
解決方案同上一樣:
檢視以安裝的libc

root@ubuntu:/etc/apt# dpkg -l | grep libc6
ii  libc6:amd64       2.19-10ubuntu.69    amd64   GNU C Library: Shared libraries

問題在於,當前系統以安裝的 libc6的版本為“2.19-0ubuntu.69 ” ,而我們安裝其他軟體(包括build-essential 、g++等)的時候,所依賴的是“2.19-0ubuntu6” 。
也就是問題在於,依賴的某個軟體的版本,跟系統以安裝的版本不一致。但 apt-get又不會自動去解除安裝以安裝的自動安裝上依賴的目標版本。所以導致我們需要手動去解決這個問題。當前解決這個問題辦法有很多種,我們這裡選擇了,直接強制覆蓋安裝目標版本,替代原來系統已安裝的版本。

#apt-get install libc6=2.19-0ubuntu6.9

或者安裝build-essential
若是出現依賴檔案問題,解決方法跟上面相同,
而我的最終找到替換了libc-dev-bin(被libc6-dev(被build-essential依賴)
依賴)為2.19-0ubuntu6
誒,我這麼說你懂了吧!

[email protected]virtual-machine:/Linux-2.6.32# apt-get install  libc-dev-bin=2.19-0ubuntu6

然後裝libc6-dev(被build-essential依賴)

[email protected]virtual-machine:/Linux-2.6.32# apt-get install libc6-dev

繼續make menuconfig
結果,心態炸了

*** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2

問題解釋:缺少ncurses這個庫,百度了發現是要ncurses-dev這個庫。

#apt-get install ncurses-dev

再次make menuconfig,終於

[email protected]virtual-machine:/Linux-2.6.32# make menuconfig
scripts/kconfig/mconf arch/arm/Kconfig

彈出一個配置框,如下圖:

3.編譯核心

make一下,等個幾分鐘,大功告成。

總結:依賴問題

1.良好習慣

安裝前
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade # 選項
再開始安裝
比較不會碰到套件依賴版本問題

2.檢視返回依賴

2-1. 檢視 libbz2-1.0:i386 返回依賴於 libc6
sudo apt-rdepends libbz2-1.0:i386 | grep libc6
Depends: libc6 (>= 2.4)
libc6
Depends: libc6 (>= 2.14)

                                                                                         *2017.05.18*