基于Linux的嵌入式操作系統(tǒng)的研究與設(shè)計(jì)_第1頁(yè)
基于Linux的嵌入式操作系統(tǒng)的研究與設(shè)計(jì)_第2頁(yè)
基于Linux的嵌入式操作系統(tǒng)的研究與設(shè)計(jì)_第3頁(yè)
基于Linux的嵌入式操作系統(tǒng)的研究與設(shè)計(jì)_第4頁(yè)
基于Linux的嵌入式操作系統(tǒng)的研究與設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩65頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、武 漢 大 學(xué)碩 士 學(xué) 位 論 文基于Linux的嵌入式操作系統(tǒng)的研究與設(shè)計(jì)Research and Design of Embedded Operating System Based on Linux第一章 引言PAGE - -PAGE III摘 要在后PC時(shí)代,對(duì)嵌入式系統(tǒng)的研究與開(kāi)發(fā)成為當(dāng)前的一個(gè)熱點(diǎn),嵌入式系統(tǒng)蘊(yùn)含著巨大的市場(chǎng)需求,其應(yīng)用已滲透到了各行各業(yè)。Linux是一種通用而且適合于嵌入式系統(tǒng)的操作系統(tǒng),它既可以嵌入到一個(gè)非常小的系統(tǒng)中處理簡(jiǎn)單的任務(wù),也可以組合起來(lái)處理非常復(fù)雜的任務(wù)。因此,對(duì)嵌入式Linux的研究具有非常重要的意義。通過(guò)對(duì)Linux內(nèi)核源代碼和嵌入式系統(tǒng)特殊性的

2、分析,作者給出了嵌入式Linux的開(kāi)發(fā)步驟并討論了在開(kāi)發(fā)過(guò)程中的一些重要問(wèn)題。由于Linux實(shí)時(shí)性能的缺陷,而嵌入式系統(tǒng)往往要應(yīng)用到實(shí)時(shí)性能要求很高的環(huán)境,作者對(duì)Linux進(jìn)程管理部分進(jìn)行了深入分析,提出了添加實(shí)時(shí)內(nèi)核,改進(jìn)實(shí)時(shí)調(diào)度方式等方法來(lái)增強(qiáng)Linux的實(shí)時(shí)性能,使其適應(yīng)嵌入式系統(tǒng)的實(shí)時(shí)需求。本文對(duì)Linux文件管理和虛擬文件系統(tǒng)進(jìn)行了分析,比較了各種可用于嵌入式系統(tǒng)的文件系統(tǒng),并提出了構(gòu)建嵌入式文件系統(tǒng)的基本方法。根據(jù)嵌入式系統(tǒng)存儲(chǔ)空間小和實(shí)時(shí)性要求高的特點(diǎn),作者對(duì)Linux的虛擬內(nèi)存機(jī)制進(jìn)行了改造,并提出了兩種改進(jìn)方案,一種是通過(guò)直接修改內(nèi)核源代碼來(lái)徹底去掉虛擬內(nèi)存機(jī)制,另一種是通過(guò)

3、將交換空間置零的方法來(lái)消除虛擬內(nèi)存機(jī)制的不利影響。MiniGUI是一個(gè)優(yōu)秀的圖形用戶(hù)界面,本文詳細(xì)分析了MiniGUI的原理和機(jī)制,并對(duì)基于MiniGUI的圖形應(yīng)用開(kāi)發(fā)做了簡(jiǎn)單討論。最后,本文還詳細(xì)討論了Linux的設(shè)備管理機(jī)制,并對(duì)設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)方式進(jìn)行了歸納總結(jié)。通過(guò)舉例說(shuō)明了字符設(shè)備的驅(qū)動(dòng)程序的開(kāi)發(fā)方式,對(duì)塊設(shè)備和網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng)程序開(kāi)發(fā)也進(jìn)行了簡(jiǎn)要介紹。關(guān)鍵字:嵌入式Linux實(shí)時(shí)虛擬內(nèi)存管理MiniGUI設(shè)備驅(qū)動(dòng)程序AbstractIn the pervasive computing, research and development for embedded systems ha

4、ve become a hotspot currently. The huge market demand is latent in embedded systems, and embedded systems have already applied to every walk of life. Linux is a versatile and cost effective operating system for embedded systems. It can be embedded in a surprisingly small system to handle simple task

5、s and scaled up to handle more complex tasks. Therefore, the research for embedded linux is very important. Through the analysis of linux kernel source code and specificity of embedded systems, the author presents steps of development for embedded linux and discusses some important problem which wil

6、l be met in developing. Because of the shortage of real-time performance, and because embedded systems are applied to the environment which requires a very high real-time performance, the author analyzes process management of linux thoroughly. Moreover, the author present the approach of strengtheni

7、ng linux real-time performance through adding real-time kernel and reforming real-time scheduling. By these ways, linux will meet the real-time demand of embedded systems. This term analyzes file system management and virtual file system of linux and hase a comparitson among many file system of embe

8、dded systems. Then, the author present the fundamental approach of building embedded file system. According to the feature of small memory space and high real-time demand of embedded system, the author reforms virtual memory management mechanism of linux and present two reforming approach: one is th

9、at virtual memory management mechanism is got rid of through modifying linux kernel source code; the other is that virtual memory management mechanism is taken off through putting the size of switch space into zero.MiniGUI is a excellent graphics user interface. This term analyzes the principle and

10、mechanism of MiniGUI in detail, and discusses the development of MiniGUI applications. At last, this term discusses the device management mechanism of linux, and concludes the developing approaches of device driver. Through a example the developing approaches of character device driver are explained

11、, and the developing approaches of block device driver and network device also are introduced briefly.Keywords: embedded linux, real-time, virtual memory management, MiniGUI,device driver目 錄摘 要IAbstractII引 言第1章 緒 論11.1 嵌入式系統(tǒng)概況11.2 嵌入式操作系統(tǒng)的特點(diǎn)和發(fā)展31.3 嵌入式Linux的優(yōu)勢(shì)和發(fā)展現(xiàn)狀41.4 嵌入式Linux系統(tǒng)研究中的問(wèn)題6第2章 嵌入式Linux系

12、統(tǒng)的構(gòu)建82.1 嵌入式Linux的開(kāi)發(fā)流程82.2 構(gòu)建嵌入式Linux的關(guān)鍵問(wèn)題92.3 嵌入式Linux開(kāi)發(fā)的步驟11第3章 嵌入式Linux實(shí)時(shí)性能的改造183.1 Linux進(jìn)程管理的實(shí)時(shí)性能分析183.2 Linux在實(shí)時(shí)性方面的缺陷和關(guān)鍵問(wèn)題203.3 嵌入式Linux實(shí)時(shí)化改造方法21第4章 嵌入式Linux系統(tǒng)的文件系統(tǒng)264.1 Linux的文件系統(tǒng)管理264.2 各種不同的文件系統(tǒng)274.3 適合嵌入式環(huán)境的文件系統(tǒng)30第5章 嵌入式Linux系統(tǒng)的存儲(chǔ)管理315.1 Linux的存儲(chǔ)管理315.2 Linux內(nèi)存管理用于嵌入式系統(tǒng)的問(wèn)題355.3 改進(jìn)Linux的存儲(chǔ)管

13、理36第6章 嵌入式Linux中的圖形用戶(hù)界面406.1 MiniGUI簡(jiǎn)介406.2 MiniGUI的兩個(gè)版本426.3 基于Linux 和 MiniGUI 的嵌入式系統(tǒng)軟件開(kāi)發(fā)45第7章 嵌入式Linux下設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)517.1 Linux設(shè)備管理簡(jiǎn)介517.2 設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)53第8章 結(jié)束語(yǔ)59參考文獻(xiàn)60致 謝62引 言隨著計(jì)算機(jī)技術(shù)的發(fā)展,嵌入式系統(tǒng)已成為計(jì)算機(jī)領(lǐng)域的一個(gè)重要組成部分。嵌入式系統(tǒng)的廣泛應(yīng)用,已經(jīng)深入到我們?nèi)粘I钪?,在手機(jī)、PDA、機(jī)頂盒、汽車(chē)、微波爐、自動(dòng)售貨機(jī)、醫(yī)療儀器、信息家電等方面都有嵌入式系統(tǒng)的身影。事實(shí)上,嵌入式系統(tǒng)在數(shù)量上已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)了各種通

