新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AT91RM9200的ARM Linux的移植方法

基于AT91RM9200的ARM Linux的移植方法

作者: 時(shí)間:2012-04-11 來(lái)源:網(wǎng)絡(luò) 收藏

標(biāo)準(zhǔn)內(nèi)核相對(duì)于資源受限的嵌入式系統(tǒng)來(lái)說(shuō)是過(guò)于龐大,整個(gè)代碼分布如圖5所示,因此要將其到嵌入式系統(tǒng)上,就需要將內(nèi)核根據(jù)目標(biāo)平臺(tái)的情況進(jìn)行剪裁、配置,該目標(biāo)板的主要硬件資源如圖6所示。和體系結(jié)構(gòu)相關(guān)的代碼都放在arch/arm/以及include/asm-arm/目錄下,將linux平臺(tái)上,主要修改這兩個(gè)目錄下的代碼。要想使linux內(nèi)核應(yīng)用于自己的平臺(tái)上,必須對(duì)內(nèi)核的源代碼做一定的修改,主要修改部分如下:(1) 修改根目錄下的Makefile文件,確認(rèn)ARCH和CROSS_COMPILE的定義:ARCH :=arm; CROSS_COMPILE :=arm-linux- (2)修改arch目錄下的Makefile文件,根據(jù)自己的電路設(shè)置TEXTADDR變量,TEXTADDR決定內(nèi)核起始運(yùn)行地址,即 image.ram應(yīng)下載的地址。(3)修改arch目錄下的config.in 文件,添加CONFIG_ARCH_自選項(xiàng),config文件決定了menuconfig菜單的內(nèi)容,把使用的平臺(tái)加在需要的地方,這樣在配置linux內(nèi)核時(shí)就能夠選擇是否支你的平臺(tái)了。

(4)修改arch/arm/boot目錄下的Makefile文件,根據(jù)自己的電路設(shè)置ZTEXTADDR和ZRELADDR, ZTEXTADDR和ZRELADDR分別是自解壓代碼的起始地址和內(nèi)核解壓后代碼輸出起始地址。(5)修改arch/arm/boot /compressed目錄下的Makefile文件,加入head-at91rm9200.S (6)修改arch/arm/kernel目錄下的Makefile文件,增加的支持,同時(shí)在 debug-armv.S中加入關(guān)閉全部外圍設(shè)備,保證系統(tǒng)正常運(yùn)行的代碼,在entry-armv.S中加入關(guān)于CPU中斷處理部分的代碼。(7)修改 arch/arm目錄下的mm-armv.c文件,將init_maps->bufferable=0改為init_maps-> bufferable=1;

當(dāng)然,一些大的芯片開發(fā)商在發(fā)行芯片的同時(shí),針對(duì)自己芯片的體系結(jié)構(gòu)對(duì)linux內(nèi)核作了一些補(bǔ)丁。實(shí)驗(yàn)中使用的是針對(duì)AT91RM9200體系結(jié)構(gòu)的補(bǔ)丁patch-2.4.19-rmk7給標(biāo)準(zhǔn)內(nèi)核源代碼打上補(bǔ)丁后,該內(nèi)核就可應(yīng)用于AT91RM9200了,這樣可以大大減少開發(fā)的工作量。

之后要做的工作就是編譯內(nèi)核,要想編譯適合自己工程中需要的內(nèi)核,首先要對(duì)內(nèi)核進(jìn)行配置,常用的配置命令有:make config;make oldconfig;make menuconfig;make xconfig;make defconfig;內(nèi)核包允許用戶對(duì)其各類功能逐項(xiàng)配置,在配置時(shí), 大部分選項(xiàng)可以使用其缺省值, 只有小部分需要根據(jù)用戶不同需要選擇。選擇的原則是將與內(nèi)核其它部分關(guān)系較遠(yuǎn)部分且不經(jīng)常使用的部分功能代碼編譯成為可加載模塊, 有利于減小內(nèi)核的長(zhǎng)度, 減小內(nèi)核消耗的內(nèi)存,不需要的功能就不要選, 與內(nèi)核緊密且經(jīng)常使用的部分功能代碼直接編譯到內(nèi)核中。主要是進(jìn)行以下幾項(xiàng)配置: (1)選擇處理器類型;(2)選擇板級(jí)支持;(3)選擇對(duì)RAMDISK支持、對(duì)設(shè)備驅(qū)動(dòng)的支持以及對(duì)文件系統(tǒng)的支持。在配置工作完成后, 就可以進(jìn)行內(nèi)核編譯。

