《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > Linux內(nèi)核在S3C2410上移植的研究
Linux內(nèi)核在S3C2410上移植的研究
山西電子技術(shù)
荀艷麗
摘要: 以研究將Linux內(nèi)核移植到嵌入式系統(tǒng)的技術(shù)為目的,描述了Linux-2.4.18.-rm7-pxal移植到S3C2410處理器目標板上的方法,。詳細介紹了Linux內(nèi)核移植方法與步驟,,并說明了如何搭建移植環(huán)境。結(jié)果表明,,該方法簡單實用,,達到了預(yù)定目標。
Abstract:
Key words :

嵌入式系統(tǒng)就是以應(yīng)用為中心,,以計算機技術(shù)為基礎(chǔ)的軟,、硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能,、可靠性,、成本、體積,、功耗等嚴格要求的專用計算機系統(tǒng),。Linux操作系統(tǒng)是一種性能優(yōu)良、源碼公開且被廣泛應(yīng)用的免費操作系統(tǒng),,由于其體積小,,可裁減,運行速度高等優(yōu)點,,因此可以作為研究嵌入式操作系統(tǒng)和非實時操作系統(tǒng)的典范,。EL-ARM-830+型教學實驗系統(tǒng)是一種綜合的教學實驗系統(tǒng),該系統(tǒng)采用了ARM92 0T核,32位微處理器,,實現(xiàn)了多模塊的應(yīng)用實驗,。在實驗板上有豐富的外圍擴展資源,可以完成ARM的基礎(chǔ)實驗,、算法實驗和數(shù)據(jù)通信實驗,、以太網(wǎng)實驗。

1 Linux的實驗環(huán)境搭建
1.1 Redhat9.0操作系統(tǒng)的安裝
安裝Redhat9.0前,,先把串口配置好,,這是建立Linux系統(tǒng)和試驗箱之間的串口通信。配置完以后在啟動Linux系統(tǒng)時點擊全屏,,這樣做的目的是讓Linux系統(tǒng)占取網(wǎng)絡(luò)資源,。點擊VM→setting在彈出的窗口點擊左下角的Add按鈕,此時選擇serial Port,,依次點擊“下一步”,,直到配置完串口。
1.2 配置NFS網(wǎng)絡(luò)文件系統(tǒng)
首先在Linux主機的終端上執(zhí)行setup,,彈出菜單界面后,,選中Firewall configuration,回車,,進入系統(tǒng)服務(wù)選項菜單,,選擇no firew all關(guān)閉防火墻(如果安裝了防火墻),按空格鍵就會選中,,然后退出。但是,,setup里面會照樣顯示防火墻設(shè)置是high的,,這個可以不必理會。之后選中System services,,回車,,進入系統(tǒng)服務(wù)選項菜單,在其中選中[*]nfs,,然后按F12鍵退出,,再選擇方向鍵,退出setup界面,,返回到命令提示符下,。利用編輯器打開/etc/exports文件(輸入命令vi/etc/exports),按A進入文本輸入模式,,將這個默認的空文件修改為只有如下一行內(nèi)容:
/(rw)
/home/nfs
然后,,保存退出(按ESC鍵進入命令模式,輸入:進入到最后行模式,輸入wq!保存退出),,之后改變目錄到/etc/rc.d/init.d/下(輸入命令cd/etc/rc.d/init.d/),,執(zhí)行如下命令:
./nfs start
終端內(nèi)輸出:
Starting NFS services:[確定]
Starting NFS quotas:[確定]
Starting NFS daemon:[確定]
Starting NFS mountd:[確定]
(1)安裝交叉編譯器。打開Linux系統(tǒng)下的終端,,在里面輸入命令cd/linuette/RPMS/改變目錄到/linuette/RPMS下,,輸入如下命令:
#rpm-UVh*.rpm
等待系統(tǒng)安裝,如果所有的RPMS內(nèi)的文件全部正確安裝,,將會在根目錄下的/opt文件夾內(nèi)生成一個host文件夾,,交叉編譯庫就在該目錄下,到此交叉編譯環(huán)境就搭建好了,。
(2)用交叉網(wǎng)線連接主機和實驗系統(tǒng),。在Linux的開始菜單里啟動終端,在終端[root@localhost root]#minicom-s回車,,按S鍵選擇Seri al Port setup回車,,彈出串行口設(shè)置界面,按A鍵編輯Serial Device:/dev/ttys0回車,;按E鍵,,再按I鍵,回車,,選擇為Bps/Par/Bit s:115200 8N1回車,;按F鍵,選擇Hardware Flow Control:No,。設(shè)置完后回車,,然后用上下選擇鍵,選中Modem and dialing,,將Initstri ng,,Reset string,Hang-up string設(shè)置為空,,再選中Save setup as df1這一項,,回車,保存為默認的配置,,下次進入minicom時就不用再設(shè)置了,。用上下選擇鍵選中Exit回車退出設(shè)置,進入minicom,。
(3)Linux系統(tǒng)下網(wǎng)絡(luò)設(shè)置,。點擊左下角的小紅帽,選擇系統(tǒng)設(shè)置一網(wǎng)絡(luò),,然后雙擊設(shè)備eth0的藍色區(qū)域,,進入以太網(wǎng)設(shè)置界面,,在靜態(tài)設(shè)置IP地址欄下面輸入與宿主機一個網(wǎng)段的IP地址、網(wǎng)關(guān)及子網(wǎng)掩碼,,確定后激活網(wǎng)絡(luò)設(shè)備,。
(4)Ping通主機和實驗系統(tǒng)。在minicom下,,給系統(tǒng)上電,,系統(tǒng)正常起來后,利用ifconfig eth0 xxx.xxx.xxx.xxx來改變實驗系統(tǒng)的IP地址,,讓該地址的前三段和主機的前三段一致,,最后的一段,可以選擇與主機不重復的小于255的任意值,。利用mount命令,,掛載主機的nfs系統(tǒng)下的共享目錄。
利用命令chmod 777/home/nfs改變/home/nfs文件夾的屬性,,讓其變?yōu)榭勺x可寫,,輸入mount-onolock 192.168.0.1:/home/n fs/mnt/yaffs回車,即可完成把主機上的/home/nfs下的文件掛載到實驗系統(tǒng)的/mnt/yaffs目錄下,。

