ARM的uClinux的設計與應用
1 嵌入式操作系統uClinux及其應用開(kāi)發(fā)
嵌入式軟件平臺由以下部分組成:系統引導程序、嵌入式操作系統內核、文件系統。系統引導程序通常也稱(chēng)為BootLoad—er ,代碼量雖少,但是作用非常大,相當于PC上的BOIS,負責將操作系統內核固化到Flash中和系統初始化工作。然后將系統控制權交給操作系統。文件系統是嵌入式軟件平臺占用存儲量最大的一部分,也是與用戶(hù)開(kāi)發(fā)最相關(guān)的一部分,它存儲了系統配置文件、系統程序、用戶(hù)應用程序和必需的驅動(dòng)程序。
近些年我們在嵌入式系統及其應用的科研工作中采用了信息產(chǎn)業(yè)中的最新技術(shù),打破了學(xué)科之間的界限,感到控制的出路原來(lái)很多,盡管處處是挑戰。過(guò)去我們熟悉的“控制”有很大的局限性。:一是不考慮硬件的限制, 二是不考慮控制器的復雜性及計算能力,三是不注重實(shí)用性和效益。在微處理器,微傳感器和微型執行元件不斷推出新產(chǎn)品的形勢下,控制的思路與手段正經(jīng)歷著(zhù)巨大的變化。在經(jīng)過(guò)一番艱苦的實(shí)踐摸索之后,我們對控制學(xué)科的研究和教學(xué)有了一些新的認識。本教材就是在我們這些年科研工作的基礎上總結出來(lái)的,它還比較粗糙,還需要今后花大力氣把它完善與提高。
1.1 BootLoader程序
BootLoader就是在操作系統內核運行之前運行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設備、建立內存空間映射圖,從而將系統的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調用操作系統內核準備好正確的環(huán)境。在嵌入式系統中,通常并沒(méi)有像BIOS那樣的固件程序(注,有的嵌入式CPU也會(huì )內嵌一段短小的啟動(dòng)程序),因此整個(gè)系統的加載啟動(dòng)任務(wù)就完全由BootLoader來(lái)完成。比如在一個(gè)基于ARM7TDMI core的嵌入式系統中,系統在上電或復位時(shí)通常都從地址0x00000000處開(kāi)始執行,而在這個(gè)地址處安排的通常就是系統的BootLoader程序。
系統引導程序BootLoader是嵌入式系統加電后執行的第一個(gè)程序,一般應寫(xiě)入Flash存儲器中并從起始物理地址0x0開(kāi)始。在應用實(shí)際中BootLoader的功能主要有:① 將uCLinux內核和文件系統燒寫(xiě)到目標板中;②系統初始化;③系統的內存映射;④加載uClinux內核
引導加載程序是系統加電后運行的第一段軟件代碼。PC機中的引導加載程序由BIOS(其本質(zhì)就是一段固件程序)和位于硬盤(pán)MBR中的OS BootLoader(比如,LILO和GRUB等)一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤(pán)MBR中的BootLoader讀到系統的RAM中,然后將控制權交給OS BootLoader。BootLoader的主要運行任務(wù)就是將內核映象從硬盤(pán)上讀到 RAM 中,然后跳轉到內核的入口點(diǎn)去運行,也即開(kāi)始啟動(dòng)操作系統。
通常,BootLoader是嚴重地依賴(lài)于硬件而實(shí)現的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個(gè)通用的BootLoader幾乎是不可能的。盡管如此,我們仍然可以對BootLoader歸納出一些通用的概念來(lái),以指導用戶(hù)特定的BootLoader設計與實(shí)現。
1.2 嵌入式操作系統uCiinux
uClinux就是Micro—Control—Linux,是針對控制領(lǐng)域的嵌入式linux操作系統,它是從Linux 2.0/2.4內核派生而來(lái),沿襲了主流Linux的絕大部分特性,適合不具備內存管理單元(MMU)的微處理器/微控制器(例如ARM7TDMI),它也是一個(gè)完全符合GNU/GPL公約的操作系統,完全開(kāi)放代碼。和主流的Linux相比,uClinux有以下特點(diǎn):① 簡(jiǎn)化了內核加載方式,uClinux的內核可以在Flash上直接運行;② 采用romfs文件系統作為root文件系統,相對于一般的ext2使用更少的存儲空間;③ 使用了Flat可執行文件格式替代elf格式;④ 使用應用程序庫uClibc替代libc。
1.3 uClinux的編譯與移植
I-3.1 uClinux系統針對硬件的改動(dòng)
uclinux表示micro-control linux.即“微控制器領(lǐng)域中的Linux系統”,是Lineo公司的主打產(chǎn)品,同時(shí)也是開(kāi)放源碼的嵌入式Linux的典范之作。uCLinux主要是針對目標處理器沒(méi)有存儲管理單元MMU(Memory Management Unit)的嵌入式系統而設計的。它已經(jīng)被成功地移植到了很多平臺上。由于沒(méi)有MMU,其多任務(wù)的實(shí)現需要一定技巧。
目前。uClinux已被成功移植到多款微處理器芯片上。但由于嵌入式操作系統的運行是與嵌入式系統的硬件密切相關(guān)的。而硬件的設計則會(huì )因為使用場(chǎng)合的不同而千差萬(wàn)別,因此,在uClinux內核源代碼中和硬件緊密相關(guān)的部分就應該針對特定的硬件作出適當的修改。
本文中所涉及的對uClinux操作系統源代碼的裁剪修改主要有以下幾個(gè)地方:
uClinux內核源代碼中對S3C4510B片內特殊功能寄存器以及其他相關(guān)硬件信息的定義文件hardware.h首先要定義系統工作的主時(shí)鐘頻率,本系統的為50MHz。
?。?*******************************/
define$3C4510b CPU master clock
?。?*******************************/
#define MHz l0o0000
#define fMCLK_ MHz (50 MHz)
#define fMCLK (fMCLK_MHz/MHz)
#define MCLK2 (fMCLK_MHz/21
此外對系統SYSCFG寄存器也進(jìn)行了相關(guān)的設置。如Cache操作使能、寫(xiě)緩沖使能以及設置了特殊功能寄存器組的基指針等。最后即定義系統存儲器控制寄存器。
1.3.2 編譯uClinux內核
在準備好uClinux的內核源代碼后。利用交叉編譯器就可以編譯生成運行在硬件目標板上的uClinux內核。首先將U—Clinux內核源代~uClinux—Samsung一20031005.tar.gz保存到宿主機的用戶(hù)目錄,解壓完畢后。就會(huì )在用戶(hù)目錄下生成uClinux—Samsung目錄。
以下是編譯uClinux的具體過(guò)程:
使用make menuconfig或者make xconfig命令進(jìn)行內核配置:
輸人命令:make dep
輸入命令:make clean:
輸入命令:make lib_only:
輸入命令:make romfs:
輸入命令:make image:
輸入命令:make。
評論