編譯內(nèi)核有壓縮方式和非壓縮兩種方式。非壓縮方式使用make vmlinux來(lái)編譯內(nèi)核,或者直接運(yùn)行make命令。壓縮方式用make bzImage來(lái)編譯內(nèi)核。編譯成功后會(huì)在arch/arm/boot目錄中生成內(nèi)核的鏡像,此鏡像下載到flash中就可以通過(guò)bootloader引導(dǎo)。具體的編譯步驟如下:(1) 進(jìn)入打上補(bǔ)丁修改好的內(nèi)核源代碼目錄下,執(zhí)行make mrproper;make clean這兩條指令,將源代碼清理干凈(防止以前編譯產(chǎn)生的“垃圾”干擾)。(2)執(zhí)行make at91rm9200dk_config,使源代碼按照AT91RM9200體系結(jié)構(gòu)來(lái)配置。 (3)執(zhí)行make o1dconfig(保存原編譯配置)(4)執(zhí)行make menuconfig進(jìn)入內(nèi)核編譯前配置界面,進(jìn)行配置。(5)執(zhí)行make dep聲稱編譯要用的依賴文件。(6)執(zhí)行make zImage生成內(nèi)核鏡像。

3.3 文件系統(tǒng)的移植

linux采用文件系統(tǒng)組織系統(tǒng)中的文件和設(shè)備,為設(shè)備和用戶程序提供統(tǒng)一接口。linux要啟動(dòng)起來(lái)還需要有根文件系統(tǒng)。根文件系統(tǒng)的作用是存放各種工具(如Linux命令)、應(yīng)用程序、必需的鏈接庫(kù)等等。通常用busybox來(lái)制作根文件系統(tǒng),在busybox中包含一百多種Linux上標(biāo)準(zhǔn)的工具程序, 而這些工具程序僅需幾百k空間。busybox使用非常方便, 只要建立一個(gè)符號(hào)連接即可, 用戶可以通過(guò)配置Config.h 和Makefile文件來(lái)定制busybox。將busybox復(fù)制到bin目錄中,分別使用ln-s 建立每一個(gè)命令的符號(hào)連接。但應(yīng)該注意的是busybox需要glibc支持(如果使用靜態(tài)連接則不需要glibc 庫(kù)文件),因此還需要將運(yùn)行busybox所需的庫(kù)文件copy到lib目錄中, 并建立符號(hào)連接。到此為止, ARM Linux 的根文件系統(tǒng)就已經(jīng)建立起來(lái)了。

ARM Linux采用RAMDISK的方式來(lái)裝載根文件系統(tǒng),所以在運(yùn)行內(nèi)核之前,需要先制作RAMDISK,將必須的文件和設(shè)備加人到RAMDISK中。內(nèi)核啟動(dòng)后,會(huì)從指定地址去讀取根文件系統(tǒng),這里我們使用RAMDISK在內(nèi)存中虛擬一個(gè)磁盤,具體如下:

(1)首先創(chuàng)建一個(gè)2048k的虛擬磁盤,文件名為initrd.img:# dd if= dev/zero of=initrd.img bs= lk count= 2048 (2)將該虛擬磁盤文件格式化成Ext2格式:# mkfs ext2 -c initrd.img這就生成了一個(gè)支持Ext2文件系統(tǒng)的ramdisk (3)mount這個(gè)文件系統(tǒng)到/tmp下,# mount -o loop -t ext2 initrd.img /tmp (4)向/tmp中添加linux啟動(dòng)必須的文件和設(shè)備。 # cd /tmp; # mkdir bin dev etc lib mnt proc sbin sys usr 以上這幾個(gè)程序和設(shè)備是啟動(dòng)Linux必須的,這樣得到的ramdisk大約400k (5)創(chuàng)建設(shè)備節(jié)點(diǎn),添加相應(yīng)的程序,將已經(jīng)訂制好的一個(gè)文件系統(tǒng)全部復(fù)制過(guò)來(lái)。# cp –a myfs/* /tmp (6)壓縮映像,把loop設(shè)備卸載下來(lái),然后用gzip命令把映像壓縮一下。# umount /tmp ; #gzip –best –c initrd.img > initrd.img.gz現(xiàn)在我們就得到了一個(gè)壓縮的RAMDISK映像initrd.img.gz制作好了。

32.jpg

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


關(guān)鍵詞: 移植 方法 Linux ARM AT91RM9200 基于

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