2 BootLoder引導程序的移植
在嵌入式系統(tǒng)中,,BootLoader的作用與PC機上的BIOS類似,通過.BootlLoader可以完成對系統(tǒng)板上的主要部件如CPU,,SDRAM,,F(xiàn)LASH、串行口等進行初始化,,也可以下載文件到系統(tǒng)板上,,對FLASH進行擦除與編程。當運行操作系統(tǒng)時,,它會在操作系統(tǒng)內(nèi)核運行之前運行,,通過它,可以分配內(nèi)存空間的映射,,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)準備好正確的環(huán)境,。因此,,正確建立Linux移植的前提條件是具備一個與Linux配套、易于使用的Boot Loader,,它能夠正確完成硬件系統(tǒng)的初始化和Linux的引導,。
系統(tǒng)使用的BootLoader是VIVI。VIVI是CPU加電后運行的第一段程序,,其基本功能是初始化硬件設(shè)備,,建立內(nèi)存空問的映射圖,從而為調(diào)用嵌入式Linux內(nèi)核做好準備。為能夠?qū)崿F(xiàn)正確引導Linux系統(tǒng)的運行,,以及當編譯完內(nèi)核后,,快速下載內(nèi)核和文件系統(tǒng),VIVI首先通過串口下載內(nèi)核和文件系統(tǒng),,當系統(tǒng)正常運行起來后,,網(wǎng)絡(luò)驅(qū)動正常運行后,VIVI就通過網(wǎng)口下載內(nèi)核和文件系統(tǒng),。同時,,它也具有功能較為完善的命令集,對系統(tǒng)的軟硬件資源進行合理的配置與管理,。

當上電或復位后,,VIVI啟動,位于NANDFLASH中的前4 KB程序便從NANDFLASH中由S3C2410自動拷貝到一個叫SteppingStone的4 KB的內(nèi)部RAM中,,該RAM之后被映射到地址0x00處,。此時,也就是VIVI前4 KB代碼開始運行,,進行第一階段的硬件初始化,,主要工作為:關(guān)Watchdog Timer,關(guān)中斷,,初始化PLL和時鐘主頻設(shè)定,,初始化存儲器控制器。VIVI初始化的主要內(nèi)容:
VIVI初始化階段一(在/arch/s3C2410/head.s文件內(nèi)):
硬件初始化
配置串口
復制自身到SDRAM中(跳轉(zhuǎn)到C代碼入口函數(shù))
VIVI初始化階段二(在/init/main.c文件內(nèi)):
對硬件系統(tǒng)繼續(xù)初始化
內(nèi)存映射初始化,、內(nèi)存管理單元MMU初始化
初始化堆
初始化mtd設(shè)備
初始化私有數(shù)據(jù)
初始化內(nèi)置命令
啟動VIVI