14、用計(jì)算機(jī),并將在信息產(chǎn)業(yè)中占有越來(lái)越重要的位置。由于Linux具有低費(fèi)用、高性能的特點(diǎn),使Linux系統(tǒng)成為嵌入式操作系統(tǒng)的新寵。理想的嵌入式操作系統(tǒng)的特點(diǎn)是:適應(yīng)于多種CPU和多種硬件平臺(tái);性能穩(wěn)定,剪裁性很好;開(kāi)法和使用都很容易,生成的代碼質(zhì)量高,可靠性好;有一定的實(shí)時(shí)處理能力,并且能接入Internet。而所有這些特點(diǎn)Linux都具有,這些優(yōu)勢(shì)使Linux成為了嵌入式操作系統(tǒng)的首選。嵌入式Linux的開(kāi)發(fā)與應(yīng)用在國(guó)外已經(jīng)是如火如荼了,許多Linux的改良品種已被開(kāi)發(fā)出來(lái)并應(yīng)用于各種嵌入式系統(tǒng)。它們包括RTLinux(實(shí)時(shí)Linux)、clinux(用于非 MMU 設(shè)備的 Linux)、M

15、ontavista Linux(用于ARM、MIPS、PPC 的 Linux 分發(fā)版)、ARM-Linux(ARM 上的 Linux)和其它 Linux 系統(tǒng)。在國(guó)內(nèi),也出現(xiàn)了幾個(gè)有代表性的優(yōu)秀嵌入式Linux系統(tǒng),紅旗嵌入式Linux就是其中一個(gè)典型的例子。本文作者在攻讀碩士學(xué)位研究生階段一直在從事車(chē)載GPS導(dǎo)航系統(tǒng)和車(chē)載嵌入式平臺(tái)等相關(guān)研究和開(kāi)發(fā)工作,并在這些工作中深刻體會(huì)到開(kāi)發(fā)滿(mǎn)足特定需求、擁有自主版權(quán)的嵌入式操作系統(tǒng)的必要性。作者通過(guò)對(duì)Linux內(nèi)核源代碼和嵌入式系統(tǒng)特點(diǎn)的分析,對(duì)嵌入式Linux的設(shè)計(jì)與開(kāi)發(fā)做了深入的探討,并對(duì)嵌入式環(huán)境下文件系統(tǒng)的選擇與開(kāi)發(fā)、實(shí)時(shí)性能的提高、內(nèi)存管理

16、的改造提出了一些看法,對(duì)嵌入式系統(tǒng)GUI和驅(qū)動(dòng)程序的開(kāi)發(fā)進(jìn)行了介紹和歸納。由于時(shí)間的限制,加之本人的水平有限,不足之處在所難免,希望老師和同學(xué)不吝指正?;贚inux的嵌入式操作系統(tǒng)的研究與設(shè)計(jì) PAGE 63第1章 緒 論隨著多媒體技術(shù)、通訊技術(shù)相結(jié)合的信息時(shí)代的快速發(fā)展和互聯(lián)網(wǎng)的廣泛應(yīng)用。計(jì)算機(jī)、通信、消費(fèi)電子一體化趨勢(shì)日益明顯,我們也從時(shí)代過(guò)渡到了后時(shí)代。在當(dāng)前的數(shù)字信息技術(shù)和網(wǎng)絡(luò)技術(shù)高速發(fā)展的后時(shí)代,嵌入式技術(shù)越來(lái)越和人們的生活緊密結(jié)合。嵌入式系統(tǒng)可存在于生活的各方面,從家里的電視機(jī)、洗衣機(jī)等家電,到汽車(chē)等交通工具,到辦公室里的遠(yuǎn)程會(huì)議系統(tǒng)等等,都屬于可以使用嵌入式技術(shù)開(kāi)發(fā)和改造的產(chǎn)品

17、。因此,研究與嵌入式系統(tǒng)有關(guān)的關(guān)鍵技術(shù)嵌入式操作系統(tǒng)有著相當(dāng)重要的實(shí)際意義。1.1 嵌入式系統(tǒng)概況嵌入式系統(tǒng)(Embedded System)被定義為:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,適應(yīng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)是將應(yīng)用程序和操作系統(tǒng)與計(jì)算機(jī)硬件集成在一起的系統(tǒng)。簡(jiǎn)單的說(shuō)就是系統(tǒng)的應(yīng)用軟件與系統(tǒng)的硬件一體化,類(lèi)似于BIOS的工作方式。這種系統(tǒng)具有軟件代碼小,高度自動(dòng)化,響應(yīng)速度快等特點(diǎn),特別適應(yīng)于要求實(shí)時(shí)的和多任務(wù)的體系。嵌入式系統(tǒng)早在20世紀(jì)60年代就出現(xiàn)了。在通信領(lǐng)域中,嵌入式系統(tǒng)被用來(lái)控制電話(huà)的電子式機(jī)械交換,并被稱(chēng)為 “存儲(chǔ)

18、程控控制系統(tǒng)”。嵌入式系統(tǒng)的真正發(fā)展是在微處理器問(wèn)世之后。微處理器的廣泛應(yīng)用形成了一個(gè)廣闊的嵌入式應(yīng)用市場(chǎng),計(jì)算機(jī)廠家開(kāi)始大量的以插件方式向用戶(hù)提供OEM產(chǎn)品,在由用戶(hù)根據(jù)自己的需要選擇一套適合的CPU板、存儲(chǔ)器板以及各式I/O插件板,從而構(gòu)成專(zhuān)用的嵌入式計(jì)算機(jī)系統(tǒng),并將其嵌入到自己的系統(tǒng)設(shè)備中。隨著微電子工藝水平的提高,單片機(jī)出現(xiàn)了并成為嵌入式計(jì)算機(jī)系統(tǒng)異軍突起的一支新秀。其后發(fā)展的DSP產(chǎn)品進(jìn)一步提升了嵌入式計(jì)算機(jī)系統(tǒng)的技術(shù)水平。20世紀(jì)90年代,在分布控制、柔性制造、數(shù)字化通信和信息家電等巨大需求的牽引力下,嵌入式系統(tǒng)進(jìn)一步加速發(fā)展,并迅速地滲入到消費(fèi)電子、醫(yī)用電子、智能控制、通信電子、

19、儀器儀表、交通運(yùn)輸?shù)雀鞣N領(lǐng)域。嵌入式系統(tǒng)的特征可分為以下幾個(gè)部分:1. 硬件特征嵌入式系統(tǒng)是面向用戶(hù)、面向產(chǎn)品、面向應(yīng)用的,如果獨(dú)立于應(yīng)用自行發(fā)展,則會(huì)失去市場(chǎng)。嵌入式處理器的功耗、體積、成本、可靠性、速度、處理能力、電磁兼容性等方面均受到應(yīng)用要求的制約,這些也是各個(gè)半導(dǎo)體廠商之間競(jìng)爭(zhēng)的熱點(diǎn)。和通用計(jì)算機(jī)不同,嵌入式系統(tǒng)的硬件和軟件都必須高效率地設(shè)計(jì),量體裁衣、去處冗余,力爭(zhēng)在同樣的硅片面積上實(shí)現(xiàn)更高的性能,這樣才能在具體應(yīng)用對(duì)處理器的選擇面前更具有競(jìng)爭(zhēng)力。嵌入式系統(tǒng)中的軟件,一般都固化在只讀存儲(chǔ)器中,而不是以磁盤(pán)為載體,可以隨意更換,所以嵌入式系統(tǒng)的應(yīng)用軟件生命周期也和嵌入式產(chǎn)品一樣長(zhǎng),而且

20、更強(qiáng)調(diào)可繼承性和技術(shù)銜接性。2. 系統(tǒng)軟件和應(yīng)用軟件嵌入式處理器的應(yīng)用軟件是實(shí)現(xiàn)嵌入式系統(tǒng)功能的關(guān)鍵,對(duì)嵌入式處理器系統(tǒng)軟件和應(yīng)用軟件的要求也和通用計(jì)算機(jī)不同。(1) 軟件要求固態(tài)化存儲(chǔ)(2) 軟件代碼高質(zhì)量、高可靠性(3) 系統(tǒng)軟件的高實(shí)時(shí)性是基本要求(4) 多任務(wù)操作系統(tǒng)是知識(shí)集成的平臺(tái)和走向工業(yè)標(biāo)準(zhǔn)化道路的基礎(chǔ)3. 開(kāi)發(fā)工具和環(huán)境嵌入式系統(tǒng)本身不具備自舉開(kāi)發(fā)能力,必須有一套開(kāi)發(fā)工具和環(huán)境才能進(jìn)行開(kāi)發(fā)。4. EOS(嵌入式操作系統(tǒng))開(kāi)發(fā)平臺(tái)對(duì)于嵌入式系統(tǒng),應(yīng)用程序可以沒(méi)有操作系統(tǒng)直接在芯片上運(yùn)行,但是為了合理地調(diào)度多任務(wù),利用系統(tǒng)資源、系統(tǒng)函數(shù)、以及和專(zhuān)家?guī)旌瘮?shù)接口,用戶(hù)必須自行選配EOS

21、開(kāi)發(fā)平臺(tái),這樣才能保證程序執(zhí)行的實(shí)時(shí)性、可靠性,并減少開(kāi)發(fā)時(shí)間,保障軟件質(zhì)量。一個(gè)優(yōu)秀的EOS是嵌入式系統(tǒng)成功的關(guān)鍵。1.2 嵌入式操作系統(tǒng)的特點(diǎn)和發(fā)展嵌入式操作系統(tǒng)主要分為以下三種類(lèi)型:1. 非實(shí)時(shí)嵌入式操作系統(tǒng)這類(lèi)操作系統(tǒng)不提供硬實(shí)時(shí)功能。如果必須嚴(yán)格滿(mǎn)足時(shí)間的限制,這類(lèi)操作系統(tǒng)就不適合。其中的系統(tǒng)調(diào)用為不需要實(shí)時(shí)相應(yīng)的任務(wù)提供進(jìn)程管理、內(nèi)存管理以及I/O管理。2. 實(shí)時(shí)操作系統(tǒng)這類(lèi)操作系統(tǒng)為獲得實(shí)時(shí)的時(shí)間期限提供必要的系統(tǒng)調(diào)用。3. 移動(dòng)/手持式操作系統(tǒng)調(diào)整到適于移動(dòng)環(huán)境的操作系統(tǒng)稱(chēng)為移動(dòng)/手持式操作系統(tǒng)。但是,很多實(shí)時(shí)操作系統(tǒng)也可以用作移動(dòng)/手持式操作系統(tǒng)。嵌入式操作系統(tǒng)并不是簡(jiǎn)單嵌入

22、的操作系統(tǒng),它與通常意義上的操作系統(tǒng)有一定的區(qū)別。嵌入式操作系統(tǒng)負(fù)責(zé)嵌入式系統(tǒng)的全部軟、硬資源的分配、調(diào)度工作,控制協(xié)調(diào)并發(fā)活動(dòng),它必須體現(xiàn)所在系統(tǒng)的特征,能夠通過(guò)裝卸某些模塊來(lái)達(dá)到系統(tǒng)所要求的功能。嵌入式操作系統(tǒng)具有如下一些特征:小巧、實(shí)時(shí)性、可裝卸、固化代碼、弱交互性、強(qiáng)穩(wěn)定性和統(tǒng)一的接口。簡(jiǎn)單的嵌入式系統(tǒng)一般并不使用操作系統(tǒng),只包含一些控制流程,但是當(dāng)嵌入式系統(tǒng)所提供的功能復(fù)雜化之后(如:圖形用戶(hù)界面和網(wǎng)絡(luò)支持等),簡(jiǎn)單的流程控制就不能滿(mǎn)足系統(tǒng)的要求,這時(shí)就必須考慮使用操作系統(tǒng)做系統(tǒng)軟件。這時(shí),嵌入式操作系統(tǒng)(Embedded Operating System ,EOS)就應(yīng)運(yùn)而生。一個(gè)

23、最小的嵌入式系統(tǒng)僅需如下基本組成部分:1. 一個(gè)用作引導(dǎo)的可用設(shè)施(工具)2. 一個(gè)具備內(nèi)存管理,進(jìn)程管理,和定時(shí)器服務(wù)的Linux微內(nèi)核3. 一個(gè)初始進(jìn)程為了讓上面的最小嵌入式系統(tǒng)變得有一定實(shí)用性,尚需加上一些東西:1. 硬件的驅(qū)動(dòng)程序2. 一個(gè)或幾個(gè)應(yīng)用進(jìn)程以提供必要的應(yīng)用功效隨著對(duì)系統(tǒng)要求的增加,也許還要用到下面這些組件1. 一個(gè)文件系統(tǒng)(或許放在ROM或RAM中)2. TCP/IP 網(wǎng)絡(luò)協(xié)議棧3. 一個(gè)磁盤(pán)用來(lái)存放半易失性數(shù)據(jù)和提供交換能力隨著EOS的廣泛應(yīng)用,業(yè)界已推出一些應(yīng)用比較成功的EOS產(chǎn)品。隨著各種應(yīng)用的出現(xiàn),EOS也從單一的弱功能向高專(zhuān)業(yè)化的強(qiáng)功能方向發(fā)展,歸納起來(lái)EOS應(yīng)

24、該有以下幾個(gè)特點(diǎn):小的系統(tǒng)內(nèi)核、較強(qiáng)的實(shí)時(shí)性、多任務(wù)功能、能夠提供各種設(shè)備驅(qū)動(dòng)程序、提供圖形界面、提供TCP/IP、PPP等協(xié)議支持。嵌入式OS 比PC的OS相對(duì)簡(jiǎn)單,但由于各種嵌入式系統(tǒng)產(chǎn)品中包含不相同的特殊需求,致使這類(lèi)系統(tǒng)中使用的OS不下幾百種,如Windows CE、Palm OS、VxWork、PSOS、UNX、PowerTV、JavaOS、LynxOS和Nucleus等。至今仍有50%的開(kāi)發(fā)者使用自行開(kāi)發(fā)的OS。目前,市面上這些商業(yè)性嵌入式系統(tǒng)都在努力地為自己爭(zhēng)取著嵌入式市場(chǎng)的份額。但是,這些專(zhuān)用操作系統(tǒng)均屬于商業(yè)化產(chǎn)品,價(jià)格昂貴;而且,由于它們各自的源代碼不公開(kāi),使得每個(gè)系統(tǒng)上的

25、應(yīng)用軟件與其它系統(tǒng)都無(wú)法兼容。并且,由于這種封閉性還導(dǎo)致了商業(yè)嵌入式系統(tǒng)在對(duì)各種設(shè)備的支持方面存在很大的問(wèn)題,使得對(duì)它們的軟件移植變得很困難。在嵌入式這個(gè)IT產(chǎn)業(yè)的新的關(guān)鍵領(lǐng)域,Linux操作系統(tǒng)適時(shí)地出現(xiàn)在了國(guó)際和國(guó)內(nèi)各嵌入式廠商面前,由于Linux自身諸多優(yōu)勢(shì),吸引了許多開(kāi)發(fā)商的目光,成為嵌入式操作系統(tǒng)的新寵。它的出現(xiàn)無(wú)疑為國(guó)家發(fā)展嵌入式操作系統(tǒng)事業(yè)提供了一個(gè)極有吸引力的機(jī)會(huì)。1.3 嵌入式Linux的優(yōu)勢(shì)和發(fā)展現(xiàn)狀Linux是一種UNIX類(lèi)操作系統(tǒng)。它兼容POSIX 1003.1標(biāo)準(zhǔn),并包含了UNIX System V與BSD 4.3的大部分特征,如多任務(wù)支持、多用戶(hù)支持、多處理器支持、

26、跨平臺(tái)支持、按需調(diào)入執(zhí)行、分頁(yè)機(jī)制、動(dòng)態(tài)外存緩存、共享庫(kù)支持、POSIX 1003.1支持、多種不同格式可執(zhí)行文件支持、內(nèi)存保護(hù)模式、支持不同種類(lèi)的文件系統(tǒng)、TCP/IP,SLIP和PPP支持等。Linux內(nèi)核的功能以及它和GPL(通用公共許可證)的結(jié)合,也是許多軟件開(kāi)發(fā)人員相信這是一個(gè)有前途的項(xiàng)目,并開(kāi)始加入到內(nèi)核的開(kāi)發(fā)工作中。他們將GUN項(xiàng)目的C庫(kù)、gcc、Emacs、bash等很快移植到Linux內(nèi)核中,并于BSD UNIX以及MIT的XII結(jié)合,使整個(gè)Linux操作系統(tǒng)得以很快形成,而且建立在穩(wěn)固的基礎(chǔ)之上。由于Linux系統(tǒng)本身采用徹底開(kāi)放、注重特性的方法進(jìn)行設(shè)計(jì),Linux內(nèi)核的新

27、版本推出速度非常得快?,F(xiàn)在正在廣泛使用的穩(wěn)定的Linux內(nèi)核2.2.X版本以及最近推出的2.4版本,就充分顯示了Linux開(kāi)發(fā)隊(duì)伍的非凡的創(chuàng)造力和協(xié)作開(kāi)發(fā)模式的價(jià)值。Linux是遵循GPL規(guī)則的多任務(wù)操作系統(tǒng),源碼公開(kāi)、價(jià)格低廉、功能強(qiáng)大、應(yīng)用豐富。嵌入式Linux是指在標(biāo)準(zhǔn)Linux基礎(chǔ)上經(jīng)過(guò)裁剪、修改,適用于嵌入式系統(tǒng)的專(zhuān)用Linux系統(tǒng)。Linux作為嵌入式操作系統(tǒng)的優(yōu)勢(shì)表現(xiàn)在以下幾個(gè)方面:1. 免許可證費(fèi)用2. 有很高的穩(wěn)定性3. 強(qiáng)大的網(wǎng)絡(luò)功能4. 豐富的開(kāi)發(fā)工具5. 大量的文擋Linux自身的特點(diǎn)完全能夠滿(mǎn)足嵌入式操作系統(tǒng)的基本要求。嵌入式系統(tǒng)要求操作系統(tǒng)滿(mǎn)足它的實(shí)時(shí)性和多任務(wù)性。

28、勿庸置疑,Linux是一個(gè)優(yōu)秀的多任務(wù)操作系統(tǒng);另外從Linux的進(jìn)程調(diào)度來(lái)看,它包含三個(gè)策略,即非實(shí)時(shí),實(shí)時(shí)先進(jìn)先出和實(shí)時(shí)基于優(yōu)先權(quán)輪轉(zhuǎn)法。在這兩點(diǎn)上,Linux是滿(mǎn)足嵌入式系統(tǒng)的要求的。嵌入式系統(tǒng)要求操作系統(tǒng)具有高效性和健壯性。Linux的內(nèi)核功能可以被劃分為若干個(gè)獨(dú)立的功能模塊,這些模塊可以按需求來(lái)加載,所以?xún)?nèi)核是可以裁剪的。Linux內(nèi)核的組織結(jié)構(gòu)是整體式結(jié)構(gòu),由很多過(guò)程組成,每個(gè)過(guò)程可以獨(dú)立編譯,然后用連接程序?qū)⑵溥B接在一起成為一個(gè)單獨(dú)的目標(biāo)程序,沒(méi)有任何程度的信息隱藏,這種結(jié)構(gòu)的內(nèi)部結(jié)構(gòu)簡(jiǎn)單,子系統(tǒng)間易于訪問(wèn),因此內(nèi)核的工作效率較高而且很穩(wěn)定。內(nèi)核的各個(gè)模塊通過(guò)一些獨(dú)特的機(jī)制使整個(gè)

29、系統(tǒng)高效運(yùn)行。Linux支持將某些模塊常駐內(nèi)存。通過(guò)將應(yīng)用程序和內(nèi)核同時(shí)儲(chǔ)留在內(nèi)存中就可以解決嵌入式系統(tǒng)沒(méi)有磁盤(pán)的問(wèn)題。Linux強(qiáng)大的功能還可以為嵌入式系統(tǒng)提供TCP/IP等網(wǎng)絡(luò)協(xié)議和Internet客戶(hù)和服務(wù)器軟件、圖形用戶(hù)界面、良好的移植性、靈活而強(qiáng)大的設(shè)備驅(qū)動(dòng)和完善的開(kāi)發(fā)調(diào)試工具。這些都說(shuō)明了Linux用于嵌入式系統(tǒng)是完全可行的,并具有廣泛的應(yīng)用前景。目前,國(guó)外不少大學(xué)、研究機(jī)構(gòu)和知名公司都加入了嵌入式Linux的開(kāi)發(fā)工作,較成熟的嵌入式Linux產(chǎn)品不斷涌現(xiàn),如RT-Linux、Embedix、uClinux等。RT-Linux是由美國(guó)新墨西哥理工學(xué)院開(kāi)發(fā)的基于標(biāo)準(zhǔn)Linux的嵌入式

30、操作系統(tǒng)。它提供了一個(gè)精巧的實(shí)時(shí)內(nèi)核,并把標(biāo)準(zhǔn)的Linux核心作為實(shí)時(shí)核心的一個(gè)進(jìn)程同用戶(hù)的實(shí)時(shí)進(jìn)程一起調(diào)度,這樣做使得對(duì)Linux的改動(dòng)量最小,充分利用了Linux下現(xiàn)有的豐富軟件資源。Embedix是由嵌入式Linux行業(yè)主要廠商之一Lineo推出的,它提供了超過(guò)25種的Linux系統(tǒng)服務(wù)并可以免費(fèi)獲得。Lineo還將計(jì)劃推出Embedix的開(kāi)發(fā)調(diào)試工具包,基于圖形界面的瀏覽器等。可以說(shuō),Embedix是一種較完整的嵌入式Linux解決方案。UClinux是專(zhuān)門(mén)用于微型控制領(lǐng)域的嵌入式Linux操作系統(tǒng),它已經(jīng)被成功的移植到了很多平臺(tái)上。值得一提的是,在國(guó)內(nèi)嵌入式Linux也得到的很大的重

31、視,并在迅速發(fā)展。廣州博利思軟件公司推出的Pocketix和中科院自行開(kāi)發(fā)的紅旗嵌入式Linux等就是最好的證明。曾被媒體炒的火熱的維納斯與女?huà)z之爭(zhēng),是用戶(hù)認(rèn)識(shí)到了嵌入式操作系統(tǒng)領(lǐng)域的巨大商機(jī)。據(jù)預(yù)測(cè),我國(guó)信息家電產(chǎn)品市場(chǎng)規(guī)模2003年將達(dá)到2000億至2500億元規(guī)模。由于Linux開(kāi)放源碼的特點(diǎn),全世界的開(kāi)發(fā)廠商都站在同一起跑線上。國(guó)內(nèi)的研究機(jī)構(gòu)和企業(yè)也正在投入人力物力,力爭(zhēng)在嵌入式操作系統(tǒng)市場(chǎng)上有所作為。但應(yīng)清醒地看到,絕大部分地嵌入式系統(tǒng)的硬件平臺(tái)還掌握在外國(guó)公司的手中。國(guó)產(chǎn)的嵌入式操作系統(tǒng)在技術(shù)含量、兼容性、市場(chǎng)運(yùn)作模式等方面還有很多工作要做,但是嵌入式操作系統(tǒng)的巨大商業(yè)價(jià)值和Lin

32、ux的開(kāi)放性,為民族軟件產(chǎn)業(yè)的發(fā)展提供了難得的機(jī)會(huì)。應(yīng)該在跟蹤國(guó)外嵌入式操作系統(tǒng)最新技術(shù)的同時(shí),堅(jiān)持自主產(chǎn)權(quán),力爭(zhēng)找到自己的突破點(diǎn),探索出一條適合中國(guó)國(guó)情的嵌入式操作系統(tǒng)的發(fā)展道路。1.4 嵌入式Linux系統(tǒng)研究中的問(wèn)題就像世上沒(méi)有萬(wàn)能鑰匙一樣,嵌入式Linux當(dāng)然也有它的不足。1. 嵌入式Linux仍然占用了很大內(nèi)存,雖然可以通過(guò)消減一些不必要的功能來(lái)改善,但這很有可能得不償失,因?yàn)閷?duì)Linux源代碼大規(guī)模的修改很可能會(huì)帶來(lái)其他的問(wèn)題。2. 大多數(shù)Linux應(yīng)用程序都會(huì)使用虛擬內(nèi)存交換,但這在很多嵌入式系統(tǒng)中會(huì)帶來(lái)很多麻煩。一方面,嵌入式系統(tǒng)大多沒(méi)有外存,或者只有很少容量的Flash(閃存

33、),這導(dǎo)致虛擬內(nèi)存交換根本沒(méi)有空間去完成;另一方面,這種虛擬內(nèi)存交換會(huì)帶來(lái)大量的缺頁(yè)中斷和系統(tǒng)調(diào)度以及進(jìn)程運(yùn)行的不確定因素提高等,這在很大程度上影響了嵌入式系統(tǒng)的性能,特別是對(duì)實(shí)時(shí)性要求很強(qiáng)的嵌入式系統(tǒng)更是如此。3. Linux的內(nèi)核的調(diào)試工具的使用仍然不是很方便。4. 盡管可以改善,但Linux的實(shí)時(shí)性能仍然不夠理想。Unix的進(jìn)程調(diào)度是以追求最大吞吐量為目標(biāo)而不是追求高實(shí)時(shí)性。由于Linux繼承了Unix這一特點(diǎn),所以要達(dá)到很好的實(shí)時(shí)性能必須大規(guī)模的修改Linux的內(nèi)核代碼。但這種代價(jià)是很高的。5. 缺乏強(qiáng)大的圖形用戶(hù)接口的支持。6. 對(duì)設(shè)備驅(qū)動(dòng)的支持仍然不夠。很多外部設(shè)備不被Linux支

