?? buildarmlinuxcrosstools.txt
字號:
Arm linux 交叉開發工具鏈安裝步驟
經過無數次的失敗之后,終于搞定了Arm linux的交叉編譯工具鏈的安裝。下面把成功的步驟羅列如下:
主要是參考了http://frank.harvard.edu/~coldwell/toolchain/中的步驟。
主機環境:
聯想旭日150筆記本,i386結構(i686?)
windows2000 安裝vmware 5.5.1
vmware中安裝有 Redhat linux 9.0 內核為:
一、準備工作
1、規劃創建所需要的目錄
為了不影響系統原有的工具鏈,決定將交叉工具鏈安裝在一個特定的路徑中
#mkdir /usr/src/armgcc //用于存放下載的源代碼包
#mkdir /usr/local/arm //準備用來安裝交叉工具鏈的路徑
2、建立相應的環境變量,以方便后面使用
export TARGET=arm-linux
export PREFIX=/usr/local/arm
export SYSROOT=${PREFIX}/sysroot
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export SRC=/usr/src/armgcc
export PATH=$PATH:${PREFIX}/bin
為了方便,把他們放在用戶目錄中的.bash_profile文件中,這樣不用每次啟動計算機都要重新設置了,我是放在/root/.bash_profile中
3、下載相應的源代碼包
將所需要的源代碼包下載到${SRC}目錄中,和參考資料中的不同,我采用了不同的版本
linux-2.4.26.tar.bz2 patch-2.4.26-vrs1.gz
gcc-3.4.4.tar.gz
glibc-2.3.4.tar.bz2 glibc-linuxthreads-2.3.4.tar.bz2
binutils-2.14.tar.gz
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3"
http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff
二、開始安裝
1、安裝Binutils
這個步驟是最順利的,在歷次失敗的安裝過程中,這個步驟也都沒有出現過什么問題。
#cd ${SRC}
#tar xvfz binutils-2.14.tar.gz
#mkdir -p bdbin
#cd bdbin
#../binutils-2.14/configure --prefix=${PREFIX} --target=${TARGET} --with-sysroot=${SYSROOT}
#make
#make install
完成之后,在${PREFIX}/bin目錄和${PREFIX}/{TARGET}/bin目錄中,會有相應的工具程序。
2、linux內核頭文件的安裝
#cd ${SRC}
#tar xvfj linux-2.4.26.tar.bz2 #gzip -d patch-2.4.26-vrs1.gz
#cd linux-2.4.26
#cp ../patch-2.4.26-vrs1 ./ #patch -p1 < patch-2.4.26-vrs1 #make ARCH=arm menuconfig #make
//最后一步make,有點懷疑,那是華恒的資料中的步驟,感覺不應該整體進行編譯啊,以前的參考資料,包括上面harvard的參考資料中,都是只針對特定頭文件進行編譯的。
//make include/linux/version.h
#mkdir -p ${SYSROOT}/usr/include
#cp -a ${PREFIX}/src/linux/include/linux ${SYSROOT}/usr/include/linux
#cp -a ${PREFIX}/src/linux/include/asm-arm ${SYSROOT}/usr/include/asm
#cp -a ${PREFIX}/src/linux/include/asm-generic ${SYSROOT}/usr/include/asm-generic
//上面復制都文件到相應的目錄中時,華恒的有誤,把asm-i386復制了。估計是,參考LFS內核升級的資料,直接抄過來了。
3、glibc頭文件安裝
#cd ${SRC}
#tar xvfj glibc-2.3.4.tar.bz2
#cd glibc-2.3.4
#tar xvfj ../glibc-linuxthreads-2.3.4.tar.bz2
#vi sysdeps/unix/sysv/linux/arm/ioperm.c
修改 第103、104兩行中的BUS_ISA 為CTL_BUS_ISA。(注意,這兩行中有多個BUS_ISA,要修改的只是其中不與其它符號相連的那兩個BUS_ISA)
#cd ..
#mkdir bdlib
#cd bdlib
#../glibc-2.3.4/configure --prefix=/usr --host=${TARGET} --enable-add-ons=linuxthreads \
--with-headers=${SYSROOT}/usr/include
#make cross-compiling=yes install_root=${SYSROOT} install-headers
#touch ${SYSROOT}/usr/include/gnu/stubs.h
#touch ${SYSROOT}/usr/include/bits/stdio_lim.h
//需要注意,上面配置的時候,--prefix=/usr的確是這樣的,可能glibc和gcc、binutils中prefix選項的含義不一樣
4、第一次安裝gcc
#cd ${SRC}
#tar xzvf gcc-3.4.4.tar.gz
#patch -d gcc-3.4.4 -p1 < flow.c.diff
#patch -d gcc-3.4.4 -p1 < t-linux.diff
#mkdir bdgcc
#../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c \
--with-sysroot=${SYSROOT}
注意:不能加上"--disable-shared"選項。(華恒的注釋,不知道為什么,有什么考慮)。
#make all-gcc
#make install-gcc
5、安裝完整的glibc
很耗時間啊,整個過程中,這個步驟是消耗時間最長的。
#cd ${SRC}/bdlib
#rm * -rf
#BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib \
AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld \
../glibc-2.3.4/configure --prefix=/usr --build=i386-redhat-linux --host=arm-unknown-linux-gnu \
--target=arm-unknown-linux-gnu --without-__thread --enable-add-ons=linuxthreads \
--with-headers=${SYSROOT}/usr/include
#make
#make install_root=${SYSROOT} install
6、安裝完整的gcc
#cd ${SRC}/bdgcc
#rm * -rf
#../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c \
--with-sysroot=${SYSROOT}
#make
#make install
好啦,交叉編譯工具鏈,到此就建立成功啦。
7、試驗
harvard的參考資料上,還有一個步驟是,用剛建立的工具鏈編譯內核,呵呵,應該是可行的了。
#cd ${SRC}/linux-2.4.26
#make zImage
#make modules
#make INSTALL_MOD_PATH=${SYSROOT} modules_install
編譯出來的內核在 arch/arm/boot/zImage
相應的可載入模塊將被安裝在/usr/arm/sysroot/lib/modules/[kernel-version]
后面那據話,不知道是什么意思,是不是說編譯之后就在那個位置,還是說將來使用的時候應該放的位置?
另外:the directory /usr/arm/sysroot has been set that it is suitable for NFS export as a root filesystem for the target system.
參考資料:
1、http://frank.harvard.edu/~coldwell/toolchain/
2、linux_移植指南.pdf
另外,在下面的資料中看到了對一些配置選項的介紹:
GNU toolchain for ARM 編譯筆記
交叉編譯GNU工具鏈真是折磨人的差事阿……以后再也不做了。
以下是編譯筆記
______________________________________________
構建自己的arm-linux toolchain:
生成工具鏈目錄結構:
/usr/armtools
`----arm-linux 目標平臺相關內容
| `----bin gcc內部使用的編譯/連接工具
| `----lib gcc的內部庫/c++ 庫
| | `----ldscripts ld的連接腳本
| `----target-root 目標平臺根目錄
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -