新聞中心

EEPW首頁 > 消費電子 > 設(shè)計應(yīng)用 > 基于μClinux的嵌入式應(yīng)用程序的開發(fā)

基于μClinux的嵌入式應(yīng)用程序的開發(fā)

——
作者: 時間:2007-09-18 來源:電子技術(shù) 收藏

范同非常廣泛,從簡單的系統(tǒng)到主頻高達(dá)幾百兆的使用的非計算機系統(tǒng),都可以稱為。隨著各行業(yè)電子系統(tǒng)應(yīng)用要求的提高,也越來越復(fù)雜,硬件要求速度快、集成度高、外部接口多,軟件則要求功能豐富、模塊化、易于擴展。ARM能夠很好滿足復(fù)雜嵌入式系統(tǒng)的要求,因此ARM芯片成為當(dāng)前嵌入式應(yīng)用最重要的硬件平臺。嵌入式硬件平臺性能的提高,使嵌入式的使用成為必然。

1 嵌入式系統(tǒng)與

基于ARM的嵌入式系統(tǒng)是當(dāng)前最典型的嵌入式系統(tǒng)。嵌入式系統(tǒng)框圖如圖1所示。系統(tǒng)的硬件主要部件是ARM7系列的S3C44B0X處理器。當(dāng)系統(tǒng)中需要使用各種各樣的外圍設(shè)備時,開發(fā)的難度相當(dāng)大,使用可以提高升發(fā)的效率。因此,嵌入式操作系統(tǒng)是嵌入式系統(tǒng)極為重要的組成部分。它具有通用操作系統(tǒng)的基小特點,而又增加了實時高效性、硬件依賴性、應(yīng)用專一性等新特點。常見的嵌入式操作系統(tǒng)有:VxWorks、uC/OS-II、Windows CE、等。操作系統(tǒng)是一種性能優(yōu)良、源碼公開且被廣泛應(yīng)用的免費嵌入式操作系統(tǒng),因此很多無MMU單元的嵌入式系統(tǒng)都使用μClinux作為操作系統(tǒng)。


 
μClinux是針對控制領(lǐng)域的嵌入式Linux操作系統(tǒng),它從Linux 2.0/2.4內(nèi)核派生而來,而又針對沒有MMU的處理器進(jìn)行設(shè)計,因此有著特別小的內(nèi)核和用戶軟件空間,而且所有程序訪問的地址都是實際的物理地址。操作系統(tǒng)對內(nèi)存空間沒有保護(hù),各個進(jìn)程實際上共享一個運行空間。

2 μClinux的移植

μClinux是依賴于硬件系統(tǒng)的,與PC上運行的Linux系統(tǒng)有較大的區(qū)別。因此在ARM系統(tǒng)中使用μClinux時,需要對內(nèi)核進(jìn)行裁剪,再添加一些需要的驅(qū)動程序,才能在不同的嵌入式碰件系統(tǒng)中運行。μClinux操作系統(tǒng)一般都是先在安裝Linux的計算機上編譯調(diào)試,然后再下載到目標(biāo)系統(tǒng)板上運行,這一過程就是μClinux的移植。

2.1 Bootloader的設(shè)計

Bootloader就是在操作系統(tǒng)內(nèi)核運行之前運行的一段程序。嵌入式系統(tǒng)的Bootloader程序燒錄在系統(tǒng)地址的0x0處,即每次上電后先運行Bootloader,完成硬件系統(tǒng)的初始化、建立內(nèi)存空間的映射圖和μClinux的引導(dǎo)工作。完整的Bootloader引導(dǎo)流程描述如圖2所示。

由上圖可以看出,Bootloader的主要任務(wù)對時鐘、中斷、I/O等芯片資源進(jìn)行初始化,為μClinux的運行做好準(zhǔn)備。

2.2 μClinux移植的方法

2.2.1 建立交叉編譯環(huán)境

首先從網(wǎng)上下載GNU開發(fā)軟件包arm-elf-tools-20030312.sh,然后到源碼目錄下執(zhí)行sh arm-elf-tools-20030312.sh,這樣在PC上建立了ARM體系結(jié)構(gòu)的編譯器、連接器、調(diào)試器,可以用來編譯OS內(nèi)核,制作文件系統(tǒng)等。

2.2.2 在Windows下安裝ADS工具

ADS是ARM公司推出的新一代ARM集成開發(fā)工具。在硬件開發(fā)板完成后,可用ADS各硬件模塊進(jìn)行測試。


 
2.2.3 編譯μClinux