34、持,只能自行開(kāi)發(fā)驅(qū)動(dòng)程序。7. Linux是一種極具適用性的操作系統(tǒng)??墒?,嵌入式系統(tǒng)在通常情況下是不具備這種性質(zhì)的;它們是對(duì)于特定的用途,進(jìn)行過(guò)仔細(xì)優(yōu)化了。但Linux的這種適用性?xún)A向,保持了系統(tǒng)的通用性和多變性,同時(shí)也是一個(gè)奢侈的目標(biāo),付出的代價(jià)很高,需要增添許多額外的工作,會(huì)有許多附加的程序產(chǎn)生,從而增加了軟件包的體積,有時(shí)還會(huì)以降低性能為代價(jià)。隨著技術(shù)的不斷發(fā)展,以上的很多問(wèn)題在一定程度上得到了改進(jìn)和增強(qiáng)。但隨著這些問(wèn)題的解決,不同系統(tǒng)對(duì)Linux的改造也增強(qiáng)了,這使得各系統(tǒng)之間的兼容性無(wú)法避免的降低了,同時(shí)還存在系統(tǒng)穩(wěn)定性降低、支持文檔有限、持續(xù)開(kāi)發(fā)難度加大等問(wèn)題。這種情況使得開(kāi)發(fā)自

35、主版權(quán)的嵌入式Linux系統(tǒng)變得非常必要了,同時(shí)深入研究嵌入式Linux系統(tǒng)也是非常必要的。本文也是一次為出發(fā)點(diǎn),對(duì)如何構(gòu)造嵌入式Linux系統(tǒng)進(jìn)行了探討,并在分析Linux內(nèi)核源代碼(Linux內(nèi)核2.4.0版)和嵌入式Linux已有研究成果的基礎(chǔ)上,對(duì)嵌入式Linux系統(tǒng)的進(jìn)程調(diào)度的實(shí)時(shí)性改進(jìn)、虛擬內(nèi)存機(jī)制的取舍、嵌入式文件系統(tǒng)的建立、圖形用戶(hù)接口的支持和設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)等方面進(jìn)行了深入分析,并提出了一些改進(jìn)方案?;贚inux的嵌入式操作系統(tǒng)的研究與設(shè)計(jì)PAGE VI第2章 嵌入式Linux系統(tǒng)的構(gòu)建2.1 嵌入式Linux的開(kāi)發(fā)流程Linux 正在嵌入式開(kāi)發(fā)領(lǐng)域穩(wěn)步發(fā)展。因?yàn)?Lin

36、ux 使用 GPL,所以任何對(duì)將 Linux 定制于嵌入式設(shè)備感興趣的人都可以從Internet免費(fèi)下載其內(nèi)核和應(yīng)用程序,并開(kāi)始移植或開(kāi)發(fā)。為了方便嵌入式系統(tǒng)的開(kāi)發(fā),目前一般采用的方式實(shí)現(xiàn)使用評(píng)估板做開(kāi)發(fā),當(dāng)在測(cè)試板上開(kāi)發(fā)、運(yùn)行、調(diào)試成功后,再根據(jù)測(cè)試板使用的硬件,裁剪掉在開(kāi)發(fā)過(guò)程中需要而一般應(yīng)用中不需要的硬件,最后做成產(chǎn)品板大量生產(chǎn)。有很多廠商提供這種評(píng)估板應(yīng)用于嵌入式系統(tǒng)開(kāi)發(fā),如ARM公司的ARM Evaluator-7T,Lineo公司的Csimm等。一般的開(kāi)發(fā)平臺(tái)都需要在評(píng)估板上提供微處理器、存儲(chǔ)芯片以及其他的外圍硬件等設(shè)備。硬件平臺(tái)的結(jié)構(gòu)如圖2-1。在軟件方面提供系統(tǒng)的開(kāi)發(fā)平臺(tái)和下載

37、工具,還有駐留在硬件上的BootLoader工具。對(duì)于由嵌入式操作系統(tǒng)的開(kāi)發(fā)平臺(tái),還需要提供操作系統(tǒng)開(kāi)發(fā)工具。 圖2-1 硬件平臺(tái)結(jié)構(gòu)一個(gè)小型的嵌入式Linux系統(tǒng)需要下面三個(gè)基本元素:1. 引導(dǎo)實(shí)用程序 2. Linux 微內(nèi)核,由內(nèi)存管理、進(jìn)程管理和定時(shí)服務(wù)構(gòu)成 3. 初始化過(guò)程 要實(shí)現(xiàn)最低限度的工作能力,還需要添加:1. 硬件驅(qū)動(dòng)程序 2.一個(gè)或多個(gè)應(yīng)用進(jìn)程,以提供所需功能 隨著要求的增加,可能還需要:1. 一個(gè)文件系統(tǒng)(可能是在 ROM 或者是 RAM 里) 2. 一個(gè)圖形用戶(hù)接口(GUI)3. TCP/IP 網(wǎng)絡(luò)棧 嵌入式Linux的實(shí)現(xiàn)步驟為:1. 重新編譯Linux內(nèi)核,去掉內(nèi)核

38、中不需要的模塊。2. 編寫(xiě)B(tài)ootLoader,制作Boot ROM用于加載嵌入式Linux內(nèi)核到內(nèi)存中。3. 重新設(shè)計(jì)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序和I/O設(shè)備驅(qū)動(dòng)程序。4. 嵌入式Linux系統(tǒng)執(zhí)行流程(如圖2-2)。圖2-2 嵌入式Linux系統(tǒng)執(zhí)行流程2.2 構(gòu)建嵌入式Linux的關(guān)鍵問(wèn)題2.2.1嵌入式Linux的引導(dǎo)當(dāng)一個(gè)微處理器第一次啟動(dòng)的時(shí)候,它開(kāi)始在預(yù)先設(shè)置的地址上執(zhí)行指令。通常在那里有一些只讀內(nèi)存,包括初始化或引導(dǎo)代碼。在PC上,這是BIOS。它執(zhí)行了一些低水平的CPU初始化和其它硬件的配置。BIOS繼續(xù)辨認(rèn)哪個(gè)磁盤(pán)里有操作系統(tǒng),把操作系統(tǒng)復(fù)制到RAM并且轉(zhuǎn)向它。在PC上運(yùn)行的Linux

39、依靠PC的BIOS來(lái)提供這些配置和OS加載功能。在一個(gè)嵌入式系統(tǒng)里經(jīng)常沒(méi)有這種BIOS。嵌入式系統(tǒng)通常只需要處理一個(gè)硬件的配置。這個(gè)代碼很簡(jiǎn)單,只是一個(gè)指令清單,將固定的數(shù)字填充到硬件寄存器中去。這個(gè)代碼也很重要,因?yàn)檫@些數(shù)值要與你的硬件相符并且要按照特定的順序進(jìn)行。這些啟動(dòng)代碼完全根據(jù)硬件決定,不可隨意移動(dòng)。許多系統(tǒng)都有為核心微處理器和內(nèi)存所定制的菜單式硬件設(shè)計(jì)。典型的是,芯片制造商有一個(gè)樣本主板,可以用來(lái)作為設(shè)計(jì)的參考。通常這些菜單式設(shè)計(jì)的啟動(dòng)代碼是可以獲得的,它可以根據(jù)你的需要輕易的修改。在少數(shù)情況下,啟動(dòng)代碼需要重新編寫(xiě)。這個(gè)代碼最終要在較為穩(wěn)定的內(nèi)存上運(yùn)行,通常是Flash或EPRO

