基于ARM的Linux系統(tǒng)移植研究與實現(xiàn)
來源:現(xiàn)代電子技術(shù)
作者:許青林,,解爭龍
摘要: Linux具有源代碼開放,、效率高,、可裁剪等優(yōu)點,,在嵌入式系統(tǒng)的開發(fā)中具有廣泛的應(yīng)用,。文章介紹了嵌入式Linux操作系統(tǒng),、移植目標平臺SBC2410及Linux內(nèi)核源代碼的目錄結(jié)構(gòu),,分析了Linux移植到SBC2410平臺的實現(xiàn)過程,,闡述了Linux內(nèi)核,、u-boot的裁剪和編譯以及根文件系統(tǒng)的制作過程,,最后在SBC2410平臺上成功移植了嵌入式Linux系統(tǒng)。
Abstract:
Key words :
0 引言
嵌入式系統(tǒng)是一個專用的計算機系統(tǒng),。該系統(tǒng)以計算機技術(shù)為基礎(chǔ),,軟硬件可裁減,但對功能,、可靠性,、成本等都有嚴格的要求。今天,,一些專用系統(tǒng)需要處理大量的信息,,由于傳統(tǒng)的計算機系統(tǒng)很難實現(xiàn)硬件可裁減,因而已經(jīng)不能滿足專用系統(tǒng)的需要,。伴隨著我國汽車,、家電等產(chǎn)業(yè)的快速發(fā)展,嵌入式系統(tǒng)的應(yīng)用與開發(fā)已成為目前IT產(chǎn)業(yè)的一個新的熱點,?;贏RM的嵌入式系統(tǒng)的開發(fā),首先要解決的問題是嵌入式操作系統(tǒng)的移植。Linux操作系統(tǒng)作為一種源代碼開放,、同時可支持多種處理器結(jié)構(gòu)的多任務(wù)操作系統(tǒng),,具有內(nèi)核小、易裁剪,、可移植性好等優(yōu)點,,是目前嵌入式系統(tǒng)應(yīng)用與開發(fā)的主流操作系統(tǒng)。本文主要研究在ARM9平臺上搭建嵌入式Linux系統(tǒng)的實現(xiàn)方法,。
1 嵌入式Linux操作系統(tǒng)及特點
目前,,在嵌入式系統(tǒng)開發(fā)中,52%的項目選擇Linux作為嵌入式操作系統(tǒng),,這與Linux自身的優(yōu)良特性有不可分割的關(guān)系,。
Linux操作系統(tǒng)內(nèi)核源代碼開放,并具有豐富的軟件資源,。不同的應(yīng)用領(lǐng)域可以根據(jù)需要對內(nèi)核進行修改,,每一種通用程序在Linux都能找到。在Linux上開發(fā)程序不需要從頭做起,,可以選擇一個類似的軟件進行二次開發(fā),,因而能夠低成本地開發(fā)出滿足自己需要的嵌入式系統(tǒng)。
另外,,Linux系統(tǒng)能支持多種硬件設(shè)備,,而且驅(qū)動豐富,能支持多種主流硬件設(shè)備和最新硬件技術(shù),。隨著Linux的廣泛應(yīng)用,,許多芯片生產(chǎn)廠家也已經(jīng)開始為Linux提供驅(qū)動,這為Linux在各種硬件平臺上的應(yīng)用奠定了基礎(chǔ),。
Linux可支持多種體系結(jié)構(gòu),,具有較好的可移植性。目前,,Linux已經(jīng)移植到絕大多數(shù)硬件平臺上,,能夠支持ARM、MIPS,、LPHA,、SPARC等多種體系,Linux支持幾乎所有流行的CPU,。Linux具備一整套工具鏈,,容易建立嵌入式系統(tǒng)的開發(fā)環(huán)境和交叉運行環(huán)境,可跨越嵌入式系統(tǒng)開發(fā)中仿真工具的障礙,。由于其符合IEEE POSIX.1標準,因而應(yīng)用程序具有較好的可移植性。
Linux具有完善的網(wǎng)絡(luò)通信和文件管理機制,。實際上,,Linux從一開始就與網(wǎng)絡(luò)密不可分,網(wǎng)絡(luò)是Linux的最為顯著的特征,。Linux具有ARM9上的嵌入式Linux系統(tǒng)移植的特性,,從而保證了它支持所有標準因特網(wǎng)協(xié)議,可以利用Linux的網(wǎng)絡(luò)協(xié)議棧開發(fā)嵌入式TCP/IP網(wǎng)絡(luò)協(xié)議棧,。同時,,Linux支持ext2、fat16,、fat32,、romfs等文件系統(tǒng),從而為嵌入式系統(tǒng)應(yīng)用開發(fā)打下了很好的基礎(chǔ),。
2 Linux在ARM平臺上的移植
2.1 SBC2410硬件平臺介紹
SBC2410硬件平臺是具有基于ARM9處理器SBC2410A,,可支持ARM—Linux、WindowsCE等操作系統(tǒng)的嵌入式硬件平臺,。主要硬件資源有一片64 MB SDRAM,,一片64 MBNandFlash,一片1 MB Nor Flash,,一個串口COM0,,一個USB Host A型接口,一個USB Slave B型接口,,以及一個標準的JTAG接口等,。
2.2 Linux在ARM平臺上的移植準備
首先是要建立交叉編譯環(huán)境。交叉編譯環(huán)境是一個由編譯器,、連接器和解釋器組成的綜合開發(fā)環(huán)境,。交叉編譯工具主要包括編譯器gcc,二進制工具binutils,,目標系統(tǒng)的標準c庫glibc和目標系統(tǒng)的Linux內(nèi)核頭文件,。宿主機要選好做嵌入式開發(fā)的Linux操作系統(tǒng),配置好網(wǎng)絡(luò),、NFS服務(wù)等,。因為目標機沒有足夠的資源運行開發(fā)工具和調(diào)試工具,所以要在宿主機上建立交叉編譯環(huán)境,,然后由交叉編譯工具生成可執(zhí)行二進制代碼(并不能在宿主機上運行),,再下載到目標板上調(diào)試和運行。交叉編譯標準c環(huán)境的生成步驟包括以下四步:
(1)獲得binutils,、gcc,、glibc的源碼;
(2)配置編譯binutils,得到匯編器和連接器,;
(3)配置編譯gcc源碼,,生成gcc編譯器;
(4)配置glibc編譯生成glibc的c庫函數(shù),。
2.3 引導(dǎo)程序移植bootloader
引導(dǎo)程序bootloader是與體系結(jié)構(gòu)緊密相關(guān)的部分,,是操作系統(tǒng)內(nèi)核和應(yīng)用程序運行之前運行的一小段程序,用于完成系統(tǒng)的啟動和加載,。它類似于PC機中的BIOS程序,。bootloade嚴重依賴于硬件實現(xiàn),一般在嵌入式系統(tǒng)中建立一個通用的bootloader是不可能的,。用戶必須自己編寫這一小段程序,,從而完成硬件設(shè)備的初始化,建立內(nèi)存空間的映射圖,,將系統(tǒng)的軟硬件帶到一個合適的狀態(tài),,為操作系統(tǒng)內(nèi)核的運行做準備。
通常bootloader移植分為兩步:
第一步常用匯編語言實現(xiàn)依賴于CPU體系結(jié)構(gòu)的代碼,。主要包括硬件設(shè)備初始化,;為加載bootloader準備RAM空間;拷貝bootloader到RAM空間中,;設(shè)置好堆棧,。
第二步常用C語言來實現(xiàn)。即:初始化本階段要使用到的硬件設(shè)備,;檢測系統(tǒng)內(nèi)存映射(memory map);將kernel映像和根文件系統(tǒng)映像從flash上讀到ram空間中;為內(nèi)核設(shè)置啟動參數(shù),;調(diào)用內(nèi)核,。圖1所示是bootloader的工作流程圖。

