摘 要:Linux是一種支持多種體系結(jié)構(gòu)處理器的操作系統(tǒng),其有很強(qiáng)的移植性。描述將μClinux移植到基于BF533處理器目標(biāo)板上的方法與過(guò)程。首先介紹BF533處理器和μClinux,并簡(jiǎn)單說(shuō)明如何搭建移植環(huán)境,然后著重討論在該目標(biāo)板上U-Boot的設(shè)計(jì)實(shí)現(xiàn)以及μClinux內(nèi)核的移植方法,最后對(duì)在這種基于μClinux的嵌入式系統(tǒng)環(huán)境下開(kāi)發(fā)應(yīng)用程序做了簡(jiǎn)單說(shuō)明。對(duì)將μClinux移植到其他處理器為核心的硬件平臺(tái)有一定的借鑒作用。
關(guān)鍵詞:嵌入式系統(tǒng);移植方法;μClinux;ADSP-BF533;U-Boot
Transplanting and Development of μClinux Embedded System Based on ADSP-BF533
WU Chuan,WANG Bin
(Information Engineering Institute,PLA Information Engineering University,hengzhou,450002,China
Abstract:Linux supports various architecture and is an operation system which is easy to be ported.The technique of transplanting μClinux to one board based on ADSP-BF533 processor is introduced in this paper.ADSP-BF533 and μClinux are introduced at first,and an explanation of building porting environment is given.All the work consists of the design and implementation of U-Boot,the transplanting method of μClinux kerne1.At last,the development of application programme based On μClinux embedded system is explained.It has some impact on transplanting μClinux to the hardware platform which kernel is processor.
eywords:embedded system;transplanting method;μClinux;ADSP-BF533;U-Boot
Blackfin處理器是基于由美國(guó)模擬器件公司(ADI和Intel公司聯(lián)合開(kāi)發(fā)的微信號(hào)架構(gòu)(MSA的首款第4代DSP產(chǎn)品,它是ADI公司16位產(chǎn)品的一個(gè)大系列。這一新產(chǎn)品是專為通信和互聯(lián)網(wǎng)應(yīng)用而設(shè)計(jì)的通用DSP芯片,適合處理廣泛用于互聯(lián)網(wǎng)中的大量圖像、聲音、文本和數(shù)據(jù)流,也可應(yīng)用于汽車電子可視系統(tǒng)、寬帶無(wú)線系統(tǒng)、消費(fèi)類多媒體電子、數(shù)字?jǐn)z像機(jī)、多通道VoIP、安全和監(jiān)督、機(jī)頂盒和視頻電話會(huì)議等方面。本文所用到的ADSP-BF533是Blackfin系列處理器的典型代表。
1 μClinux簡(jiǎn)介
μClinux從Linux 2.0/2.4內(nèi)核派生而來(lái),沿襲主流Linux的絕大部分特性。它是專門針對(duì)沒(méi)有MMU的CPU,并且為嵌入式系統(tǒng)做了許多小型化的工作。適用于沒(méi)有虛擬內(nèi)存或內(nèi)存管理單元(MMU的處理器。由于μClinux在標(biāo)準(zhǔn)的Linux基礎(chǔ)上進(jìn)行了適當(dāng)?shù)牟眉艉蛢?yōu)化,形成了一個(gè)高度優(yōu)化的、代碼緊湊的嵌入式Linux。雖然它的體積很小,但μClinux仍然保留了Linux的大多數(shù)的優(yōu)點(diǎn):穩(wěn)定、良好的移植性、優(yōu)秀的網(wǎng)絡(luò)功能、完備的對(duì)各種文件系統(tǒng)的支持、以及標(biāo)準(zhǔn)豐富的API等。
μClinux的主要特點(diǎn)如下:
(1 內(nèi)存管理
這部分是μClinux與傳統(tǒng)Linux區(qū)別最大的地方。對(duì)于μC1inux來(lái)說(shuō),其設(shè)計(jì)針對(duì)沒(méi)有MMU的處理器,即μC1inux不能使用處理器的虛擬內(nèi)存管理技術(shù),μClinux仍然采用存儲(chǔ)器的分頁(yè)管理。系統(tǒng)在啟動(dòng)時(shí)把實(shí)際存儲(chǔ)器進(jìn)行分頁(yè),在加載應(yīng)用程序時(shí)程序分頁(yè)加載,但是由于沒(méi)有MMU管理,因此實(shí)際上μClinux采用實(shí)存儲(chǔ)器管理策略。這一點(diǎn)影響了系統(tǒng)工作的很多方面。
(2 μClinux的內(nèi)核加載方式
μClinux的內(nèi)核有2種可選的運(yùn)行方式:可以在FLASH上直接運(yùn)行,也可以加載到內(nèi)存中運(yùn)行。由于RAM的存取速率要比FLASH高,因此后者可以減少內(nèi)存需要,運(yùn)行速度也更快。
(3 μClinux的文件系統(tǒng)
μClinux系統(tǒng)采用romfs文件系統(tǒng)。這種文件系統(tǒng)相對(duì)于一般的ext2文件系統(tǒng)要求更少的空間。這是由于內(nèi)核支持romfs文件系統(tǒng)比支持ext2文件系統(tǒng)需要更少的代碼,而且romfs文件系統(tǒng)相對(duì)簡(jiǎn)單建立文件系統(tǒng)超級(jí)塊(superblock需要的存儲(chǔ)空間更少。
(4 μClinux的應(yīng)用程序庫(kù)
μClinux小型化的另一個(gè)做法是重寫應(yīng)用程序庫(kù)。相對(duì)于越來(lái)越大且越來(lái)越全的庫(kù)glibc μClibc對(duì)libc做了精簡(jiǎn)。(5 可執(zhí)行文件格式
μClinux系統(tǒng)使用flat可執(zhí)行文件格式。另外,μClinux還提供通用的Linux API支持完整的TCP/IP協(xié)議堆棧和大量其他的網(wǎng)絡(luò)協(xié)議,支持包括NFSext2 ROMfs等多種文件系統(tǒng)。
2 建立μClinux開(kāi)發(fā)環(huán)境
嵌入式系統(tǒng)的開(kāi)發(fā)與一般的應(yīng)用開(kāi)發(fā)最大的差別在于,前者需要建立特殊的硬件環(huán)境,而后者一般基于特定的操
作系統(tǒng)或分布式平臺(tái)。后者的平臺(tái)已經(jīng)對(duì)硬件或網(wǎng)絡(luò)媒質(zhì)做了抽象,從而不需要由系統(tǒng)開(kāi)發(fā)者來(lái)完成這些工作。而在嵌入式系統(tǒng)開(kāi)發(fā)中,這也由開(kāi)發(fā)者完成。
嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境一般分成主機(jī)端(HOST和目標(biāo)板(TARGET兩個(gè)部分。主機(jī)端是開(kāi)發(fā)平臺(tái),用于運(yùn)行開(kāi)發(fā)過(guò)程中的各種工具(如Linux操作系統(tǒng)和ADI提供的集成開(kāi)發(fā)環(huán)境Visual DSP++等;目標(biāo)板是運(yùn)行和測(cè)試平臺(tái),是嵌入式系統(tǒng)的最終駐留環(huán)境。在主機(jī)端和目標(biāo)板之間需要通過(guò)某種方式進(jìn)行通信,如使用RS 232串口或網(wǎng)口。通信的目的在于發(fā)送控制指令和傳輸數(shù)據(jù),同時(shí)獲得反饋信息。圖1是系統(tǒng)移植工作的硬件環(huán)境。
目標(biāo)板的硬件平臺(tái)如圖1所示:
主機(jī)端的PC使用COM1和BF533的UART相連接,通過(guò)串口完成對(duì)目標(biāo)板的必要控制功能。本文設(shè)計(jì)的ADSP-BF533目標(biāo)板上配備有1塊SMSC LAN91C111以太網(wǎng)卡芯片和主機(jī)端建立原始(rawIP連接,使用鏈路層地址完成大批量數(shù)據(jù)的傳送。
在硬件環(huán)境建立之后,就需要?jiǎng)?chuàng)建軟件開(kāi)發(fā)環(huán)境。軟件環(huán)境主要是指Blackfin體系結(jié)構(gòu)的交叉編譯環(huán)境。建立交叉編譯環(huán)境首先要有交叉開(kāi)發(fā)工具。交叉編譯工具是指一組運(yùn)行在某一種處理器上,卻可以編譯出另一種處理器上執(zhí)行的指令的工具。它由一套用于編譯、匯編和鏈接內(nèi)核及應(yīng)用程序的組件組成,通過(guò)編譯可以使μClinux內(nèi)核和應(yīng)用程序在目標(biāo)設(shè)備上運(yùn)行。
編譯μClinux一般使用GNU開(kāi)發(fā)套件作為交叉編譯器工具鏈,它包括一系列的開(kāi)發(fā)和調(diào)試工具。在官方網(wǎng)站http://blackfin.μClinux.org上提供了Blackfin系列處理器內(nèi)核的交叉編譯工具。下載后按照說(shuō)明解壓到Linux系統(tǒng)的相應(yīng)文件夾里,并設(shè)置系統(tǒng)環(huán)境變量,使這些交叉編譯工具所在的目錄為全局環(huán)境變量。至此就建立好了μClinux的軟件開(kāi)發(fā)環(huán)境。
3 利用U-Boot引導(dǎo)內(nèi)核
U-Boot(Universal Boot Loader是當(dāng)前比較流行的遵循GPL條件的開(kāi)放源碼項(xiàng)目。也是是嵌入式Linux系統(tǒng)常用的Boot Loader之一。其完成的功能是初始化硬件設(shè)備、改變處理器運(yùn)行模式、重組中斷向量和建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件帶到一個(gè)合適的狀態(tài)或者用戶定制的特定狀態(tài),以便為最終加載操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
U-Boot具有源碼公開(kāi)的特點(diǎn),開(kāi)發(fā)人員可根據(jù)自身需要進(jìn)行裁減;支持多種處理器和嵌入式操作系統(tǒng)內(nèi)核;具有多種設(shè)備驅(qū)動(dòng)源碼:支持種引導(dǎo)方式;具有功能強(qiáng)大且成熟、穩(wěn)定等諸多優(yōu)點(diǎn),故本文采用U-Boot引導(dǎo)μClinux內(nèi)核。U-Boot嚴(yán)重依賴于底層硬件,不同的CPU或嵌入式板極設(shè)備需要不同的U-Boot,不過(guò)因?yàn)楸疚牡闹攸c(diǎn)是μClinux的移植,所以這里不再詳述U-Boot的具體實(shí)現(xiàn)過(guò)程。
當(dāng)系統(tǒng)上電后,U-Boot從地址OxO開(kāi)始執(zhí)行,將存儲(chǔ)器映射重新配置,如圖1所示,并會(huì)執(zhí)行μClinux的固化內(nèi)核。U-Boot可以使用ADI的仿真軟件Visual DSP++通過(guò)仿真器或JTAG口下載到目標(biāo)板上。
4 μClinux內(nèi)核的編譯和移植
作為操作系統(tǒng)的核心,μClinux內(nèi)核負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的各種性能。μClinux內(nèi)核采用模塊化的組織結(jié)構(gòu),通過(guò)增減內(nèi)核模塊的方式來(lái)增減系統(tǒng)的功能。
4.1 內(nèi)核配置
雖然μClinux的內(nèi)核代碼大部分獨(dú)立于處理器和其體系結(jié)構(gòu),但是最底層的代碼還是基于特定系統(tǒng)的。雖然各個(gè)系統(tǒng)存在相同之處,但是它們的中斷處理上下文、內(nèi)存映射的維護(hù)、任務(wù)上下文和初始化過(guò)程是獨(dú)特的。這些例行程序放置在μClinux代碼樹的arch/目錄下。這里需要根據(jù)自己的硬件平臺(tái)來(lái)配置內(nèi)核代碼。配置過(guò)程如下:
可以從官方網(wǎng)站http://blackfin.μClinux.org處下載μClinux-list的內(nèi)核源代碼。運(yùn)行解壓命令:將tar -xvf μClinux-dist.tar.gz解壓完畢后,就會(huì)生成/μClinux-dist目錄,加入該目錄后按如下順序編譯內(nèi)核:
(1 make menuconfig;進(jìn)入菜單方式配置指令;
(2 選擇所使用的平臺(tái)類型和所使用的庫(kù)
本文設(shè)計(jì)的目標(biāo)板選擇:AnalogDevices/BF533-EIT和μC-libc庫(kù)。在配置欄中,選擇Load an Alternate Configuration File,按確認(rèn),退出配置欄;
(3 make dep;尋找依存關(guān)系;
(4 make clean;清除以前構(gòu)造內(nèi)核時(shí)生成的所有目標(biāo)文件、模塊文件和一些臨時(shí)文件;
(5 make lib_only;編譯庫(kù)文件;
(6 make user_only;編譯用戶應(yīng)用程序文件;
(7 make romfs;生成romfs文件系統(tǒng);
(8 make image;生成鏡像文件然后通過(guò)Jtag口輸入到目標(biāo)板;
(9 make;通過(guò)各個(gè)目錄的makefile文件進(jìn)行,會(huì)在各目錄下生成一大堆目標(biāo)文件。
在上述步驟完成后,就完成了對(duì)μClinux源碼的編譯工作。最后會(huì)在/μClinux-dist/images目錄下看到3個(gè)內(nèi)核文件:linux.dxe,linux.bin和zImage.bin。如果編譯不成功,需要根據(jù)編譯過(guò)程的提示信息找到錯(cuò)誤并重新編譯,直到成功為止。
4.2 修改配置內(nèi)核代碼
直接由源代碼編譯生成的內(nèi)核映像文件一般不會(huì)啟動(dòng)成功,需要根據(jù)自己的目標(biāo)板進(jìn)行配置。需要修改系統(tǒng)啟動(dòng)初始化文件crt0_ram.s,sysinit.c和ram.ld。
在crt0_ram.s中需要根據(jù)自己的目標(biāo)板修改基地址、存儲(chǔ)器大小和起始地址。在sysinit.c中需要修改片選設(shè)置,分別對(duì)FLASH和SDRAM進(jìn)行片選設(shè)置。在ram.ld中修改內(nèi)核連接加載地址。做完上面的修改,重新編譯生成linux.dxe等文件。
4.3 μClinux內(nèi)核的下載與執(zhí)行
μClinux 內(nèi)核有2種可選的運(yùn)行方式:一種是在FLASH上直接運(yùn)行;另一種是加載到內(nèi)存中運(yùn)行,系統(tǒng)啟動(dòng)時(shí)從FLASH中讀取壓縮的內(nèi)核代碼(存儲(chǔ)器空間有限,所以一般需要壓縮內(nèi)核代碼到內(nèi)存中解壓,然后開(kāi)始執(zhí)行,這種方法比第一種的速度更快(RAM的存取速度比FLASH的快。所以選取第二種方法。
編譯好的內(nèi)核文件可以由Visual DSP++開(kāi)發(fā)裝置,通過(guò)網(wǎng)口或串口把linux.dxe下載到目標(biāo)板的FLASH中,從設(shè)定的入口地址(一般為0x1000執(zhí)行即可啟動(dòng)內(nèi)核。
啟動(dòng)μClinux就可以在超級(jí)終端看到μClinux的歡迎信息和簡(jiǎn)單的shell提示符,界面如圖3所示。
5 在μClinux下添加應(yīng)用程序
為了方便,μClinux用戶層的應(yīng)用程序代碼都放在/μClinux-dist/user/目錄下,否則要自己重新定義很多宏,而且容易出錯(cuò)。具體實(shí)現(xiàn)過(guò)程如下:
(1 在工作目錄的user目錄下創(chuàng)建應(yīng)用程序的文件夾user/app然后編寫應(yīng)用程序,編寫方法和普通的應(yīng)用程序一樣;
(2 在文件/user/Makefile里添加如下一句以便把用戶的應(yīng)用加入到μClinux系統(tǒng)的編譯列表中;
dir_MYM(CONFIG_USER_MYAPP+=app
(3 在/config/config.in里加入如下語(yǔ)句:
mainmenu_option next_comment
comment\"My New Application\"
bool‘myapp'CONFIG_USER_MYAPP
endmenu
這樣在編譯時(shí)會(huì)多1個(gè)配置選項(xiàng),當(dāng)選擇這一選項(xiàng)時(shí),字符串“CONFIG USER MYAPP”就會(huì)定義為“Y,參考上一個(gè)步驟,dir Y+=app,應(yīng)用會(huì)被編譯入內(nèi)核
(4 為便于內(nèi)核配置在/config/config.help中加入有關(guān)該應(yīng)用的幫助說(shuō)明;
(5 回到/μClinux-dist目錄,執(zhí)行make編譯μClinux系統(tǒng)內(nèi)核和這里的應(yīng)用程序。
6 結(jié) 語(yǔ)
對(duì)于嵌入式系統(tǒng)開(kāi)發(fā)人員來(lái)說(shuō),要將嵌入式操作系統(tǒng)應(yīng)用到嵌入式系統(tǒng)中,首先要做的工作是根據(jù)不同的硬件平臺(tái)移植操作系統(tǒng),掌握移植的方法非常重要。
本文所述的移植方法已經(jīng)成功應(yīng)用于多個(gè)項(xiàng)目的開(kāi)發(fā)。所述的移植雖然是針對(duì)Blackfin處理器芯片ADSP-BF533,但重點(diǎn)闡述的是移植的思路和方法。對(duì)將μClinux移植到其他處理器為核心的硬件平臺(tái)也有借鑒作用。
本文從如何將嵌入式操作系統(tǒng)μClinux與特定硬件相結(jié)合出發(fā),分析移植μClinux到ADSP-BF533的過(guò)程。
作者將自己成功移植所修改的部分做了詳細(xì)的分析。有利于應(yīng)用μClinux的人員快速理解,移植μClinux到特定的硬件平臺(tái)上去。
參 考 文 獻(xiàn)
[1]李巖,榮盤.基于S3C44B0嵌入式μClinux系統(tǒng)原理及應(yīng)用[M].北京:清華大學(xué)出版社,2005.[LL]
[2]楊瑞亞,肖璋.嵌入式μClinux內(nèi)核啟動(dòng)過(guò)程分析與設(shè)計(jì)[J].微計(jì)算機(jī)信息,2005,21(8z):32-33.
[3]陳峰.Blackfin系列DSP原理與系統(tǒng)設(shè)計(jì)[M].北京:電子工業(yè)出版社,2004.
[4]楊銳,趙剡.ARM系統(tǒng)設(shè)計(jì)及USB主機(jī)擴(kuò)展方案[J].微計(jì)算機(jī)信息,2005,21(3):72-73.
[5]郭正康,邱紹峰,黃俊.μClinux嵌入式系統(tǒng)上SNMP擴(kuò)展代理實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2006,29(24:78-80.
作者簡(jiǎn)介 吳 川 男,1982年出生,山東榮成人,碩士研究生。主要研究方向?yàn)橥ㄐ胖械默F(xiàn)代信號(hào)處理、嵌入式系統(tǒng)。