40、M芯片。需要使用一些方法將代碼放在芯片上。一種流行的方法是把Flash或EPROM芯片插入EPROM或Flash燒制器。這將把你的程序“燒”入芯片。2.2.2 虛擬內(nèi)存的取舍標(biāo)準(zhǔn)Linux具備虛擬內(nèi)存的能力。正是這種特征使應(yīng)用程序員可以編寫(xiě)代碼而不需考慮程序有多大,當(dāng)程序比分配給它的內(nèi)存空間大時(shí),多余部分會(huì)溢出到了磁盤(pán)交換區(qū)。但在沒(méi)有磁盤(pán)的嵌入式系統(tǒng)里,通常不能這么做。在嵌入式系統(tǒng)里不需要這種強(qiáng)大的功能,特別是在實(shí)時(shí)系統(tǒng)中,因?yàn)樗鼤?huì)帶來(lái)無(wú)法控制的時(shí)間因素。2.2.3 選用合適的文件系統(tǒng)許多嵌入式系統(tǒng)沒(méi)有磁盤(pán)或者文件系統(tǒng),Linux不需要它們也能運(yùn)行。在這種情況下,應(yīng)用程序任務(wù)可以和內(nèi)核一起編寫(xiě)

41、,并且在引導(dǎo)時(shí)作為一個(gè)影像加載。對(duì)于簡(jiǎn)單的系統(tǒng)來(lái)說(shuō),這就足夠了。但是,它缺乏靈活性。許多商業(yè)性嵌入式系統(tǒng)提供了文件系統(tǒng)作為選項(xiàng)。許多是專(zhuān)用的文件系統(tǒng)或者是MS DOS Compatible文件系統(tǒng)。Linux 提供MS DOS Compatible文件系統(tǒng),同時(shí)還有其它多種選擇、之所以提供其它選擇是因?yàn)樗鼈兏訌?qiáng)大而且具有容錯(cuò)功能。文件系統(tǒng)可以被放在傳統(tǒng)的磁盤(pán)驅(qū)動(dòng)器、FlashMemory或其它這類(lèi)的介質(zhì)上。而且,用于暫時(shí)保存文件,一個(gè)小RAM盤(pán)就足夠了。FlashMemories被分割成塊。這些塊中也許包括一個(gè)含有當(dāng)CPU啟動(dòng)時(shí)運(yùn)行的最初的軟件的引導(dǎo)塊。這可能包括Linux引導(dǎo)代碼,剩余的F

42、lash可以用作文件系統(tǒng)。Linux的內(nèi)核可以通過(guò)引導(dǎo)代碼從Flash復(fù)制到RAM,或者,內(nèi)核可以被存儲(chǔ)在Flash的一個(gè)獨(dú)立部分并直接從那里執(zhí)行。另外,對(duì)于一些系統(tǒng)來(lái)說(shuō)還有一個(gè)選擇。那就是將一個(gè)便宜的CDROM包含在內(nèi)。這比FlashMemory便宜,而且通過(guò)交換CDROM支持簡(jiǎn)單的升級(jí)。Linux只要從CDROM上引導(dǎo),就像從硬盤(pán)上一樣從CDROM獲得所有的程序。2.2.4 選擇合適的實(shí)時(shí)性實(shí)時(shí)的含義是指在規(guī)定的時(shí)限內(nèi)能夠傳遞正確的結(jié)果,遲到的結(jié)果就是錯(cuò)誤。實(shí)時(shí)系統(tǒng)并非是指“快速”的系統(tǒng),實(shí)時(shí)系統(tǒng)有限定的響應(yīng)時(shí)間,從而使系統(tǒng)具有可預(yù)測(cè)性。實(shí)時(shí)系統(tǒng)又可以分為“硬實(shí)時(shí)系統(tǒng)”和“軟實(shí)時(shí)系統(tǒng)”。二

43、者的區(qū)別在于:前者如果在不滿(mǎn)足響應(yīng)時(shí)限、響應(yīng)不及時(shí)或反應(yīng)過(guò)早的情況下都會(huì)導(dǎo)致災(zāi)難性的后果(如航空航天系統(tǒng));而后者則在不滿(mǎn)足響應(yīng)時(shí)限時(shí),系統(tǒng)性能退化,但并不會(huì)導(dǎo)致災(zāi)難性的后果(如交換系統(tǒng))。在嵌入式領(lǐng)域中,實(shí)時(shí)并非是最重要的。嵌入式系統(tǒng)常常被錯(cuò)誤地分為實(shí)時(shí)系統(tǒng),盡管多數(shù)系統(tǒng)一般并不要求實(shí)時(shí)功能。如上文所述實(shí)時(shí)是一個(gè)相對(duì)的詞,常常被嚴(yán)格地定義實(shí)時(shí)為對(duì)一事件以預(yù)定的方式在極短的時(shí)間如微秒作出響應(yīng)。因此,需要怎樣的實(shí)時(shí)性能決定于嵌入式Linux應(yīng)用于一個(gè)什么樣的實(shí)際情況。2.3 嵌入式Linux開(kāi)發(fā)的步驟2.3.1 精簡(jiǎn)Linux內(nèi)核由于嵌入式系統(tǒng)的功能和存儲(chǔ)空間的限制,安裝一個(gè)完整的Linux系統(tǒng)

44、是不可能的,也是不必要的。因此,必須對(duì)Linux內(nèi)核進(jìn)行精簡(jiǎn)和配置。通過(guò)修改內(nèi)核代碼來(lái)達(dá)到定制的目的是比較危險(xiǎn)的,很容易造成代碼的不穩(wěn)定或者喪失代碼的靈活性。比較安全的辦法是選擇合適版本的內(nèi)核,然后通過(guò)內(nèi)核選項(xiàng)的配置獲得既滿(mǎn)足應(yīng)用功能要求同時(shí)體積又小的內(nèi)核??梢允褂胢ake xconfig把所有不需要的選項(xiàng)都去掉,例如只留下i586 CPU、IDE設(shè)備驅(qū)動(dòng)、TCP/IP協(xié)議棧、網(wǎng)卡驅(qū)動(dòng)、文件系統(tǒng)、GUI等。當(dāng)然,內(nèi)核的精簡(jiǎn)與配置也不是越小越好,要根據(jù)特定的應(yīng)用領(lǐng)域和存儲(chǔ)空間的實(shí)際大小和系統(tǒng)整體性能來(lái)全面考慮,最終的目的是達(dá)到性能最優(yōu)化。2.3.2 系統(tǒng)啟動(dòng)裝有Linux的x86 PC機(jī)啟動(dòng)時(shí),

45、BIOS讀取MBR內(nèi)的內(nèi)核引導(dǎo)程序(bootloader),如LILO,并將其裝入內(nèi)存運(yùn)行。之后LILO裝載內(nèi)核到內(nèi)存并跳轉(zhuǎn)到Linux內(nèi)核,將控制權(quán)移交給內(nèi)核。而在嵌入式平臺(tái)上沒(méi)有設(shè)計(jì)專(zhuān)用的BIOS芯片,其中的內(nèi)核引導(dǎo)程序直接固化在Flash(或E2PROM等其它存儲(chǔ)介質(zhì))上。嵌入式Linux bootloader的載入,通??梢酝ㄟ^(guò)在宿主機(jī)上運(yùn)行專(zhuān)門(mén)的Flash燒寫(xiě)工具軟件來(lái)實(shí)現(xiàn)。bootloader程序能夠完成以下功能:初始化CPU速度、初始化存儲(chǔ)器(包括激活存儲(chǔ)器)、初始化存儲(chǔ)器配置寄存器等、初始化串口、USB口和以太網(wǎng)口、激活指令 / 數(shù)據(jù)cache、建立堆棧指針、建立啟動(dòng)參數(shù)區(qū),構(gòu)

46、造參數(shù)結(jié)構(gòu)和標(biāo)識(shí)列表,因?yàn)閮?nèi)核需要利用啟動(dòng)參數(shù)來(lái)識(shí)別根設(shè)備、頁(yè)面大小、存儲(chǔ)器大小等;通過(guò)上電自檢來(lái)識(shí)別存在哪些設(shè)備,并報(bào)告異常、提供對(duì)電源管理中休眠恢復(fù)的支持、跳轉(zhuǎn)到內(nèi)核起始處。bootloader的參數(shù)結(jié)構(gòu)、內(nèi)核和文件系統(tǒng)在嵌入式系統(tǒng)中的典型布局如下: /* 存儲(chǔ)器起始地址 */ bootloader 啟動(dòng)參數(shù)區(qū) 內(nèi)核駐留區(qū) 文件系統(tǒng) /* 存儲(chǔ)器結(jié)束地址 */內(nèi)核啟動(dòng)之后需要執(zhí)行的第一個(gè)函數(shù)是start_kernel()(linux/init/main.c)。它完成一系列初始化的工作。start_kernel()首先調(diào)用setup_arch()來(lái)完成與體系結(jié)構(gòu)有關(guān)的初始化,包括初始化硬件寄