2.4 內(nèi)核移植
內(nèi)核移植首先應(yīng)當啟動操作系統(tǒng),,完成內(nèi)存管理,、任務(wù)調(diào)度、進程管理,、加載驅(qū)動程序,、網(wǎng)絡(luò)等功能,然后執(zhí)行應(yīng)用程序或等待用戶命令,。雖然各功能之間存在復(fù)雜的調(diào)度關(guān)系,,但由于Linux分層結(jié)構(gòu)的特點,,已將其中硬件相關(guān)的代碼獨立了出來,,因此,移植過程中只需要改動進程管理,、內(nèi)存管理和設(shè)備管理中與硬件相關(guān)的那部分代碼。
一般情況下,從官方網(wǎng)站上下載的內(nèi)核不能直接在硬件平臺上運行,,而要跟據(jù)具體的硬件平臺重新裁剪,、編譯內(nèi)核,,并根據(jù)硬件平臺特性編寫相應(yīng)的硬件相關(guān)的代碼,,將Linux移植到硬件平臺,。對內(nèi)核代碼的修改包括以下部分:
(1)修改內(nèi)核目錄樹根下的Makefile,,找到ARCH和CROSS_COMPILE,,修改ARCH=arm,CROSS_COMPILE=armlinux,,然后設(shè)置PATH環(huán)境變量,,在文件bashrc中添加expor PATH=/usr/local/arm/3.4.4/bin:$PATH,,使其可以找到交叉編譯工具鏈,,然后重新登陸,。
(2)設(shè)置flash分區(qū),修改arch/arm/machSBC2410/devs.c用以指明分區(qū)信息,,該文件的內(nèi)容建立nand flash分區(qū)表;修改arch/arm /machSBC2410/machsmdk2410.c文件指定啟動時初始化,并在kernel啟動時依據(jù)對分區(qū)的設(shè)置進行初始配置。在Linux源文件目錄下,,執(zhí)行makemenuconfig命令,,配置內(nèi)核產(chǎn)生config文件,選擇處理器類型為SBC2410,,選擇串口驅(qū)動設(shè)備,,完成后保存config文件,。
在完成內(nèi)核的裁減之后,,執(zhí)行命令make clean,編譯內(nèi)核之前先把環(huán)境給清理干凈,,也可以用makerealclean或makemrproper來徹底清除相關(guān)依賴,,保證沒有不正確的文件存在,,最后將zimage下載到開發(fā)板,。
3 結(jié)語
經(jīng)過移植,Uboot和Linux在SBC2410平臺就能運行,,在此基礎(chǔ)上,還可以進一步開發(fā)各類驅(qū)動程序及應(yīng)用軟件,。用串口線將SBC2410和PC機相連,,通過超級終端可以看到移植成功。系統(tǒng)成功啟動后,,就可以進入根文件系統(tǒng),。本文通過分析Linux的特點和移植方法,總結(jié)出了一種基于ARM的Linux系統(tǒng)移植的方法,,并實現(xiàn)了Linux系統(tǒng)內(nèi)核在SBC2410處理器平臺上的移植,。
此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。