基于3c2410的linux2.6.22移植(1)
移植大體的步驟主要有:
(1)
(2)
(3)
(4)
(5)
(6)
下面我會按照步驟逐一介紹。
一、
建立交叉編譯環(huán)境就是在宿主機(也就是pc機)的系統(tǒng)上建立一個模擬ARM的工作環(huán)境,使得在這個環(huán)境下編譯產生的程序能夠順利的在ARM上的系統(tǒng)內運行。主要工作包括binutils、gcc以及glibc的編譯生成,還有一些環(huán)境變量的設置。
(1)
下載源代碼包:
補丁包:
glibc-2.6.1-libgcc_eh-1.patch
glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch
glibc-2.6.1-sysdep_cancel-1.patch
glibc-csu.patch
注:Binutils 是一組開發(fā)工具,包括連接器,匯編器和其他用于目標文件和檔案的工具;
GCC是C編譯器,用來將C代碼編譯成匯編代碼;
Glibc就是gcc編譯時需要的庫了,glibc-ports是提供glibc對ARM的支持;
Linux-2.6.22.tar.bz2是內核源代碼包。
需要注意的是gcc和glibc以及l(fā)inux內核版本需要保持對應。如果用比較老的編譯器去編譯新的內核,或者用新的編譯器編譯老版本的內核,會出現(xiàn)一些莫名其妙的錯誤。另外補丁包也是必備的,否則編譯過程中也會出錯。剛開始我就深受其害。
(2)
目錄的結構可以參考《Building.Embedded.Linux.Systems》。推薦整個目錄放到/usr/local下,這樣所有的用戶都有訪問權限。我當初沒經驗,直接放到home下了,后來會有些用戶權限的小麻煩。這里給出我的目錄結構:
$root@host:/home#
arm
其中host是我的普通登陸用戶帳號目錄,arm就是工作目錄了。為了方便,我平時用root登陸。
$root@host:/home# cd
$root@host:/home/arm# mkdir build-tools kernel rootfs tmp tools
其中編譯交叉工具時的主要工作都在build-tools目錄下完成,kernel目錄用來存放內核源代碼,rootfs目錄是用來建立啟動根文件系統(tǒng)的(后面會詳細介紹),tmp是臨時文件存放目錄,tools目錄就是最終生成的編譯器gcc和glibc存放的地方。
(3)
$root@host:/home/arm# export PRJROOT=/home/arm
$root@host:/home/arm# TARGET=arm-linux
$root@host:/home/arm# PREFIX=${PRJROOT}/tools
$root@host:/home/arm# TARGET_PREFIX=${PREFIX}/${TARGET}
$root@host:/home/arm# PATH=${PREFIX}/bin:${PATH}
其中TARGET定義了交叉工具的工作平臺類型,PREFIX指定交叉工具的最終安裝目錄,PATH指定系統(tǒng)尋找交叉工具可執(zhí)行文件所在的路徑。
(4)
$root@host:/home/arm# cd ${PRJROOT}/build-tools
$root@host:/home/arm/build-tools# mkdir build-binutils build-boot-gcc build-glibc build-gcc build-glibc-headers patch
將源碼包放到這個目錄下
$root@host:/home/arm/build-tools# ls
build-boot-gcc
binutils-2.18.tar.bz2
將補丁放到patch目錄下:
$root@host:/home/arm/build-tools# cd patch
$root@host:/home/arm/build-tools/patch# ls
binutils-2.18-genscripts_multilib-1.patch
glibc-2.6.1-hppa_nptl-1.patch
glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch
glibc-2.6.1-sysdep_cancel-1.patch
將內核源碼包放到${PRJROOT}/kernel目錄下
$root@host:/home/arm# cd kernel
$root@host:/home/arm/kernel# ls
linux-2.6.22.tar.bz2
評論