47、存器、識(shí)別根設(shè)備并加載系統(tǒng)中的DRAM和Flash、指明系統(tǒng)中有多少頁(yè)、文件系統(tǒng)的大小等。所有這些信息的缺省值均通過(guò)參數(shù)形式從bootloader傳遞給內(nèi)核。大多數(shù)2.4.x的內(nèi)核通過(guò)標(biāo)識(shí)列表傳遞參數(shù)。在標(biāo)識(shí)列表中,每個(gè)標(biāo)識(shí)包含一個(gè)tag_header,標(biāo)明所傳遞的參數(shù),其后是參數(shù)值。標(biāo)識(shí)列表中tag的一般格式如下:#define struct u32 ;u32 ;下面是一個(gè)傳遞存儲(chǔ)信息標(biāo)識(shí)示例:#define ATAG_MEM 0 x54410002 /* 幻數(shù) */struct tag_mem32 u32 size; /* 存儲(chǔ)器的大小 */u32 start; /* 存儲(chǔ)器的物理起始地址

48、 */ setup_arch()還要完成Flash存儲(chǔ)器、系統(tǒng)寄存器和其它具體器件的存儲(chǔ)映射。與系統(tǒng)有關(guān)的設(shè)置完成后,setup_arch()函數(shù)返回,控制權(quán)交還給start_kernel()函數(shù),它接下來(lái)將要完成的工作還有:解釋系統(tǒng)參數(shù)、初始化系統(tǒng)終端服務(wù)、系統(tǒng)調(diào)度器的初始化、時(shí)鐘、定時(shí)器的初始化、系統(tǒng)軟中斷的初始化、控制臺(tái)初始化、內(nèi)核cache的初始化、校準(zhǔn)時(shí)鐘、內(nèi)存初始化、創(chuàng)建及設(shè)置通用cache、建立uid_cache,并且根據(jù)系統(tǒng)內(nèi)存大小來(lái)確定最大進(jìn)程數(shù)目、快設(shè)備緩沖區(qū)的初始化(初始化一系列cache)、檢查體系結(jié)構(gòu)漏洞、創(chuàng)建第一個(gè)核心進(jìn)程并啟動(dòng)init進(jìn)程、運(yùn)行idle進(jìn)程。接下去

49、做的工作由init()函數(shù)來(lái)完成。init()首先要鎖定內(nèi)核,然后調(diào)用do_basic_setup()來(lái)完成外部設(shè)備以及驅(qū)動(dòng)程序的初始化。外設(shè)的初始化要根據(jù)內(nèi)核的配置來(lái)決定,一般需要作下面的初始化工作:1. PCI總線初始化2. 網(wǎng)絡(luò)初始化3. 一系列其他設(shè)備的初始化4. Start_context_thread()創(chuàng)建事件管理核心進(jìn)程keventd5. 通過(guò)do_initcalls()函數(shù)來(lái)啟動(dòng)任何使用_initcall標(biāo)識(shí)的函數(shù)6. 文件系統(tǒng)初始化7. 加在文件系統(tǒng)在do_basic_setup()調(diào)用完成之后,init()會(huì)釋放初始化函數(shù)所用的內(nèi)存,并且打開(kāi)/dev/console設(shè)備重

50、新定向控制臺(tái),讓系統(tǒng)調(diào)用execve來(lái)執(zhí)行程序init。到此為止,Linux內(nèi)核的初始化工作已經(jīng)完成。接下來(lái)是用戶(hù)態(tài)進(jìn)程的初始化,用戶(hù)態(tài)進(jìn)程初始化完成后,整個(gè)Linux的啟動(dòng)就完成了。2.3.3 設(shè)備驅(qū)動(dòng)程序Linux 的設(shè)備管理是操作系統(tǒng)的重要組成部分。與進(jìn)程管理、內(nèi)存管理、和文件系統(tǒng)相比,設(shè)備管理相對(duì)來(lái)說(shuō)要雜亂一些。這主要是因?yàn)榇嬖诙喾N多樣的輸入輸出設(shè)備,導(dǎo)致難以形成一個(gè)通用的解決方案。盡管如此,設(shè)備管理的基本功能就是要提供一個(gè)統(tǒng)一而簡(jiǎn)單的輸入輸出系統(tǒng)調(diào)用接口。輸入輸出子系統(tǒng)可分為上下兩部分:一部分是下層的、設(shè)備相關(guān)的,即所謂的設(shè)備驅(qū)動(dòng)程序,它直接與相應(yīng)設(shè)備打交道,并向上提供一組訪問(wèn)接口。

51、另一部分是上層的、設(shè)備無(wú)關(guān)的,這部分根據(jù)輸入輸出請(qǐng)求,通過(guò)特定設(shè)備驅(qū)動(dòng)提供的接口,與設(shè)備進(jìn)行通信。雖然設(shè)備種類(lèi)繁多,但是為了便于使用,輸入輸出子系統(tǒng)必須提供一個(gè)簡(jiǎn)單統(tǒng)一的設(shè)備使用接口。與其它Unix 一樣,Linux 將各種設(shè)備都作為特殊文件來(lái)處理。也就是說(shuō),對(duì)設(shè)備可以進(jìn)行read 和write 等操作。這些都是由輸入輸出子系統(tǒng)的設(shè)備無(wú)關(guān)部分來(lái)完成的。為L(zhǎng)inux內(nèi)核編寫(xiě)驅(qū)動(dòng)程序時(shí),所要做的只是為相應(yīng)的設(shè)備編寫(xiě)幾個(gè)基本函數(shù)并向VFS 注冊(cè)。當(dāng)上層應(yīng)用要使用該設(shè)備時(shí),VFS 就會(huì)調(diào)用相應(yīng)的設(shè)備函數(shù)。Linux下設(shè)備驅(qū)動(dòng)程序的編制的一般工作方式是在一個(gè)現(xiàn)成的驅(qū)動(dòng)程序的基礎(chǔ)上針對(duì)特殊的硬件設(shè)備做相應(yīng)

52、的改動(dòng),并不是要求從頭編起。設(shè)備驅(qū)動(dòng)多數(shù)是基于中斷的(安裝中斷處理函數(shù),即注冊(cè)對(duì)應(yīng)置中斷向量表,使用Linux提供的注冊(cè)函數(shù)request_irq);但也有基于輪詢(xún)方式的;有的甚至是在運(yùn)行時(shí)動(dòng)態(tài)切換,如并口驅(qū)動(dòng)。設(shè)備驅(qū)動(dòng)程序通常可歸類(lèi)為以下三種類(lèi)型:字符設(shè)備(char):以字節(jié)為單位;只能按順序訪問(wèn);不用緩存。塊設(shè)備(block):以塊為單位;允許隨機(jī)訪問(wèn);多用緩存技術(shù)。網(wǎng)絡(luò)接口(net)Linux的文件系統(tǒng):實(shí)際上就是一種軟件設(shè)備驅(qū)動(dòng)程序(如ROMFS 文件系統(tǒng)使用的blkmem.c 和JFFS 文件系統(tǒng)使用的flash.c)。所有的字符和塊設(shè)備的驅(qū)動(dòng)程序都支持文件操作的接口,因此用戶(hù)對(duì)任何

53、一個(gè)設(shè)備的存取都如同對(duì)文件操作一樣,即把每一個(gè)設(shè)備都當(dāng)作一個(gè)特殊文件對(duì)待。因?yàn)閮?nèi)核對(duì)設(shè)備的操作是通過(guò)文件接口的,因此只要特定設(shè)備的驅(qū)動(dòng)程序支持這一抽象的文件接口即可。在內(nèi)核中增加一種新的設(shè)備驅(qū)動(dòng)程序是相對(duì)容易的。設(shè)備驅(qū)動(dòng)編程實(shí)際就是對(duì)Linux內(nèi)核編程,設(shè)備驅(qū)動(dòng)都是以?xún)?nèi)核態(tài)在內(nèi)核空間運(yùn)行。若驅(qū)動(dòng)代碼編制不良,就會(huì)導(dǎo)致整個(gè)系統(tǒng)死掉。Linux把每一個(gè)設(shè)備都當(dāng)作一個(gè)特殊文件對(duì)待,存放在/dev/目錄下。輸入輸出子系統(tǒng)向內(nèi)核其它部分提供了一個(gè)統(tǒng)一的標(biāo)準(zhǔn)設(shè)備接口。這是通過(guò)數(shù)據(jù)結(jié)構(gòu)file_operation來(lái)實(shí)現(xiàn)的。這一部分的詳細(xì)內(nèi)容將會(huì)在后面的章節(jié)中進(jìn)一步闡述。2.3.4 圖形用戶(hù)接口所謂圖形用戶(hù)接

