交叉編譯環境的搭建(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]
在命令列中輸入
#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*