

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、電占村技女謄碩士學(xué)位論文MASTERDISSERTATION論文題目牡于A剮切的嵌人式Linl ? x平臺(tái)的昕究與實(shí)現(xiàn)學(xué)科專業(yè)指導(dǎo)教師計(jì)算機(jī)應(yīng)用技術(shù)羅管教授作者姓名班學(xué)號(hào)夔絲200520604033摘要摘要作為世界上最優(yōu)秀的操作系統(tǒng)之一,Linux不僅在服務(wù)器領(lǐng)域有著不可撼 動(dòng)的地位,而且正在嵌入式領(lǐng)域發(fā)揮著越來(lái)越重要的作用。有專家預(yù)測(cè),Lill uX將是未來(lái)最主要的嵌入式操作系統(tǒng)之一,將廣泛應(yīng)用在各種消費(fèi)電子和通信設(shè) 備中。因此,產(chǎn)生并逐漸形成了嵌入式Linux這項(xiàng)技術(shù)。然而,面對(duì)嵌入式系 統(tǒng)多樣化的硬件平臺(tái)以及多樣化的應(yīng)用,如何更快更好地建立基于Linux的軟 件平臺(tái)成為一個(gè)必須解決的問(wèn)題
2、。本文正是針對(duì)這個(gè)問(wèn)題,以nu)【相關(guān)的基礎(chǔ)軟件為主要研究對(duì)象,在深 入分析引導(dǎo)加載程序、nux與處理器相關(guān)的代碼、文件系統(tǒng)以及設(shè)備驅(qū)動(dòng)的基 礎(chǔ)上,對(duì)基于ARM的nux軟件平臺(tái)進(jìn)行了創(chuàng)新性和探索性的研究。主要內(nèi)容 為:在理解刪體系結(jié)構(gòu)的基礎(chǔ)上,通過(guò)分析uboot源碼,詳細(xì)研究ARM處理 器在上電后的啟動(dòng)過(guò)程和加載引導(dǎo)nux的過(guò)程;分析并總結(jié)Linux與處理器相關(guān)的接口,法;研究nuX文件系統(tǒng)的內(nèi)容、制作和使用;分析Linux的設(shè)備驅(qū)動(dòng)體系結(jié)構(gòu)以及設(shè)備驅(qū)動(dòng)的調(diào)用方式;在學(xué)習(xí)和研究的基礎(chǔ)之上,針對(duì)S TMP3 6XX這款處理器,以中斷控制器、定時(shí)器以及串口為主,提出了移植nux到新型處理器的思路和
3、方設(shè)計(jì)并實(shí)現(xiàn)引導(dǎo)加載程序,完成LinuX的移植、配置、編譯,解決Linux啟動(dòng)過(guò)程遇到的問(wèn)題,然后通過(guò)制作根文件系統(tǒng) 和實(shí)現(xiàn)NandFlash、LCD的驅(qū)動(dòng),完整地搭建起以nux為核心的軟件平臺(tái),并進(jìn)行了應(yīng)用驗(yàn)證。在實(shí)際應(yīng)用中, 嵌入式系統(tǒng)會(huì)使用很多不同類型的處理器,因此迫切希望能夠 找到一個(gè)準(zhǔn)則解決移植帶來(lái)的問(wèn)題。本文最重要的成果就是為L(zhǎng)inux在新型處 理器上的移植提出了一個(gè)準(zhǔn)則,根據(jù)該準(zhǔn)則可以更加快速、更加準(zhǔn)確地將Linu X應(yīng)用到不同的處理器上,因此具有重要的現(xiàn)實(shí)意義。同時(shí),本文將項(xiàng)目實(shí)踐貫穿 于理論研究之中,涉及到Linux平臺(tái)關(guān)鍵技術(shù)的分析、相關(guān)工具的使用以及開(kāi) 發(fā)經(jīng)驗(yàn)的分享,對(duì)學(xué)
4、習(xí)嵌入式Linux和設(shè)計(jì)嵌入式Linux系統(tǒng)具有較高的 參考和指導(dǎo)價(jià)值。此外,成功移植的STMP36xx已經(jīng)初具規(guī)模,可以通過(guò)二次開(kāi)發(fā)以形成完善的嵌入式產(chǎn)品。關(guān)鍵詞:嵌入式Linux,移植準(zhǔn)則,根文件 系統(tǒng),引導(dǎo)加載程序,驅(qū)動(dòng)ABSTRACTABSTRACTAsoneofthemostexcellemop耐i ngsystem s,LinuXanotOlllyhaSaunbudgeablepositioninseWers,butalsoplaySispredictedthatLimlxwillbeusedwidelyinconsumemorealldmoreimportantroleinemb
5、eddedfield.noneoftlle maine蜘【beddedoperatingsystelnsandwil lbeandelec的mcsco舢Ilullicationd嘶ce s.Soi sametechnologyofernbeddedLinuxhaSgeneratedalldsetupadeVelopped.HoweV%itproblemmathowtoillfaceofdiVersitySOfhWarcplatfomlbaSedon nuXquicH y鋤dconVellielltl yofh砌warealldapplications.aInordertosolvethispr
6、oblem,mispaperhausde印andcreatiVeresearchinLinuxmebasisofunderStandingso脅areplatfO肌basedtheonARM.nemailltasksinclude:onarchitec姍feofAI泓,explored也estartsourceprocessofprocesSorandhowtoloadandabootLinuxviaanalyzingthewllicharecodeofuboot;summarizedsetofinterfacesarelev趾twithprocessorandpmfonWardmestand
7、ardofportingLinuxtOnewprocessor;exploredtheconteIlt,creationandusageoffilesystem;allalyzedmearcllitectureandmeru nf瓠h(huán)ionofdeviced ver;accordingatotlleaboVeresearch,desi印edandimplemented compileaIldb00noaderofforSTMP36)【)【,kellrel,madeupfimshedamefileporting,systern,configuration,debugLinuxrootimplem
8、enteddriverofnandflashandLCD,atlaStcompletelyalldsettheso f兩areplatfon nV嘶6editwithapplicatiolls.aresoThepmcessorsusedineHlbeddedsy stemsaVersatilematdeVelopperseXpectsuccssolutionforse戧ingupmesoftwareplatfonn.ThemostiIllportantoftllisareseaurchisp眥ingfonWardastalldardaccordingtowllich nuxcanbe印plie
9、dtoCoVersanewprocessor.SothispaperhaS a緲atsi嘶f ication.山m也is1 e鋤andcanpaperlotofkeytechnologyincllmed ednu)developpment,usageofrelatedThesearetools鋤dexp甜cllCc.vcryvalua _ bletosodesignan耐beddedLinuxsystan.Eesides,toSTMP36)(isbeasuccessmlmatitbeimproVedthro u曲developping印plicationsperl ectproduc t.Ke
10、ywords:鋤beddedLi肌x,poningp血ciple,root丘lesystem,bootload%driVerU獨(dú)創(chuàng)性聲明本人聲明所呈交的學(xué)位論文是本人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究 成果。據(jù)我所知,除了文中特別加以標(biāo)注和致謝的地方外,論文中不包含其他人已 經(jīng)發(fā)表或撰寫(xiě)過(guò)的研究成果,也不包含為獲得電子科技大學(xué)或其它教育機(jī)構(gòu)的學(xué)位或證書(shū)而使用過(guò)的材料。 與我一同工作的同志對(duì)本研究所做的任何貢獻(xiàn)均已在論文 中作了明確的說(shuō)明并表示謝意。年月日關(guān)于論文使用授權(quán)的說(shuō)明本學(xué)位論文作者完全了解電子科技大學(xué)有關(guān)保留、使用學(xué)位論文的規(guī)定,有權(quán) 保留并向國(guó)家有關(guān)部門或機(jī)構(gòu)送交論文的復(fù)印件和磁
11、盤,允許論文被查閱和借閱。 本人授權(quán)電子科技大學(xué)可以將學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索, 可以采用影印、 縮印或掃描等復(fù)制手段保存、 匯編學(xué)位論文。(保密的學(xué)位論文在解密后應(yīng)遵守此規(guī)定)簽名:壹雛導(dǎo)師簽名:日期:.蘧皆年月日第一章引言第一章引言弟一早I百1.1課題背景當(dāng)今世界已經(jīng)進(jìn)入了后PC時(shí)代。 后PC時(shí)代的絕大多數(shù)計(jì)算機(jī)是以非計(jì)算機(jī) 的形式出現(xiàn)的,例如作為隨身物品出現(xiàn)的電話、遙控開(kāi)關(guān)、電子戒指、電子手杖 等,再例如作為家庭網(wǎng)絡(luò)組成部分的電視機(jī)、電冰箱、空調(diào)等。巨大的市場(chǎng)需求造 就了嵌入式技術(shù)的飛速發(fā)展。 嵌入式系統(tǒng)主要包括硬件、 嵌入式操作系統(tǒng)、各種中 間件以及應(yīng)用軟件。其中
12、,嵌入式操作系統(tǒng)是核心。隨著嵌入式系統(tǒng)功能的不斷增 強(qiáng)和應(yīng)用的推廣,對(duì)嵌入式操作系統(tǒng)的要求也越來(lái)越高。過(guò)去,nux以性能穩(wěn)定和功能強(qiáng)大的優(yōu)勢(shì)穩(wěn)居服務(wù)器以及桌面操作系統(tǒng)領(lǐng) 域的龍頭地位。如今,LinuX也深入到了嵌入式操作系統(tǒng)領(lǐng)域。尤其在中國(guó), 這里有世界上最大的家用電子產(chǎn)品需求,中國(guó)的工業(yè)正在進(jìn)行著數(shù)字化、智能化的 改造,用戶對(duì)嵌入式Linux系統(tǒng)的需求正在迅速擴(kuò)大, 其發(fā)展速度將是驚人 的。根據(jù)美國(guó)投資發(fā)展公司的統(tǒng)計(jì),全球嵌入式nux產(chǎn)品和服務(wù)的銷售額將從2000年282 0萬(wàn)美元增長(zhǎng)到2 0 0 5年的3.06億美元,這在一定程度上 反映了嵌入式LinuX系統(tǒng)的快速增長(zhǎng)速度。在中國(guó)市場(chǎng)上,
13、嵌入式Linux系統(tǒng)的應(yīng)用領(lǐng)域越來(lái)越廣泛,其中最主要的應(yīng)用將包括四大領(lǐng)域:信息電器,如機(jī) 頂盒、網(wǎng)絡(luò)家電等;移動(dòng)計(jì)算設(shè)備,如手機(jī)、PDA、掌上電腦;網(wǎng)絡(luò)設(shè)備,如路 由器、 交換機(jī)、 網(wǎng)絡(luò)服務(wù)器、 網(wǎng)絡(luò)接入盒等; 工控仿真L1|o1.2嵌入式Linux的特點(diǎn)為什么Li肌x會(huì)在嵌入式操作系統(tǒng)領(lǐng)域取得飛速發(fā)展呢?因?yàn)榍度胧絃in ux相比其它商業(yè)嵌入式實(shí)時(shí)操作系統(tǒng)有以下特點(diǎn)。Linl1)【支持多種CPU體系和常見(jiàn)處理器。嵌入式系統(tǒng)的一個(gè)最大的 特點(diǎn)就是硬件的多樣性,nux支持幾乎所有的處理器體系,包括x86、AI W、PPC和MIPs。對(duì)于基于ARM和PPC的處理器也有很好的支持,例如支持基于ARM
14、的EP7312、AT91、s3c2410等。對(duì)于沒(méi)有MMU的4 4BO和451 0也可以使用Linux的另一版本uClinuxLin uX支持各種主流硬件設(shè)備和最新硬件技術(shù),這意味著嵌入式LinuX將電子科技大學(xué)碩士學(xué)位論文具有更廣泛的應(yīng)用前景。Linu)【開(kāi)放源碼Linux從一開(kāi)始就因?yàn)殚_(kāi)源的特性而得到全世界 程序員的喜愛(ài),它之所以有今天的成就,也依賴于狂熱的Linux愛(ài)好者的卓越 貢獻(xiàn)。在內(nèi)核代碼完全開(kāi)放的前提下,不同領(lǐng)域和不同層次的用戶可以根據(jù)自己的 應(yīng)用需要方便地對(duì)內(nèi)核進(jìn)行改造, 成本低卻能開(kāi)發(fā)出滿足自己需要的嵌入式系統(tǒng)。 相對(duì)于其它昂貴的商業(yè)嵌入式操作系統(tǒng),這一點(diǎn)具有強(qiáng)烈的吸引力。良
15、好的設(shè)備驅(qū)動(dòng)體系并支持各種外設(shè)LiImX將所有的外部設(shè)備看作文件 來(lái)處理,提供文件操作的接口,方便使用且易于擴(kuò)展。I眥源碼樹(shù)中包括了幾乎所有的設(shè)備驅(qū)動(dòng), 即使對(duì)于新的設(shè)備, 僅僅需要按照標(biāo)準(zhǔn)實(shí)現(xiàn)接口函數(shù)并注冊(cè)設(shè)備 就可以使用。強(qiáng)大的網(wǎng)絡(luò)支持功能Linux誕生于因特網(wǎng)時(shí)代并具有Umx的特性,保 證了它支持所有標(biāo)準(zhǔn)因特網(wǎng)協(xié)議,支持IPv6,并且可以利用Linux的網(wǎng)絡(luò) 協(xié)議棧將其開(kāi)發(fā)成為嵌入式的TCP/IP網(wǎng)絡(luò)協(xié)議棧。對(duì)于需要網(wǎng)絡(luò)支持的應(yīng)用 來(lái)說(shuō),這一點(diǎn)非常重要。支持多種文件系統(tǒng)。Linux除了支持ext2fatl6fat32等常見(jiàn)文件系統(tǒng),還支持ROMFS、JFFS、胙FS2等嵌入式系統(tǒng)專用的文
16、 件系統(tǒng),為開(kāi)發(fā)嵌入式系統(tǒng)應(yīng)用打下了很好的基礎(chǔ)。支持多種GUI。nux本身包含一些功能強(qiáng)大的GuI,但為了滿足嵌入式GUI的需要,又加入了一些專門針對(duì)嵌入式系統(tǒng)的GUI,如Qt和Mill iGUI,前者適合美觀的手機(jī)界面,后者特別適合需要用戶界面的工業(yè)控制系 統(tǒng),它們的特點(diǎn)是簡(jiǎn)單、直觀、可靠、占用資源小且反應(yīng)快速。Linux具備一整套工具鏈的支持。基于nux容易自行建立嵌入式系統(tǒng)的交叉開(kāi)發(fā)環(huán)境,可以跨越嵌入式系統(tǒng)開(kāi)發(fā)中仿真工具的障礙。傳統(tǒng)的嵌入式開(kāi)發(fā) 的程序調(diào)試和調(diào)試工具是用在線仿真器(IcE)實(shí)現(xiàn)的,一般價(jià)格比較昂貴。使 用嵌入式LinuX,一旦軟硬件能夠支持正常的串口功能,即使不用仿真器,
17、也 可以很好地進(jìn)行開(kāi)發(fā)和調(diào)試工作, 從而節(jié)省一筆不小的開(kāi)發(fā)費(fèi)用。 嵌入式Linu x為開(kāi)發(fā)者提供了一套完整的工具鏈(toolchain)。它利用GNU的g cc做編譯器,用gdb做調(diào)試工具,能夠很方便地實(shí)現(xiàn)從操作系統(tǒng)到應(yīng)用軟件各 個(gè)級(jí)別的調(diào)試。正是因?yàn)長(zhǎng)illuX支持廣泛的硬件、具有穩(wěn)定高效的操作系統(tǒng)內(nèi)核、融合 了各種強(qiáng)大的中間件及完善的設(shè)備驅(qū)動(dòng)和開(kāi)發(fā)工具,所以嵌入式LinuX得以飛 速發(fā)展。毫無(wú)疑問(wèn),LinuX將成為未來(lái)嵌入式領(lǐng)域最重要的操作系統(tǒng)之一。2第一章引言1.3嵌入式Linux發(fā)展方向當(dāng)前嵌入式LiIn 1】 【系統(tǒng)可謂各具特色。 嵌入式Linux系統(tǒng)開(kāi)發(fā)已 經(jīng)開(kāi)辟了很大的市場(chǎng),出現(xiàn)
18、了一批新型的公司參加這方面的競(jìng)爭(zhēng), 他們利用自己掌 握的嵌入式Lir腿的先進(jìn)技術(shù),吸引投資, 開(kāi)發(fā)出成型的產(chǎn)品, 如Line。 、TimeSysFsmLabs等;也有一些傳統(tǒng)的Linux公司開(kāi)辟了這方 面的研究,如RedHat、VALinux等;更值得重視的是,一些傳統(tǒng)的大 公司如IEM、SGI、Motoro1a、II1td等也進(jìn)行了nux的嵌入式方面的研究和開(kāi)發(fā); 另外還有一些開(kāi)發(fā)專有嵌入式操作系統(tǒng)的公司,如b,m【公司從專有操作系統(tǒng)方向轉(zhuǎn)型到嵌入式nux系統(tǒng), 并且更名為咖u)w.orks。這些公司的產(chǎn)品主要分為三類。第一類是專門為L(zhǎng)inu)【的 嵌入式方向而做的,如何讓nux更小、更容易
19、嵌入到功能、性能要求更高的硬 件中去是他們的產(chǎn)品開(kāi)發(fā)方向,如Montdvista的HardHatLin ux等;第二類是專門為L(zhǎng)inu)【的實(shí)時(shí)特性設(shè)計(jì)的產(chǎn)品,將Linux開(kāi)發(fā) 成實(shí)時(shí)系統(tǒng)尤其是硬實(shí)時(shí)系統(tǒng), 應(yīng)用于一些關(guān)鍵的控制場(chǎng)合 (不僅僅是信息電器),如Fsllllabs公司開(kāi)發(fā)出來(lái)的RT-Linux產(chǎn)品已經(jīng)用在工業(yè) 控制的很多方面,葡萄牙的Coimbra大學(xué)已經(jīng)利用R-T-nuX實(shí)現(xiàn)了化工生產(chǎn)控制廠里用來(lái)控制反應(yīng)和程序控制的系統(tǒng); 第三類的產(chǎn)品就是將實(shí)時(shí)性和 嵌入式方案結(jié)合起來(lái)的方案,很多公司都這么做,并且提供集成化的開(kāi)發(fā)方案,如LineOTimeSvs在盤盤瑩奇專宇。綜觀當(dāng)前嵌入式Li
20、nux系統(tǒng)的產(chǎn)品和技術(shù)情況, 要滿足用戶市場(chǎng)的需求還 有很長(zhǎng)的一段路要走?;贚inuX的嵌入式技術(shù)走向成熟,還需要圍繞下面三 個(gè)方面做進(jìn)一步發(fā)展:l. Linux的實(shí)時(shí)性擴(kuò)充實(shí)時(shí)性是嵌入式操作系統(tǒng)的基本要求。由于nu)【還不是一個(gè)真正的實(shí)時(shí) 操作系統(tǒng),內(nèi)核不支持事件優(yōu)先級(jí)和搶占實(shí)時(shí)特性,所以在開(kāi)發(fā)嵌入式Linu)【的過(guò)程中,首要問(wèn)題是擴(kuò)展Linux的實(shí)時(shí)性能。對(duì)Lillux實(shí)時(shí)性的擴(kuò) 展可以從兩方面進(jìn)行:向外擴(kuò)展和向上擴(kuò)展。向外擴(kuò)展即從范圍上擴(kuò)展,讓實(shí)時(shí)系 統(tǒng)支持的范圍更廣,支持的設(shè)備更多。目前的開(kāi)發(fā)所面向的設(shè)備僅限于較簡(jiǎn)單的有 實(shí)時(shí)要求的串/并口數(shù)據(jù)采集、 浮點(diǎn)數(shù)據(jù)計(jì)算等,而像實(shí)時(shí)網(wǎng)絡(luò)這樣
21、實(shí)時(shí)系統(tǒng)的高 級(jí)應(yīng)用還需進(jìn)一步發(fā)展。向上擴(kuò)展是擴(kuò)充Linux內(nèi)核,從功能上擴(kuò)充Linu x的實(shí)時(shí)處理和控制系統(tǒng)。如嵌入式系統(tǒng)RT-nux,它的基本原理是將Linux本身的任務(wù)以及Li肌x內(nèi)核本身作為一個(gè)優(yōu)先級(jí)最低的任務(wù),而實(shí)時(shí)任務(wù) 作為優(yōu)先級(jí)最高的任務(wù),即在實(shí)時(shí)任務(wù)存在的情況下運(yùn)行實(shí)時(shí)任務(wù),否則就運(yùn)行L inuX本身的任務(wù)。實(shí)時(shí)任務(wù)不同于Lirlux3電子科技大學(xué)碩士學(xué)位論文普通進(jìn)程。它是以Linux的可裝載的內(nèi)核模塊(LoadableKem elModule,L幻訂)的形式存在的,需要運(yùn)行實(shí)時(shí)任務(wù)的時(shí)候,將這個(gè)實(shí) 時(shí)任務(wù)的內(nèi)核模塊插入到內(nèi)核中去,實(shí)時(shí)任務(wù)和nuX一般進(jìn)程之間的通信通過(guò)共享內(nèi)存
22、或者FIFo通道來(lái)實(shí)現(xiàn)。2.改變Linux內(nèi)核的體系結(jié)構(gòu)LinuX的內(nèi)核體系采用的是Mono linlic。在這種體系結(jié)構(gòu)中, 內(nèi)核的所有部分都集中在一起,而且所有的部件在一起編譯連接。這樣雖然能使系 統(tǒng)的各部分直接溝通,有效地縮短任務(wù)之間的切換時(shí)間,提高系統(tǒng)的響應(yīng)速度和C PU的利用率,且實(shí)時(shí)性好;但在系統(tǒng)比較大時(shí)體積也比較大,與嵌入式系統(tǒng)容量 小、資源有限的特點(diǎn)不符。而另外一種內(nèi)核體系結(jié)構(gòu)M icrokenlel,在 內(nèi)核中只包括了一些基本的內(nèi)核功能,如創(chuàng)建和刪除任務(wù)、任務(wù)調(diào)度、內(nèi)存管理和 中斷處理等部分,而文件系統(tǒng)、 網(wǎng)絡(luò)協(xié)議棧等部分都是在用戶內(nèi)存空間運(yùn)行。 這種結(jié)構(gòu)雖然執(zhí)行效率不如Mo
23、n oliUlic內(nèi)核,但大大減小了內(nèi)核的體積,同 時(shí)也方便了整個(gè)系統(tǒng)的升級(jí)、維護(hù)和移植,更能滿足嵌入式系統(tǒng)的特點(diǎn)需要。為 此,要使嵌入式Linux的應(yīng)用更加廣泛,若將Linux目前的Monoli thjc內(nèi)核結(jié)構(gòu)中的部分結(jié)構(gòu)改造成M icrokemel體系結(jié)構(gòu),可使得到 的Linux既具有很好的實(shí)時(shí)性,又能滿足嵌入式系統(tǒng)體積小的要求。另外,Linux是一個(gè)需要占用存儲(chǔ)器的操作系統(tǒng)。雖然這可以通過(guò)減少一 些不必要的功能來(lái)彌補(bǔ),但可能會(huì)浪費(fèi)很多時(shí)間,而且容易帶來(lái)很大的麻煩。許多Linu)【的應(yīng)用程序都要用到虛擬內(nèi)存,這在許多嵌入式系統(tǒng)中是沒(méi)有價(jià)值 的。3.完善的集成開(kāi)發(fā)環(huán)境提供完整的集成開(kāi)發(fā)環(huán)境
24、是每一個(gè)嵌入式系統(tǒng)開(kāi)發(fā)人員所期待的。一個(gè)完整的 嵌入式系統(tǒng)的集成開(kāi)發(fā)環(huán)境一般需要提供的工具是:編譯/連接器、內(nèi)核調(diào)試/跟 蹤器和集成圖形界面的開(kāi)發(fā)平臺(tái),其中的集成圖形界面開(kāi)發(fā)平臺(tái)包括編輯器、調(diào)試 器、軟件仿真器和監(jiān)視器等。在Linux系統(tǒng)中,具有功能強(qiáng)大的gcc編譯器 工具鏈,使用了基于GNU的調(diào)試器gdb的遠(yuǎn)程調(diào)試功能,一般由一臺(tái)客戶機(jī)運(yùn) 行調(diào)試程序調(diào)試宿主機(jī)運(yùn)行的操作系統(tǒng)內(nèi)核;在使用遠(yuǎn)程開(kāi)發(fā)時(shí)還可以使用交叉平 臺(tái)的方式,如在Windows平臺(tái)下的調(diào)試跟蹤器對(duì)LinuX的宿主系統(tǒng)做調(diào)試。但是,nux在基于圖形界面的特定系統(tǒng)定制平臺(tái)的研究上,與WindoWS操作系統(tǒng)相比還存在差距。因此,要使嵌
25、入式姍X在嵌入式操作系統(tǒng)領(lǐng)域中的優(yōu)勢(shì)更加明顯,整體集成開(kāi)發(fā)環(huán)境還有待提高和完善。國(guó)外的開(kāi)發(fā)如火如荼,國(guó)內(nèi)的開(kāi)發(fā)也不甘示弱。8 6 3重點(diǎn)支持項(xiàng)目中就有使 用Linux作為嵌入式系統(tǒng)開(kāi)發(fā)的方向。在嵌入式系統(tǒng)中具有強(qiáng)大的生命力和利 用價(jià)4第一章引言值,很多公司和大學(xué)都不同程度的表現(xiàn)出對(duì)這個(gè)方面的興趣。相信嵌入式Li nuX的發(fā)展將帶領(lǐng)我們進(jìn)入嵌入式系統(tǒng)的新時(shí)代11.4本文主要工作及章節(jié)安排1.4. 1主要工作本課題來(lái)源于北京科銀京成技術(shù)有限公司的針對(duì)消費(fèi)電子產(chǎn)品的一個(gè)解決方 案,該方案需要在STMP3 6XX處理器上運(yùn)行Linu】(操作系統(tǒng),并為應(yīng) 用開(kāi)發(fā)提供支持。本人承擔(dān)的主要任務(wù)是研究基于AR
26、M的基礎(chǔ)軟件平臺(tái),包括bootloaderLinuX與處理器相關(guān)的代碼、 文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程 序, 力求為嵌入式Lin畎系統(tǒng)提供一套建立軟件平臺(tái)的方法,研究的內(nèi)容如圖1.1所示。對(duì)bootloader,分析它的工作原理以及如何加載引導(dǎo)操作 系統(tǒng),特別是為了引導(dǎo)Linux,如何創(chuàng)建啟動(dòng)參數(shù),如何建立Linux的運(yùn) 行環(huán)境;對(duì)內(nèi)核,研究并歸納出Linux與處理器相關(guān)的一套接口,為接口定義 嚴(yán)格的輸入輸出條件和功能,這套接口稱之為 移植層;對(duì)文件系統(tǒng),研究文件 系統(tǒng)的內(nèi)容、制作和使用;對(duì)設(shè)備驅(qū)動(dòng),分析設(shè)備驅(qū)動(dòng)的體系結(jié)構(gòu)和調(diào)用方式,研 究如何添加一個(gè)設(shè)備的驅(qū)動(dòng)程序。最后,在以上研究的基礎(chǔ)之上,通過(guò)將
27、Linl IX移植到STMP36xx這種新型處理器進(jìn)行了實(shí)踐和驗(yàn)證,具體來(lái)說(shuō)主要包 括以下4個(gè)方面:1)分析課題采用的硬件平臺(tái),在理解uboot實(shí)現(xiàn)的基礎(chǔ)之上,根據(jù)實(shí)際條件設(shè)計(jì)并實(shí)現(xiàn)一種可以引導(dǎo)LinWl的bootloader一kernel pre,解決了LinuX下載和更新的問(wèn)題;2)根據(jù) 移植層”接口定義,實(shí)現(xiàn)特定于STMP36xx的接口函數(shù),搭建 交叉開(kāi)發(fā)環(huán)境,完成Linux的配置和編譯,解決Linu) 【啟動(dòng)過(guò)程出現(xiàn)的 問(wèn)題;3)編寫(xiě)sheU腳本生成根文件系統(tǒng)的目錄結(jié)構(gòu)和/deV下的設(shè)備文 件,編譯bllsybox生成廠bin下的可執(zhí)行程序,編寫(xiě)/etc下的配置文 件,編譯uClibe
28、生成/lib下需要的庫(kù),制作基于r鋤disk的文件系 統(tǒng), 并通過(guò)腳本實(shí)現(xiàn)文件系統(tǒng)的自動(dòng)更新;4)實(shí)現(xiàn)NalldFlaSh驅(qū)動(dòng), 在其中一個(gè)分區(qū)建立j凰2文件系統(tǒng), 通過(guò)讀寫(xiě)文件驗(yàn)證了驅(qū)動(dòng)的正確性;實(shí)現(xiàn)LCD驅(qū)動(dòng),編譯基于MiniGUI的應(yīng)用程 序,通過(guò)應(yīng)用程序在LCD上顯示圖形驗(yàn)證了驅(qū)動(dòng)的正確性;5電子科技大學(xué)碩士學(xué)位論文l硬件圖卜l本文研究?jī)?nèi)容本文的主要?jiǎng)?chuàng)新在于總結(jié)了移植nuX到新型AIW處理器的一套接口,并 通過(guò)實(shí)踐驗(yàn)證了正確性。雖然嵌入式系統(tǒng)采用各種各樣的處理器,但借助這個(gè)研究 成果,可以極大地方便LinuX在不同類型的刪處理器中的移植。分析以及相關(guān)技術(shù)和工具的使用,都具有較大的指導(dǎo)和
29、參考價(jià)值。本文研究還 涉及到了nuX的引導(dǎo)加載程序、文件系統(tǒng)和驅(qū)動(dòng)程序,對(duì)它們的綜上所述,本文為嵌入式hu)【系統(tǒng)軟件平臺(tái)的開(kāi)發(fā)提供了一種思路。毫 無(wú)疑問(wèn),該研究和實(shí)踐具有重要的現(xiàn)實(shí)意義。對(duì)個(gè)人而言,將極大地提高自身的理 論和技術(shù)水平;對(duì)行業(yè)而言,必將使得應(yīng)用程序的開(kāi)發(fā)更加便利,推動(dòng)Linux在嵌入式領(lǐng)域更加快速地發(fā)展。1.4.2章節(jié)安排第一章介紹嵌入式Linux的的特點(diǎn)和發(fā)展方向。第二章分析uboot的運(yùn)行過(guò)程, 著重分析了如何創(chuàng)建啟動(dòng)參數(shù)和設(shè)置nux的運(yùn)行環(huán)境,然后詳細(xì)描述了k鋤elpre的設(shè)計(jì)和實(shí)現(xiàn),對(duì)kernel程序下載和更新的方式以及內(nèi)存空間的定位也做了說(shuō)明pre的項(xiàng)目設(shè)置、第三章詳
30、細(xì)描述Linux與處理器相關(guān)的接口和移植到STMP36XX的 具體過(guò)程,同時(shí)說(shuō)明了內(nèi)核移植代碼如何驗(yàn)證、調(diào)試問(wèn)題如何解決以及Linux的配置和編譯。第四章分析根文件系統(tǒng)的內(nèi)容,闡述根文件系統(tǒng)的制作過(guò)程,并對(duì)自動(dòng)生成6第一章引言和更新根文件系統(tǒng)的shel l腳本進(jìn)行了說(shuō)明,同時(shí)也涉及到應(yīng)用程序的交 叉工具鏈、部署等問(wèn)題。第五章分析設(shè)備驅(qū)動(dòng)程序的體系結(jié)構(gòu)和調(diào)用方式,詳細(xì)描述NandFlaS h和LCD驅(qū)動(dòng)的實(shí)現(xiàn),對(duì)設(shè)備驅(qū)動(dòng)的添加、配置、編譯和測(cè)試進(jìn)行了說(shuō)明。第六章結(jié)束語(yǔ),對(duì)本文工作的成功與不足做了總結(jié),對(duì)未來(lái)進(jìn)一步研究做了展 望。1.5本章小結(jié)本章簡(jiǎn)要地介紹了嵌入式LinuX的特點(diǎn)和國(guó)內(nèi)外研究方向
31、。正是在這樣的 背景下,本課題研究并實(shí)現(xiàn)了嵌入式LinuX軟件平臺(tái),具有較高的研究?jī)r(jià)值和 應(yīng)用價(jià)值。下面將分四章分別進(jìn)行描述。7電子科技大學(xué)碩士學(xué)位論文第二章bootloader的實(shí)現(xiàn)本章主要介紹課題采用的硬件平臺(tái)以及bootloader的實(shí)現(xiàn)。通常由bootloader加載并啟動(dòng)Linux。在對(duì)當(dāng)前流行的bootload er程序進(jìn)行權(quán)衡和比較后,選擇了uboot作為參考對(duì)象,并結(jié)合硬件自身特 點(diǎn),最終形成了針對(duì)該目標(biāo)板的引導(dǎo)加載程序kemeljre。2.1硬件平臺(tái)概述處理器為STMP36xx,它是美國(guó)Se腫aTel公司生產(chǎn)的第四代單芯 片數(shù)字媒體系統(tǒng),主要應(yīng)用在數(shù)字音頻播放器、PDA、錄音
32、機(jī)、手機(jī)、便攜式視 頻播放器等CPU核采用ARM 92 6 EJ S,該核實(shí)現(xiàn)了ARMv5TE指 令集,工作在小端模式,異常向量表位于OxFFFFooOO【2】(3 1。除 了8K指令cache和8K數(shù)據(jù)cache外, 該核集成了64K的RoM和25 6K的SRAM。另外通過(guò)集成的外部存儲(chǔ)接口(EMI)可以訪問(wèn)外接的No RflaSh和SDRAM, 通過(guò)通用媒體接口 (GPM I)還可以訪問(wèn)NAND flaSh。在該處理器中,存儲(chǔ)空間映射如表2.1所示。表21存儲(chǔ)空間映射地址范圍0 x60000000一0 x61FFFFFF0 x80000000 0 x800FFFFFOxFFFFOOOO O
33、xFFFF FFFF存儲(chǔ)類型片上SRAMSDRAMIO空間片上ROM0 0 0 0片上ROM包含由Sc腫aTel固化的初始化代碼,上電后首先從OxFFFF取指令開(kāi)始執(zhí)行,經(jīng)過(guò)一系列基本的初始化后,然后根據(jù)不同的引導(dǎo)模式完成 不同的功能:如果設(shè)置為正常引導(dǎo)模式,則從NANDflash上加載應(yīng)用程序 (如果不能從NAND上加載,則還可以從其它介質(zhì)加載,這里不再深究);如果 設(shè)置為恢復(fù)模式,并且連接主機(jī)與板上的USE接口,這時(shí)就可以從主機(jī)固化新的 應(yīng)用程序到NANDnaSh中,通常更新應(yīng)用程序就要使用這種方式。0 x00000000.OxO003FFFF明白了目標(biāo)平臺(tái)的基本情況和引導(dǎo)方式后,為了把n
34、u)【引導(dǎo)起來(lái),應(yīng)該如何實(shí)現(xiàn)bootloader呢?bootloader如何存放?完成哪些硬 件初始化?帶著這些問(wèn)題,第二章bootloader的實(shí)現(xiàn)分析了uboot的實(shí)現(xiàn)方法。2.2uboot分析bootload叫引導(dǎo)裝載程序)是嵌入式系統(tǒng)軟件開(kāi)發(fā)的第一個(gè)環(huán)節(jié),它 把操作系統(tǒng)和硬件平臺(tái)銜接在一起,對(duì)于嵌入式系統(tǒng)的后續(xù)軟件開(kāi)發(fā)十分重要,在 整個(gè)開(kāi)發(fā)中也占有相當(dāng)大的比例。與熟悉的PC技術(shù)相比而言,它相當(dāng)于PC上的BIOs和引導(dǎo)記錄兩部分的功能, 即完成基本硬件初始化和操作系統(tǒng)的加載,并 轉(zhuǎn)入操作系統(tǒng)引導(dǎo)。U.Boot, 全稱UrniverSalBootLoader, 是遵循G PL條款的開(kāi)放源碼
35、項(xiàng)目, 從FADSRoM、8xxROM、PPCBooT逐 步發(fā)展演化而來(lái)。其源碼目錄、編譯形式與Linux內(nèi)核很相似,事實(shí)上,不少U.B00t源碼就是相應(yīng)的Linux內(nèi)核源程序的簡(jiǎn)化,尤其是一些設(shè)備的驅(qū)動(dòng)程序,這從U .Eoot源碼的注釋中能體現(xiàn)這一點(diǎn)。但是U .Eoot不僅僅 支持嵌入式LinuX系統(tǒng)的引導(dǎo),它還支持NctESD、VxWbrks、Q NX,、RTEMS、ARTOS和LynXoS嵌入式操作系統(tǒng)。這是U .Eo ot中UI liversal的一層含義,另外一層含義則是U Boot除了支持PowerPC系列的處理器外,還能支持M IPS、x86、AI蝴、NIO SXScale等諸多
36、常用系列的處理器。這兩個(gè)特點(diǎn)正是U .Boot項(xiàng)目的 開(kāi)發(fā)目標(biāo),即支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。就目前來(lái)看,U.Boot對(duì)PowerPC系列處理器支持最為豐富,對(duì)Linux的支持最 完善。出于這些的考慮,在課題中首先對(duì)uboot進(jìn)行分析,力求掌握bOOtloader初始化的基本過(guò)程和引導(dǎo)LinuX的必要準(zhǔn)備。2.2. 1運(yùn)行過(guò)程分析為了與本文使用的硬件平臺(tái)盡量保持一致, 在分析uboot時(shí)主要以A1w系列的目標(biāo)板進(jìn)行分析。它的運(yùn)行過(guò)程對(duì)ARM系列的目標(biāo)板都是一樣的,只是調(diào) 用的與硬件有關(guān)的底層函數(shù)不同。uboot引導(dǎo)Linux的過(guò)程可以分成3個(gè) 階段:首先在F lash中運(yùn)行,完
37、成硬件最基本的設(shè)置,其中就包括sD洲的初 始化,然后將自身復(fù)制到SD洲中,最后轉(zhuǎn)入SD洲運(yùn)行;在SDRAM中執(zhí)行各 種硬件的初始化;設(shè)置內(nèi)核參數(shù)的標(biāo)記列表,把內(nèi)核拷貝到內(nèi)存,最后跳轉(zhuǎn)到內(nèi)核 的入口。詳細(xì)描述如下:1)程序首先在F 1aSh中運(yùn)行。具體工作包括:設(shè)置異常向量表;設(shè)置CPu運(yùn)行模式;設(shè)置系統(tǒng)的主頻;屏蔽中斷;關(guān)閉M肌r功能;初始化SDRAM控制寄9電子科技大學(xué)碩士學(xué)位論文存器;將ubOOt自身復(fù)制到SDRAM中;設(shè)置堆棧指針;轉(zhuǎn)入SDRA M執(zhí)行【4】。這部分用匯編語(yǔ)言編寫(xiě),在ub00t/cpu/)【)【X/s tan.S中,其中x)()【表示一種具體CPU的名字。2)程序跳轉(zhuǎn)到S
38、DRAM中執(zhí)行uboot/l:|ba冊(cè)廠board.c中的stanannboot()函數(shù)。該函數(shù)依次調(diào)用各個(gè)部分的初始化函數(shù), 包括cpuillit、bo砌in it、int鋤lptjnit、cnVinjt、iniHbaudrate、s舐aljnitconsole _硒t _ fdrallollit和flashinit等等,最后進(jìn)入mainlOOpomainloop主要用于設(shè)置 延時(shí)等待,從而確定目標(biāo)板是進(jìn)入交互操作模式還是自動(dòng)引導(dǎo)模式。在設(shè)定的延時(shí) 時(shí)間范圍內(nèi),目標(biāo)板將在串口等待輸入,當(dāng)有輸入時(shí),系統(tǒng)進(jìn)入交互操作模式,反 之如果沒(méi)有接收到相關(guān)命令, 系統(tǒng)將進(jìn)入自動(dòng)引導(dǎo)模式, 完成內(nèi)核的加載及
39、引導(dǎo)。如果程序進(jìn)入交互操作模式, 則可以響應(yīng)用戶輸入的命令, 包括內(nèi)存操作命令,j fl砒操作命令, 下載命令和引導(dǎo)命令, 為ubOOt的使用提供了更大的靈活 性。3)加載LinuX就是把Lin畎映像文件從f lash中拷貝到sD鼬蝴 中特定的地址(注意決不能隨便拷貝到某個(gè)地址,該地址是內(nèi)核編譯后的虛擬地址以及目標(biāo)平臺(tái)SDRAM的起始地址共同決定的, 后面會(huì)講如何計(jì)算),然后跳轉(zhuǎn)到LinuX的入口執(zhí)行。但是與引導(dǎo)其它嵌入式操作系統(tǒng)有兩點(diǎn)不同:l,Linux初始化 時(shí)必須要掛載根文件系統(tǒng), 并且需要從這個(gè)文件系統(tǒng)中執(zhí)行一些初始化腳本(主要 位于/etc下),最后執(zhí)行/bi n下的shel l程序
40、進(jìn)入命令行交互。根文 件系統(tǒng)的實(shí)現(xiàn)有多種方式,比如最常見(jiàn)的r鋤disk。把ramdisk的映像 文件做好以后(第四章介紹如何制作基于r鋤disk的根文件系統(tǒng)),會(huì)固化到naSh中并由bootloader在加載Linux時(shí)一起拷貝到SDRAM中,這樣Linu)【才能找到這個(gè)根文件系統(tǒng)并掛載。對(duì)于其它類型的根文件系 統(tǒng),如j凰2,不需要boonoader事先拷貝到SDRAM;2, 在引導(dǎo)nux前需要?jiǎng)?chuàng)建引導(dǎo)參數(shù)。 主要包括SDRAM的起始地址和大小,r鋤disk的起始地址和大小(也可在命令行參數(shù)中指定ini仃d=)【XX,x)【)【)以及命令行參數(shù)(主要包括根設(shè)備root=/deV/Xxx,控制臺(tái)
41、 及控制臺(tái)參數(shù)consOle xxxXXxxXx等)。創(chuàng)建的方式采用標(biāo)記列 表(taggedlist), 這是和LinuX約定好的。下面會(huì)詳細(xì)闡述如何 使用標(biāo)記列表創(chuàng)建參數(shù)。2.2.2創(chuàng)建引導(dǎo)參數(shù)Lillu)2.4.x以后的內(nèi)核都期望以標(biāo)記列表(taggedli st)的形式來(lái)傳遞啟動(dòng)參數(shù)。啟動(dòng)參數(shù)標(biāo)記列表以標(biāo)記朋rAGCORE開(kāi)始, 以標(biāo)記觸隊(duì)GNoNE結(jié)束。10第二章bootloader的實(shí)現(xiàn)每個(gè)標(biāo)記由標(biāo)識(shí)被傳遞參數(shù)的tag_header結(jié)構(gòu)以及隨后的參數(shù)值數(shù) 據(jù)結(jié)構(gòu)來(lái)組成。所有這些標(biāo)記都在一塊連續(xù)的內(nèi)存中被創(chuàng)建,同時(shí)必須讓內(nèi)核知道 它們的起始位置【5 1。數(shù)據(jù)結(jié)構(gòu)tag和tagjlead
42、er定義在LinuX內(nèi)核源碼的inc lude/姻州semp.h頭文件中:/Thelist饑dswimallATAG丿寸。NEnode.奉/蜘e血eATAG_WoNEOx00000000s仃ucttagr headeru32size;/搴注意,這里size是字?jǐn)?shù)為單位的幸/u32tag;;s仃ucttagstmcttagAeaderhdr; ulionstmctta&一corecore;s仃ucttagmeI1132m鋤;ramdisk;stmcttag_VideoteXtVideotex t;s白ructtagramdisks白mCtta罟Oni仃dillitrd;strumta&a
43、mp;_ sefialnrseAalnr;stmcttagresionrclVision;s仃ucttag.videolfbVideolfb;st九Jcttag.cmdlinecmdline;I奉A(yù)comspecifichdr.tag=觸rAG-上ORE;p礎(chǔ)吼shdr.size2tagi ze(ta臣core);par鋤su.core.flags=O;par鋤su.core.pagesize = O;p繃msu.core.rootdeV = O;params = ta & Jext(params);其中,EooTPARAMS表示啟動(dòng)參數(shù)在內(nèi)存中的起始基地址,指針pa rams是一個(gè)s
44、tmcttag類型的指針。宏ta緲em()將以指向當(dāng)前標(biāo) 記的指針為參數(shù),計(jì)算緊臨當(dāng)前標(biāo)記的下一個(gè)標(biāo)記的起始地址。這里BAG它字段并無(wú)意義。又如設(shè)置內(nèi)存映射情況的示例代碼:for(i=O;i VNUI _MEMAREAS;i+ + )CoRE僅僅表示開(kāi)始,其i墳memorunapi.used)(par鋤shdr.tag = Al隊(duì)G.MEM;par鋤Shdr.size = tagsizta&J nem32);p黜amsu.m鋤.stan2memo巧mapi.start;p啪s _ u.mem.size=memo巧m印【i .size;p猢sta&一next(par鋤s);2可以
45、看出, 在memo巧加ap數(shù)組中, 每一個(gè)有效的內(nèi)存段都對(duì)應(yīng)一個(gè)ATAGMEM參數(shù)標(biāo)記。Linux內(nèi)核在啟動(dòng)時(shí)可以以命令行參數(shù)的形式來(lái)接收信息,利用這一點(diǎn)可 以向內(nèi)核提供那些內(nèi)核不能自己檢測(cè)的硬件參數(shù)信息,或者重載(ove盯id e)內(nèi)核自己檢測(cè)到的信息。比如,用這樣一個(gè)命令行參數(shù)字符串consOle仕ysO,ll52OOll8”來(lái)通知內(nèi)核以第一個(gè)串口作為控制臺(tái),且串 口設(shè)置為ll52OObps、無(wú)奇偶校驗(yàn)、8位l2第二章bootloader的實(shí)現(xiàn)數(shù)據(jù)位”。下面是一段設(shè)置命令行參數(shù)的示例代碼:char幸p;/木eatleadingW枉teSpace幸/for(p = comm鋤dline;宰戸
46、;p+ + )產(chǎn)skipnon eXistemCOmmandlines宰u(yù)sesomek鋤elwillstillitsdefaultcommandline.Ii墳術(shù)p/Ot)r etl l加;par鋤shdr.tag = ATAG_CMDLINE;p捌rams ? h(lr.size =(si. zee)墳stnlcttagjleader)+stden(p)+ l+4)2;s缸Cpy(par鋤su.鋤dline.cm dline,p);params =ta受衛(wèi)extO跏s) 7表示的是字?jǐn)?shù)。下面是設(shè)置ATAG在上述代碼中,設(shè)置tag_ _ header的大小時(shí),必須包括字符串的終止符o,此外還
47、要將字節(jié)數(shù)向上取整為4字節(jié)的倍數(shù), 因?yàn)閠ag-header結(jié)構(gòu)中的size成員INITlD的示例代碼,它告訴內(nèi) 核在RAM中的什么地方可以找到initr.d映象(就是采用ramdisk的根文件系統(tǒng)映像)以及它的大小:p眥II nshdmg = ATAG INITIm2;p撇shdr.size = tag size(tag illitrd);paramsu.ini仃d.sizc = INITI_ LEN;paftns = ta&_ nex姬arams);最后,設(shè)置ATAGNONE標(biāo)記,結(jié)束整個(gè)啟動(dòng)參數(shù)列表:para瑚shdr.tag = ATAG NoNE;pal.撇shdtsize=
48、O;所有這些參數(shù)的創(chuàng)建都是由uboot完成的,并存放到內(nèi)核映像文件之前, 可以在內(nèi)核中配置具體位置(參見(jiàn)第三章Makefile.boot文件的內(nèi) 容),也可以由bootloader傳遞給內(nèi)核,以便讓內(nèi)核找到。啟動(dòng)參數(shù)是特定于引導(dǎo)nuX的。另外在轉(zhuǎn)入Linux運(yùn)行前,還需要設(shè) 置nux的運(yùn)行環(huán)境。parBASE;amsu.illitnd.sta t =RAMDISKRAM13電子科技大學(xué)碩士學(xué)位論文2.2.3啟動(dòng)Linuxbootloader啟動(dòng)Linux的方法是直接跳轉(zhuǎn)到它的第一條指令 處。在跳轉(zhuǎn)前,必須滿足下面3個(gè)條件:1. CPU寄存器的設(shè)置:/RO=O:/R1=機(jī)器類型ID(每種類型的開(kāi)
49、發(fā)板都有一個(gè)唯一的D編號(hào),針對(duì)/I也=啟動(dòng)參數(shù)標(biāo)記列表在洲中起始基地址;2. CPU模式:STMP36XX可以查找1inuv4rch/踟:11/t001s/mach types,為8 6 0 );/必須禁止中斷(mQ和F IQ);/CPU必須SVC模式:3.Cache和MMU的設(shè)置:/MMU必須關(guān)閉;/指令Cache可以打開(kāi)也可以關(guān)閉;/數(shù)據(jù)Cache必須關(guān)閉;如果用C語(yǔ)言, 可以像下列示例代碼這樣來(lái)調(diào)用內(nèi)核 【6 1:Void(宰U1eKemel)(intzero,intarch,u3 2par鋤s addr) =BASE;(Void(術(shù))(int,int,u32)KERNELR AMthe
50、Kemel(O,ARCHjWMBER,(u32)kemel p ar鋤s _奠art);其中KERNELRAMBASE為L(zhǎng)inuX入口所在的地址, 為物理地 址;ARCHNIMBER為目標(biāo)平臺(tái)的ID;kenlelparamsst眥 為啟動(dòng)參數(shù)的起始地址。注意,meKemeI這個(gè)函數(shù)調(diào)用應(yīng)該永遠(yuǎn)不返回。如 果這個(gè)調(diào)用返回,則說(shuō)明出錯(cuò)。以上通過(guò)對(duì)uboot的分析,明白了boonoader運(yùn)行的基本過(guò)程、 如何創(chuàng)建啟動(dòng)參數(shù)列表以及引導(dǎo)Linux前需要做哪些準(zhǔn)備,這為在sTm3 6)【)【上實(shí)現(xiàn)bootloader奠定了基礎(chǔ)。2.3kemel_pre的設(shè)計(jì)與實(shí)現(xiàn)kemeLpre的設(shè)計(jì)2.3.1經(jīng)過(guò)前面
51、的研究和分析,要實(shí)現(xiàn)STMP3 6XX的booUoader有兩 種方式:其一,第二章bootloader的實(shí)現(xiàn)移植uboot以支持sTMP36xx ;其二是利用sTMP36)【)【片上ROM已有的初始化代碼完成板子的初始化,然后加入為了引導(dǎo)Linux而必須實(shí)現(xiàn)的一個(gè)功能,這看起來(lái)類似于二級(jí)bootloader。單獨(dú)加入的 這個(gè)功能命名為k鋤el內(nèi)核啟動(dòng)做的準(zhǔn)備工作。pre,意思是為L(zhǎng)inux這兩種方式各有優(yōu)勢(shì)。對(duì)于方式1來(lái)說(shuō),這是一種最徹底最完善的方式,即讓uboot真正完全支持STMP36】【)【,但畢竟要花費(fèi)較長(zhǎng)的時(shí)間。另一 個(gè)因素是因?yàn)槿鄙倥涮椎臒?,即使能夠成功移植uboot,但是如
52、何固化到 片上RoM則是無(wú)法解決的問(wèn)題。 而且片上RoM不同于NORflaSh, 它是 可多次擦寫(xiě)還是只能寫(xiě)一次也無(wú)從查知。方式2的優(yōu)勢(shì)在于無(wú)需實(shí)現(xiàn)基本的硬件初始化,直接利用已經(jīng)有的功能完成板 子的基本初始化;并且可以利用系統(tǒng)的恢復(fù)模式下載kenlelpre。在這樣 的情況下,最終選擇了方式2。前面講過(guò)片上Ro M啟動(dòng)后將根據(jù)引導(dǎo)模式采取不同的行為,這里以圖2一l再次說(shuō)明。ResetWu多圖2 lSTMP3 6xx啟動(dòng)示意圖如果是恢復(fù)模式,則BootRo M調(diào)用updater程序,完成應(yīng)用程序Player(Se腫aTel提供的音頻播放程序)的更新,這里的更新指的是 把主機(jī)上的新的Player程
53、序通過(guò)配套的軟件程序固化到STMP36xx的Nandflash中。如果是正常模式,BootROM調(diào)用BootMana ger, 后者再把Player從NandnaSh拷貝到SDRAM,最后跳轉(zhuǎn) 到Player執(zhí)行,在拷貝Play盯之前,已經(jīng)由BootRo M和Boot Manager完成了板子的基本初始化。15電子科技大學(xué)碩士學(xué)位論文方式2就是把kenlelpre設(shè)計(jì)為這樣:用kenlelpre替換P layer,然后固化到板子上,隨后板子以正常模式啟動(dòng),貝U可以執(zhí)行到ken lelpre。因?yàn)樵谵D(zhuǎn)入kenlelpre之前已經(jīng)完成了系統(tǒng)的基本初始 化,所以k鋤elpre的主要功能只是把Lill
54、ux和根文件系統(tǒng)映像拷貝到SDRAM中,然后為L(zhǎng)inux構(gòu)建啟動(dòng)參數(shù),最后跳轉(zhuǎn)到LinuX入口。但 是這里又有一個(gè)問(wèn)題:LinuX和根文件系統(tǒng)如何下載?kenlelpre怎 樣知道它們的存儲(chǔ)位置?為了處理方便, 把Linux和根文件系統(tǒng)的內(nèi)容作為數(shù)據(jù)放到kenlel pre中,這樣它們就隨kenlelpre一起下載到板子上,并且k鋤elp re很容易知道它們的位置。具體處理如下:把Linux映像的內(nèi)容放到kem elpre的一個(gè)數(shù)組里,并且記錄Linux映像的長(zhǎng)度,根文件系統(tǒng)的處理相 同,然后一起編譯生成一個(gè)可執(zhí)行程序。這樣的好處在于因?yàn)閗emelpre知 道Linux和根文件系統(tǒng)的位置和長(zhǎng)度
55、,所以可以方便地把它們拷貝到特定的S DRAM空間,滿足加載的需要。缺點(diǎn)在于造成kenlel過(guò)大,編譯時(shí)間比較 長(zhǎng)。并且需要兩次拷貝,第一次由BOOtMallager把kenlelpr epre(包含了Linux和根文件系統(tǒng))從f lash拷貝到內(nèi)存,第二次由kemelpre把Linux和根文件系統(tǒng)拷貝到內(nèi)存中特定的地方。由于有相應(yīng)的工具可以將二進(jìn)制文件的內(nèi)容輸出到一個(gè)無(wú)符號(hào)字符類型的數(shù)組 中,所以這也不失為一種好的解決辦法。綜上所述,得出這樣的設(shè)計(jì)方案:保留BootRO M和BootManag er,將特定于Linux引導(dǎo)的程序(即kemelpre)和1丑nlX內(nèi)核 映像及根文件系統(tǒng)映像一起
56、編譯成一個(gè)可下載到目標(biāo)板的程序,這個(gè)程序等效于Playerokemelpre的主要功能包括:11設(shè)置啟動(dòng)參數(shù);2)將內(nèi)核和根文件系統(tǒng)拷貝到內(nèi)存中指定地址;3)跳轉(zhuǎn)到內(nèi)核執(zhí)行;2.3.2kernel_ pre的實(shí)現(xiàn)forARMDeVeloperSuitekemel_ pre采用ARM公司的CodeWa orl.2工具開(kāi)發(fā),沒(méi)有使用任何外部庫(kù),實(shí)現(xiàn)的源碼如下:setllptack.S一入口函數(shù),建立堆棧并跳到主程序;illit_s麗al.p.sTMP36xx的串口初始化程序;s甜al一 .一STMP3 6)【)【的串口輸出程序,這里加入串口驅(qū)動(dòng)主要是為了16第二章bootloader的實(shí)現(xiàn)打印字符
57、串,方便調(diào)試和驗(yàn)證;atag.h head.h標(biāo)記列表相關(guān)定義,主要從Linux源碼拷貝;寄存器相關(guān)定 義,如寄存器地址、寄存器位的定義等:Lilnlx內(nèi)核轉(zhuǎn)換后的數(shù)組以及數(shù)組長(zhǎng)度的定義,通過(guò)工具自pData.h 一動(dòng)生成;iData.h.一一根文件系統(tǒng)轉(zhuǎn)換后的數(shù)組以及數(shù)組長(zhǎng)度的定義,通過(guò)工具自動(dòng)生成;p猢.c一 .一主程序, 包含拷貝Linux映像和根文件系統(tǒng)映 像,設(shè)置啟動(dòng)參數(shù),最后跳轉(zhuǎn)到內(nèi)核程序;kenlelje的流程如圖22所示。圖2 2kenlel_ pre流程為了達(dá)到目的,kenlelpre的配置也很重要。配置主要完成keme lpre程序空MMU是關(guān)閉的,因此直接以SD洲中的物理
58、地址來(lái)操作。配置的 具體操作如下:具AI己M6_omELF轉(zhuǎn)換為ELF格式。2)設(shè)置運(yùn)行可執(zhí)行文件的處理器。把LallguageSe仕i ngs中 的AI乇MARMCAssembler、間的定位,確定生成的目標(biāo)指令碼以及可執(zhí)行 文件的格式。注意kemelpre運(yùn)行時(shí)1)首先設(shè)置輸出格式為ELFoAD sl.2生成的可執(zhí)行文件格式為aXf,這里通過(guò)工Com研1er和ARMC+ +Compiler的ArdlitcctIJrcorProccssor中選擇為17電子科技大學(xué)碩士學(xué)位論文A徹9 2 6 eJs。3)設(shè)置只讀段的起始地址RObaLse為0 x614000 00。注意執(zhí) 行kenlelpre
59、時(shí)MMU是關(guān)閉的,所以操作的都是物理地址。之所以把這個(gè)地址選在0 x614000 0 0這個(gè)高端的地方,是因?yàn)閚ux和引導(dǎo)參數(shù)在低端固定的位置,必須為它 們預(yù)留。經(jīng)過(guò)編譯連接,生成的可執(zhí)行文件以它為基地址,往后依次安排數(shù)據(jù)段和 其它4)設(shè)置映像文件入口點(diǎn)(hllage咖Point)為beforc S tart,表示可執(zhí)行文件從before段。st砒開(kāi)始執(zhí)行,該函數(shù)位于s釀lpstack.s。這 也是從BootManager跳轉(zhuǎn)5)在刪連接器中取消所有的庫(kù),保證kem elpre不連接任何其它的庫(kù),這樣會(huì)減少出錯(cuò)的機(jī)會(huì)。因?yàn)閷?duì)于這種底層的引導(dǎo)程序,能提供的功能很少,使用 別的庫(kù)極有可能出錯(cuò)。另一
60、方面也減少了冗余代碼。 到kenlelpre的地 址, 它直接決定了引導(dǎo)的成敗。6)設(shè)置映像開(kāi)始位置放置的文件為s帥stack. o這個(gè)文件。因?yàn)檫B接 器不一定把入口函數(shù)所在的文件放在最前面,所以入口函數(shù)的地址并不一定就是0 x614 0 0 0 0 0。如果入口函數(shù)的地址不確定,那么從B00tManager跳轉(zhuǎn) 就會(huì)有問(wèn)題。 所以這里將s咖stack. o放到最前面,因?yàn)樵撐募ㄈ肟诤?數(shù),這樣就保證了入口函數(shù)的地址為0 x61400000。71最后設(shè)置輸出的可執(zhí)行文件的格式為elfo完成代碼編寫(xiě)和項(xiàng)目配置以后,編譯生成可執(zhí)行文件,然后通過(guò)一定的方式下 載到目標(biāo)板。這里對(duì)整個(gè)過(guò)程做一總結(jié),詳見(jiàn)以下幾步描述,并參見(jiàn)圖2.3。1)使用工
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 60309-1:1999+AMD1:2005 CSV EN-D Plugs,socket-outlets and couplers for industrial purposes - Part 1: General requirements
- 心房顫動(dòng)及護(hù)理
- 企業(yè)計(jì)劃管理培訓(xùn)課程
- 2025年學(xué)校班主任班級(jí)工作方案措施
- 管理學(xué)實(shí)訓(xùn)報(bào)告
- 小學(xué)語(yǔ)文教師基本功筆試試卷
- 酒具相關(guān)知識(shí)培訓(xùn)課件
- 2025年幼兒園秋季資助工作方案
- 綿陽(yáng)職業(yè)技術(shù)學(xué)院《日語(yǔ)精讀》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東省江門蓬江區(qū)五校聯(lián)考2025屆初三中考5月模擬考試物理試題含解析
- MySQL數(shù)據(jù)庫(kù)PPT完整全套教學(xué)課件
- 華為內(nèi)訓(xùn)書(shū)系 華為管理三部曲(套裝全三冊(cè))
- 國(guó)際化妝品原料標(biāo)準(zhǔn)中文名稱目錄
- 定點(diǎn)醫(yī)療機(jī)構(gòu)接入驗(yàn)收申請(qǐng)表
- 漢語(yǔ)教程第二冊(cè)(上)課后習(xí)題與講解
- 第四章特殊兒童的基本概況
- 激光切割機(jī)日常點(diǎn)檢表
- GB/T 7307-200155°非密封管螺紋
- GB 13094-2007客車結(jié)構(gòu)安全要求
- 部編人教版五年級(jí)語(yǔ)文下冊(cè)第三單元優(yōu)秀課件
- 5G網(wǎng)絡(luò)切片技術(shù)課件
評(píng)論
0/150
提交評(píng)論