3 Linux內(nèi)核的移植
3.1 內(nèi)核移植
實驗系統(tǒng)運行的Linux版本是針對2.4.18進行移植的Linux-2.4.18.-rm7-pxal版本,。本實驗是把該移植好的內(nèi)核,讓它如何在自己的硬件系統(tǒng)上正常的運轉(zhuǎn)起來,。
Linux內(nèi)核主要由5個子系統(tǒng)組成:進程調(diào)度子系統(tǒng),、進程間通信子系統(tǒng)、內(nèi)存管理子系統(tǒng),、虛擬文件系統(tǒng)子系統(tǒng),、網(wǎng)絡(luò)接口子系統(tǒng)。
(1)設(shè)置目標平臺和指定交叉編譯器:在最上層的根目錄/Makefile文件中,,首先要指定所移植的硬件平臺,,以及所使用的交叉編譯器。改為如下:
ARCH:=arm
CROSS_COMPILE=/opt/host/armv41/bin/armv41-unknown-Linux-
也就是說,,所移植的硬件平臺是ARM,,所使用的交叉編譯器是存放在目錄/opt/host/armv41/bin/下的armv41-unknown-Linux-xxx等工具。
(2)arch/arm目錄下Makefile修改,。系統(tǒng)的啟動代碼是通過這個文件產(chǎn)生的,。在Linux-2.4.18內(nèi)核中要添加如下代碼:
ifeq(MYM(CONFIG_ARCH_S3C2410),,y)
TEXTADDR =0 xC0008000
MACHINE =s3c2410
endif
這里TEXTADDR確定內(nèi)核開始運行的虛擬地址。
(3)arch/arm目錄下config.in修改,。配置文件config.in能夠配置運行“make menuconfig”命令時的菜單選項,,由于2.4.18內(nèi)核中沒有S3C2410的相關(guān)信息,所以要在該文件中進行有效的配置,。
(4)arch/arm/boot目錄下Makefile修改,。編譯出來的內(nèi)核存放在該目錄下,這里指定內(nèi)核解壓到實際硬件系統(tǒng)上的物理地址,。要根據(jù)實際的硬件系統(tǒng)修改解壓后,,內(nèi)核開始運行實際的物理地址。
(5)arch/arm/boot/compressed目錄下Makefile修改,。該文件從vmLinux中創(chuàng)建一個壓縮的vmlinuz鏡像文件,。該文件中用到的SYSTE M,ZTEXTADDR,,ZBSSADDR和ZRELADDR是從arch/arm/boot/Makefile文件中得到的,。添加如下代碼:
ifeq(MYM(CONFIG_ARCH_S3C2410),y)
OBJS+=head-s3c2410.o
Endif
(6)arch/arm/boot/compressed目錄下添加head-s3c2410.s,。該文件主要用來初始化處理器,。
(7)arch/arm/def-configs目錄下添加配置好的S3C2410的配置文件。
(8)arch/arm/kernel目錄下Makefile修改,。該文件主要用來確定文件類型的依賴關(guān)系,。
(9)arch/arm/kernel目錄下的文件debug-armv.s修改。在該文件中添加如下代碼,,目的是關(guān)閉外圍設(shè)備的時鐘,,以保證系統(tǒng)正常運行。
(10)arch/arm/kernel目錄下的文件entry-armv.s修改,,CPU初始化時處理中斷的匯編代碼,。
(11)arch/arm/ram目錄下的相關(guān)文件。那里面則是移植好的有關(guān)arm的內(nèi)存管理代碼,。
(12)arch/arm/mach-s3c2410目錄下的相關(guān)文件,。
那里面則是針對s3c2410這款處理器編寫的所需代碼。
3.2 制作cramfs文件系統(tǒng)
利用工具軟件MKCRAMFS制作cramfs文件系統(tǒng),,MKCRAMFS工具在/實驗軟件/tools/目錄下,,該文件系統(tǒng)是一個只讀壓縮的文件系統(tǒng),文件系統(tǒng)類型可以是ext2,,ext3等。這里提供的一個系統(tǒng)目錄是root_tech,,它里面包含將來要用到的所有文件,,它在/實驗軟件/source_ code/的目錄內(nèi),,為root.tar.bz2。把制作工具和root_tech放在同一個文件夾下并對root.tar.bz2進行解壓,,在終端下切換到那個文件夾目錄下使用命令MKCRAMFS root_tech rootfs.cramfs,,就可把root_tech制作成文件名為rootfs.cramfs的只讀的壓縮的cramfs文件系統(tǒng)了。系統(tǒng)啟動后,,內(nèi)核將把它加載到內(nèi)存中,,解壓。

4 結(jié)語
本文針對一個特定的目標平臺,,提供了構(gòu)建一個基本嵌入式Linux系統(tǒng)的過程與方法,。對Linux 2.4內(nèi)核版本進行裁減、移植,,編譯生成的內(nèi)核在S3C2410處理器的目標板上成功運行,,且保留了Linux原有的工作穩(wěn)定的特點。將Linux操作系統(tǒng)移植于嵌入式系統(tǒng)中作為嵌入式系統(tǒng)的底層研發(fā)平臺是一個復雜的問題,,移植后系統(tǒng)的實時性,、穩(wěn)定性、安全性和精簡程度等方面問題還需要在以后的設(shè)計中進一步研究,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。