把代碼解壓縮到工作目錄下,運行tar xjvfμClinux-dist-51EDA.tar.bz2, 它會把全部的文件解壓縮到home/μClinux-dist的目錄下。然后進(jìn)入目錄運行menuconfig,對μClinux進(jìn)行配置,訂制自己的系統(tǒng)。

注意對于編譯uClinux,不能簡單地通過make來實現(xiàn)。為了編譯最后得到的鏡像文件,我們需要linux的內(nèi)核以及romfs。對于我們的S3C44B0X的移植來說,romfs是被編譯到內(nèi)核里面去的。因此,在編譯內(nèi)核前需要一個romfs。為了得到romfs的image,我們又需要編譯用戶的應(yīng)用程序。而為了編譯用戶的應(yīng)用程序,我們又需要編譯C運行庫,這里我們用的C運行庫是uClibc。根據(jù)上面的分析,我們使用以下步驟編譯μClinux。

(1) make dep:建立文件之間的依賴關(guān)系,make會根據(jù)這個依賴關(guān)系來確定哪些義件需要重新編譯、哪些文件可以跳過。

(2) make lib only:編譯uClibc。

(3) make user only:編譯用戶的應(yīng)用程序,包括初始化進(jìn)程init,和用戶交互的bash。

(4) make romfs:它會在μClinux的目錄下生成一個romfs目錄并且把user目錄下的文件、以及vendors目錄下特定系統(tǒng)所需要的文件組織起來,以便下面生成romfs的單個鏡像所用。

(5) make image:是生成romfs的鏡像文件和生成Linux的鏡像。

(6) make linux:用上面make image生成的romfs.o文件編譯Linux內(nèi)核。

(7) make image:執(zhí)行了這一步之后,就會在images目錄下找到3個文件:image.ram,image.rom,romfs.img。其中,image.ram和image.rom就是我們需要的鏡像文件。

2.2.4 加載μClinux內(nèi)核

μClinux內(nèi)核可以加載到Flash運行,也可以加載到RAM中運行。image.ram是直接下載到RAM執(zhí)行的文件,加載到SDRAM后,修改PC指針寄存器的值指向image.ram的下載地址就可以執(zhí)行。對于image.rom,它是一個zlmage文件,也就是自解壓的內(nèi)核。由于它使用了gzip將內(nèi)核壓縮過,所以可以減小文件的大小。這個image應(yīng)該燒寫到FLASH,向不能直接下載到RAM并執(zhí)行。

3 μClinux應(yīng)用程序的開發(fā)

要開發(fā)基于μClinux的應(yīng)用程序,首先需要在PC上建立交叉編譯環(huán)境,編寫、調(diào)試應(yīng)用程序,測試通過后,再重新編譯μClinux內(nèi)核映像,下載到目標(biāo)板運行測試。具體步驟如下(在PC的Linux環(huán)境下進(jìn)行)。

(1) 在μClinux的user目錄下創(chuàng)建新目錄user/sample,用來存放應(yīng)用程序源代碼。編寫應(yīng)用程序"MyApp.c"文件。

(2) 編輯文件user/Makefile,在Makefile文件中按照字母順序增加以下內(nèi)容:dir_$(CONFIG_USER_SAMPLE_MYAPP)+=sample。

(3) 編輯文件config/Configure.help,增加下行:CONFIG USER SAMPLE MYAPP

注意:第2行以2個空格開頭,總長度小于70個字符。

(4) 編輯文件config/config.in,在'Games'后添加新的部分:


 

(5) 在user/sample目錄下創(chuàng)建應(yīng)用程序的Makefile文件。
 
 
(6) 重新編譯生成image.rom。注意在運行makeconfig或make menuconfig時選擇生成的應(yīng)用程序"MyApp"。Makefile文件中修改如下:
(7) 重新運行編譯μClinux內(nèi)核的步驟,把生成的image.ram或image.rom文件燒寫到目標(biāo)板,然后運行μClinux,操作系統(tǒng)啟動后,運行應(yīng)用程序MyApp,測試應(yīng)用程序的功能實現(xiàn)。

使用μClinux開發(fā)嵌入式應(yīng)用程序,可以提高嵌入式系統(tǒng)開發(fā)的效率,而且易于擴展和移植,是嵌入式研發(fā)人員很好的選擇。



評論


相關(guān)推薦

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

關(guān)閉