張先杰
(山東科技大學(xué)電氣與自動化工程學(xué)院,山東 青島 266510)
嵌入式Linux在ARM9(TQ)上的移植
張先杰
(山東科技大學(xué)電氣與自動化工程學(xué)院,山東青島266510)
【摘要】微處理器技術(shù)的發(fā)展使得小型、實時、性能良好的嵌入式操作系統(tǒng)得到廣泛的應(yīng)用。分析了Linux操作系統(tǒng)的結(jié)構(gòu),描述了將Linux內(nèi)核移植到ARM9開發(fā)板TQ2440上的方法和完整過程。介紹目標(biāo)平臺以及移植環(huán)境的構(gòu)建,重點介紹Bootloader的架構(gòu)和功能以及Linux內(nèi)核的移植,移植后運行結(jié)果良好可行。
【關(guān)鍵詞】TQ2440;ARM9;系統(tǒng)移植;Boot loader;Linux內(nèi)核
本文中使用的TQ2440開發(fā)板CPU是三星公司生產(chǎn)的S3C2440,內(nèi)核為ARM 920T,采用0.13um CMOS標(biāo)準(zhǔn)單元和存儲器編譯器開發(fā)。以此作為硬件平臺來實現(xiàn)Linux系統(tǒng)的完整移植。而嵌入式系統(tǒng)其本身具有結(jié)構(gòu)較小、穩(wěn)定性好等優(yōu)點,因為Linux本身具有良好的可移植性,通過構(gòu)建相應(yīng)的開發(fā)環(huán)境,能夠進行獨立的產(chǎn)品開發(fā),使得它被廣泛應(yīng)用于多種硬件平臺。
1.1Linux系統(tǒng)的基本體系結(jié)構(gòu)
Linux系統(tǒng)主要由內(nèi)核、shell、文件系統(tǒng)和應(yīng)用程序4個部分組成。用戶通過它們來運行程序、管理文件和使用系統(tǒng)。
1.2Linux內(nèi)核
內(nèi)核是操作系統(tǒng)的核心,負(fù)責(zé)管理系統(tǒng)的進程、內(nèi)存、設(shè)備驅(qū)動程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。
Linux內(nèi)核由如下幾部分組成:內(nèi)存管理、進程管理、硬件驅(qū)動程序、文件系統(tǒng)和網(wǎng)絡(luò)管理等。
圖1 Linux內(nèi)核結(jié)構(gòu)圖
圖2 交叉編譯環(huán)境圖
2.1交叉編譯環(huán)境的搭建
硬件環(huán)境構(gòu)建采用的是主機與目標(biāo)板結(jié)合的交叉開發(fā)模式,TQ2440開發(fā)板配有S3C2440處理器,64MB的SDRAM內(nèi)存,256MB的Nand lash,2MB的NOR LASH,串口,網(wǎng)絡(luò)接口,USB接口等強大的硬件系統(tǒng)。
軟件環(huán)境的搭建是由GNU 庫(glibc),GNU inutils以及GNU編譯器gee等一系列交叉開發(fā)工具組成,如下圖2所示。
2.2引導(dǎo)加載程序Boot oader
Bootloader是這么是一段系統(tǒng)上電時候開始執(zhí)行,并初始化硬件設(shè)備,預(yù)備軟件環(huán)境,然后調(diào)用操作系統(tǒng)的程序。TQ2440開發(fā)板中ARM上電CPU是從0x0000000開始執(zhí)行,Bootloader存放在此處。根據(jù)開發(fā)板的需要,我們適當(dāng)?shù)男薷腃PU的頻率、支持NOR LASH的支持和SDRAM的配置及大小、環(huán)境變量的位置等相關(guān)數(shù)據(jù)。
3.1Linux移植準(zhǔn)備
載內(nèi)核源文件linux-2.6.22.tar.bz2、補丁文件patch-2.6.22.6.bz2,將兩個文件放在同一個目錄下面解壓如下:
$tar jf inux-2.6.22.tar.bz2
結(jié)論:C、D泊位靠泊5000DWT油船時,A、B泊位可靠泊2000DWT及以下噸級雜貨船,5000DWT及3000DWT雜貨船不能在A、B泊位進行靠泊作業(yè)。
$tar jf atch-2.6.22.6.bz2.22.6
$cd inux-2.6.22
$patch p1< ./patch-2.6.22.6
由此我們得到了內(nèi)核源碼。
Makef e由配置文件.confg確定部分文件與內(nèi)核、模塊和子目錄的關(guān)系。在內(nèi)核目錄下執(zhí)行“make enuconfg RCH=arm ROSS_ OMPILE=arm-linux-”得到內(nèi)核配置界面,通過配置界,我們可以選擇我們所需要的芯片類型,文件類型等。
3.2Linux內(nèi)核移植
修改內(nèi)核以支持TQ2440開發(fā)板,首先修改頂層(即是根目錄下)的Makefle文件,修改為ARCH=arm,cross_COMPILE=arm-linux-;修改時鐘:amdk2440_map_io()中的s3c24xx_init_(12000000);修改機器碼為168;通過內(nèi)核的配置單按用戶需求配置好內(nèi)核并保存為.confg,即可編譯。
使用命令:vim arch/arm/plat-s3c24xx/common-smdk.c修改文件內(nèi)容,將NAND FLASH分為uboot,ysffs2和kernel這3個分區(qū),并修改相關(guān)偏移量。
YAFFS是專門為NAND FLASH存儲器設(shè)計的嵌入式文件系統(tǒng),遵循GPL協(xié)議。添加YAFFS2文件系統(tǒng)的支持,就是在內(nèi)核上打支持YAFFS2的補丁,之后對內(nèi)核添加YAFFS的相關(guān)配置。
內(nèi)核配置完畢后保存退出,最后編譯內(nèi)核,輸入命令#make zImage,成功編譯后,生成zlmage內(nèi)核映像文件,該文件在arch/arm/boot目錄下產(chǎn)生,完成內(nèi)核的配置編譯,只需要將編譯好的內(nèi)核映像文件zllnage下載到開發(fā)板的Flash中就可以了,使用以下命令:
set bootcmd 'nboot 0x32000000 0 0; bootm 0x32000000'
saveenv
開發(fā)板上電后內(nèi)核自動啟動,到此我們就完成了Linux在TQ2440開發(fā)板上的移植工作。
本文通過TQ2440開發(fā)板,研究了將Linux移植到ARM9統(tǒng)上的整個移植流程。ARM平臺下嵌入式Linux的移植,包括熟悉硬件平臺,構(gòu)建嵌入式Linux系統(tǒng)的軟件平臺,建立交叉編譯環(huán)境,Bootioader的移植,Linux內(nèi)核的配置與編譯等許多相關(guān)內(nèi)容,對于學(xué)習(xí)ARM的人員來書具有很好的指導(dǎo)和實踐意義。
【參考文獻】
[1]李延鵬.嵌入式開發(fā)工程師入行手冊[M].北京:中國鐵道出版社,2013-8.
[2]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2012-1.
[3]曾福振,閔聯(lián)營.基于ARM和Linux的嵌入式平臺的構(gòu)建[J].微型機與應(yīng)用,2011,30(12).