54、口,就是GUI(Graphics User Interface)。圖形用戶(hù)接口的廣泛流行是當(dāng)今計(jì)算機(jī)技術(shù)的重大成就之一,它極大的方便了非專(zhuān)業(yè)用戶(hù)的使用,人們不再需要死記硬背大量的命令,而可以通過(guò)窗口、菜單方便地操作。通常所見(jiàn)的GUI都是位于PC機(jī)上的,但它并不適合嵌入式系統(tǒng)。嵌入式設(shè)備有嚴(yán)格的資源要求和一些特殊要求,普通的PC上的GUI不能滿(mǎn)足這些要求。因此嵌入式系統(tǒng)必須要有自己的GUI。雖然Linux有標(biāo)準(zhǔn)的GUI系統(tǒng)XWindow,但是由于XWindow過(guò)于龐大和臃腫,不適于嵌入式系統(tǒng),所以GUI仍然是嵌入式Linux中一個(gè)亟待解決的問(wèn)題。人們不希望將價(jià)格昂貴的嵌入式設(shè)備建立在龐大的、非常

55、消耗系統(tǒng)資源的操作系統(tǒng)和GUI之上。因此,在嵌入式Linux中越來(lái)越需要一個(gè)高性能、輕量級(jí)的GUI系統(tǒng)。于是,一批基于Linux的GUI系統(tǒng)便應(yīng)運(yùn)而生,主要包括:緊縮的XWindow、MiniGUI、MicroWindows、OpenGUI、QtEmbedded等。下面簡(jiǎn)要的介紹一下這幾個(gè)GUI系統(tǒng):1. 緊縮的 X Window 系統(tǒng)眾所周知,X Window 是 Linux 以及其他類(lèi) UNIX 系統(tǒng)的標(biāo)準(zhǔn) GUI。X Window 系統(tǒng)采用標(biāo)準(zhǔn)的客戶(hù)/服務(wù)器體系結(jié)構(gòu),具有可擴(kuò)展性好、可移植性好等優(yōu)點(diǎn)。但該系統(tǒng)的龐大、累贅和低效率也是大家所共知的。為了獲得應(yīng)用程序的可移植性,許多廠家都試圖

56、通過(guò)對(duì) X Window 系統(tǒng)的緊縮開(kāi)發(fā),使之能夠在嵌入式系統(tǒng)上運(yùn)行。國(guó)外已經(jīng)開(kāi)發(fā)出了大小約為 800K 的 X 服務(wù)器。這對(duì)西方國(guó)家來(lái)說(shuō)基本能夠滿(mǎn)足嵌入式系統(tǒng)的需求了。但該系統(tǒng)的源代碼尚不開(kāi)放,從而很難進(jìn)行本地化開(kāi)發(fā)。 2. MicroWindows MicroWindows 是一個(gè)開(kāi)放源碼的項(xiàng)目,目前由美國(guó)一家公司在主持開(kāi)發(fā)。該項(xiàng)目的開(kāi)發(fā)非?;钴S,國(guó)內(nèi)也有人參與了其中的開(kāi)發(fā),并編寫(xiě)了 GB2312 等字符集的支持。該項(xiàng)目的主要特色在于提供了比較完善的圖形功能,包括一些高級(jí)的功能,比如 Alpha 混合,三維支持,TrueType 字體支持等。但作為一個(gè)窗口系統(tǒng),該項(xiàng)目提供的窗口處理功能還需

57、要進(jìn)一步完善,比如控件或構(gòu)件的實(shí)現(xiàn)還很不完備,鍵盤(pán)和鼠標(biāo)等的驅(qū)動(dòng)還很不完善。 3. OpenGUI OpenGUI 在 Linux 系統(tǒng)上存在已經(jīng)很長(zhǎng)時(shí)間了。最初的名字叫 FastGL,只支持 256 的線性顯存模式。但目前也支持其他顯示模式。這個(gè)庫(kù)是用 C+ 編寫(xiě)的,只提供 C+ 接口。 4. Qt/ Embedded QT/Embedded 是著名的 QT 庫(kù)開(kāi)放商正在進(jìn)行的面向嵌入式系統(tǒng)的 QT 版本。這個(gè)版本的主要特點(diǎn)是可移植性較好,許多基于 QT 的 X Window 程序可以非常方便地移植到嵌入式版本。但是該系統(tǒng)不是開(kāi)放源碼的,如果你要使用這個(gè)庫(kù),可能需要支付昂貴的授權(quán)費(fèi)用。目前,

58、已經(jīng)有了 QT/Embedded 的演示版,預(yù)計(jì)明年初將出現(xiàn) QT/Embedded 的正式發(fā)行版。 5. MiniGUI 簡(jiǎn)介 MiniGUI 是一種面向嵌入式系統(tǒng)或者實(shí)時(shí)系統(tǒng)的圖形用戶(hù)界面支持系統(tǒng)。它主要運(yùn)行于 Linux 控制臺(tái),實(shí)際可以運(yùn)行在任何一種具有 POSIX 線程支持的 POSIX 兼容系統(tǒng)上。MiniGUI 同時(shí)也是國(guó)內(nèi)最早出現(xiàn)的幾個(gè)自由軟件項(xiàng)目之一。 嵌入式GUI的詳細(xì)討論將在后面的章節(jié)進(jìn)行。比較上述幾個(gè)面向嵌入式系統(tǒng)的 GUI,目前比較成熟,同時(shí)得到最多開(kāi)發(fā)人員認(rèn)可的有緊縮的 X Window 系統(tǒng)、MiniGUI、MicroWindows 等系統(tǒng)。盡管緊縮的 X Win

59、dow 系統(tǒng)其 X 服務(wù)器可以降低到 800K 的大小,但因?yàn)?X Window 系統(tǒng)的運(yùn)行還需要其他程序和庫(kù)的支持,包括 X 窗口管理器、XLib、建立在 XLib 之上的 GTK 和 QT 等函數(shù)庫(kù),因此,緊縮的X Window 系統(tǒng)在運(yùn)行期間所占用的系統(tǒng)資源很多,加上中文顯示和中文輸入等本地化代碼之后,系統(tǒng)的整體尺寸和運(yùn)行時(shí)的資源消耗將進(jìn)一步變大。因此,嵌入式系統(tǒng)的開(kāi)發(fā)商往往將緊縮的 X Window 系統(tǒng)定位在機(jī)頂盒等對(duì)資源要求并不苛刻的嵌入式系統(tǒng)上。 MiniGUI 和 MicroWindows 均為自由軟件,只是前者遵循 LGPL 條款,后者遵循 MPL 條款。這兩個(gè)系統(tǒng)的技術(shù)路線

60、也有所不同。MiniGUI 的策略是首先建立在比較成熟的圖形引擎之上,比如 SVGALib 和 LibGGI,開(kāi)發(fā)的重點(diǎn)在于窗口系統(tǒng)、圖形接口之上;MicroWindows 目前的開(kāi)發(fā)重點(diǎn)則在底層的圖形引擎之上,窗口系統(tǒng)和圖形接口方面的功能還比較欠缺。例如,MiniGUI 有一套用來(lái)支持多字符集和多編碼的函數(shù)接口,可以支持各種常見(jiàn)的字符集,包括 GB、BIG5、UNICODE 等,而 MicroWindows 在多字符集的支持上尚沒(méi)有統(tǒng)一接口。 第3章 嵌入式Linux實(shí)時(shí)性能的改造在一個(gè)較為完善的嵌入式系統(tǒng)環(huán)境中,需要一個(gè)支持實(shí)時(shí)多任務(wù)的操作系統(tǒng)(RTOS)內(nèi)核,因?yàn)閺V泛應(yīng)用于現(xiàn)實(shí)世界中的嵌

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論