當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]嵌入式 Linux是嵌入式操作系統(tǒng)的一個新成員,其最大的特點是源代碼公開并且遵循GPL協(xié)議,近幾年來已成為研究熱點。

嵌入式 Linux是嵌入式操作系統(tǒng)的一個新成員,其最大的特點是源代碼公開并且遵循GPL協(xié)議,近幾年來已成為研究熱點。目前正在開發(fā)的嵌入式系統(tǒng)中,有近50%的項目選擇Linux作為嵌入式操作系統(tǒng)。

一、 Linux嵌入式系統(tǒng)

操作系統(tǒng)是一種在計算機上運行的軟件,它的主要任務是管理計算機上的系統(tǒng)資源,為用戶提供使用計算機及其外部設備的接口。它存在的目的是為了管理所有硬件資源,并且提供應用軟件一個合適的操作環(huán)境。嵌入式系統(tǒng)由于硬件的先天限制,經常只具有極稀少的硬件資源,如 時脈較少的 CPU、較少的內存、常不具有磁盤而用小容量的DiskOnChip或DiskOnModule。而在使用電池的系統(tǒng)中,它還要實現節(jié)省電池消耗,延長電池使用時間的功能。

Linux 作為嵌入式操作系統(tǒng)是完全可行的,因為Linux提供了完成嵌入功能的基本的內核和你所需要的所有用戶界面,它是多面的。它能處理嵌入式任務和用戶界面。將Linux看作是連續(xù)的統(tǒng)一體,從一個具有內存管理、任務切換和時間服務及其他的分拆的微內核到完整的服務器,支持所有的文件系統(tǒng)和網絡服務。Linux作為嵌入式系統(tǒng)是一個帶有很多優(yōu)勢的新成員,它對許多CPU和硬件平臺都是易移植的、穩(wěn)定、功能強大、易于開發(fā)。

Application program

API

X-server Java virtual machine

Device driver

Linux Kernel

Boot load

嵌入式Linux系統(tǒng)需要下面三個基本元素:

1. 引導工具

2. Linux微內核:內存管理、 程序管理

3. 初始化進程

如果要它成為完整的操作系統(tǒng)且繼續(xù)保持小型化,還得加上:

1.硬件驅動程序

2.硬件接口程序

3.應用程序組

談到操作系統(tǒng)就一定要說一說它的開發(fā)環(huán)境,Linux是基于GNU的C編譯器,作為GNU工具鏈的一部分,與gdb源調試器一起工作。它提供了開發(fā)嵌入式Linux系統(tǒng)的所有軟件工具。以下是一個典型的開發(fā)工具的使用流程:

1.寫入或植入引導碼

2.向串口打印字符串的編碼

3.將gdb目標碼移植工作串口,這可與另一臺運行gdb程序的Linux 主機系統(tǒng)對話

4.利用gdb讓硬件和軟件初始化碼在Linux內核啟動時工作

5.Linux內核啟動,串口成為Linux控制口并可用于后續(xù)開發(fā)

6.如果在你的目標硬件上運行了完整的Linux內核,你可以調試你的應用進程

二、硬件平臺

研發(fā)人員在選擇最好的硬件時,往往由于缺乏完整或精確的信息而使選擇硬件成為復雜且困難的工作。硬件成本經常是關鍵的議題,當考慮成本時、需要確信你在考慮產品的整個成本而不僅是CPU的成本;因為好的CPU一旦加上總線邏輯和延時電路使之與外設一起工作,硬件系統(tǒng)可能變成非常昂貴的產品。如果你正在尋找嵌入式軟件系統(tǒng),那么應首先確定了硬件平臺即確定了微處理器CPU的型號。

現在比較流行的硬件平臺有Intel公司的Strong Arm 系列,Motorola公司的DragonBall系列,NEC公司的VR系列,Hitachi公司SH3,SH4系列等等,都可選為硬件平臺。但最好在選定前先要確定所做系統(tǒng)的應用功能和所需的速度,并且制定好外接設備和接口標準。這樣可準確的定位所需要的硬件方案,得到性價比最高的系統(tǒng)。 下圖是以Intel公司的StrongArm為例來說明硬件平臺:

三、Linux嵌入式系統(tǒng)與硬件的關系

對初學者而言,可以將內核與任務分開,標準的Linux內核通常駐留在內存中,每一個應用程序都是從磁盤運到內存上執(zhí)行。當程序結束后,它所占用的內存就被釋放,程序就被下載了。在一個嵌入式系統(tǒng)里,可能沒有磁盤。有兩種途徑可以消除對磁盤的依賴,這要看系統(tǒng)的復雜性和硬件的設計。在一個簡單的系統(tǒng)里,當系統(tǒng)啟動后,內核和所有的應用程序都在內存里。這就是大多數傳統(tǒng)的嵌入式系統(tǒng)工作模式,它同樣可以被Linux支持。有了Linux,就有了第二種可能性。因為Linux已經有能力“加載”和“卸載”程序,一個嵌入式系統(tǒng)就可以利用它來節(jié)省內存。試想一個典型的包括一個大概8MB到16MB的Flash Memory和8MB內存的系統(tǒng)。Flash Memory可以作為一個文件系統(tǒng)。Flash Memory驅動程序用來連接Flash Memory和文件系統(tǒng)。作為替代也可使用Flash Disk,用工具軟件可把Flash Memory仿真為磁盤或部分。其中一個例子是Intel 公司可提供Flash Memory 管理軟件IPSM -Intel Persistent Storage Manager, 詳情

所有的程序都以文件形式存儲在Flash文件中,需要時可以裝入內存。這種動態(tài)的、“根據需要加載”的能力是支持其它一系列功能的重要特征:

1. 它使初始化代碼在系統(tǒng)引導后被釋放。Linux同樣有很多內核外運行的公用程序。這些通常程序在初始化時運行一次,以后就不再運行。而且,這些公用程序可以用它們相互共有的方式,一個接一個按順序運行。這樣,相同內存空間可以被反復使用以“調入”每一個程序,就象系統(tǒng)引導一樣。這的確可以節(jié)省內存,特別是那些配置一次以后就不再更改的網絡堆棧。如果Linux可加載模塊的功能包括在內核里,驅動程序和應用程序就都可以被加載。它可以檢查硬件環(huán)境并且為硬件裝上相應的軟件。這就消除了用一個程序占用許多Flash Memory來處理多種硬件的復雜性。

2. 軟件的升級更模塊化。你可以在系統(tǒng)運行的時候在Flash上升級應用程序和可加載驅動程序。

3. 配置信息和運行時間參數可以作為數據文件儲存在Flash上。

虛擬內存

標準Linux的另一個特征是虛擬內存的能力。正是這種神奇的特征使應用程序員可以狂熱的編寫代碼而不計后果,不管程序有多大。在嵌入式系統(tǒng)里不需要這種強大的功能。實際上,因為它會帶來無法控制的時間因素,你可能不希望它在實時的系統(tǒng)里。這個軟件必須設計得更加精悍,以適合硬件平臺上的物理內存,就象其它嵌入式系統(tǒng)一樣。注意由于CPU的原因,通常在Linux中保存虛擬內存代碼是明智的,因為將它清除很費事;而且還有另外一個原因--它支持共享文本,這樣就可以使許多程序共享一個軟件。

虛擬內存的調入功能可以被關掉,只要將交換空間的大小設置為零。如果你寫的程序比實際的內存大,系統(tǒng)就會當作你的運行用盡了交換空間來處理;這個程序將不會運行,或者malloc將會失靈。在許多CPU上,虛擬內存提供的內存管理可以將不同程序分開,防止它們寫到其它地址的空間上。這在嵌入式系統(tǒng)上通常不可能,因為它只支持一個簡單、扁平的地址空間。Linux的這種功能有助于其發(fā)展。它減少了胡亂的編寫程序造成系統(tǒng)崩潰的可能性。許多嵌入式系統(tǒng)基于效率方面的原因有意識使用程序間可以共享的“全局”數據。這也可以通過Linux共享內存功能來支持,共享的只是指定的內存部分。

文件系統(tǒng)

許多嵌入式系統(tǒng)沒有磁盤或者文件系統(tǒng)。Linux不需要它們也能運行。實際上,許多商業(yè)性嵌入式系統(tǒng)提供文件系統(tǒng)作為選項。Linux提供 MS-DOS-CompaTIble文件系統(tǒng),同時還有其它多種選擇。之所以提供其它選擇是因為它們更加強大而且具有容錯功能。Linux還具有檢查和維護的功能,商業(yè)性供應商往往不提供這些。這對于Flash系統(tǒng)來說尤其重要,因為它是通過網絡更新的。如果系統(tǒng)在升級過程中失去了能力,那它就沒有用了。維護的功能通??梢越鉀Q這類問題。

文件系統(tǒng)可以被放在傳統(tǒng)的磁盤驅動器、Flash Memory或其它這類的介質上。而且,用于暫時保存文件,一個小RAM盤就足夠了。Flash Memories被分割成塊。這些塊中也許包括一個含有當CPU啟動時運行的最初的軟件的引導塊。這可能包括Linux 引導代碼。剩余的Flash可以用作文件系統(tǒng)。Linux的內核可以通過引導代碼從Flash復制到RAM,或者還有一個選擇,內核可以被存儲在Flash的一個獨立部分,并且直接從那里執(zhí)行。另外對于一些系統(tǒng)來說還有一個有趣的選擇,那就是將一個便宜的CD-ROM包含在內。這比Flash Memory 便宜,而且通過交換CD-ROM支持簡單的升級。有了這個,Linux 只要從 CD-ROM上引導,類似從硬盤上一樣從CD-ROM上獲得所有的程序。

最后,對于聯(lián)網的嵌入式系統(tǒng)來說,Linux 支持NFS(Network File system)。這為實現聯(lián)網系統(tǒng)的許多增值功能打開了大門。第一,它允許通過網絡上加載應用程序。這是控制軟件修改的基礎,因為每一個嵌入式系統(tǒng)的軟件都可以在一個普通的服務器上加載。它在運行的時候也可以用來輸入或輸出大量的數據、配置和狀態(tài)信息。這對用戶監(jiān)督和控制來說是一個非常強大的功能。舉例來說,嵌入式系統(tǒng)可以建立一個小的RAM磁盤,包含的文件中有與當前狀態(tài)信息同步的內容。其它系統(tǒng)可以簡單的把這個RAM磁盤設置為基于網絡的遠程磁盤,并且空中存取狀態(tài)文件。這就允許另一個機器上的Web服務器通過簡單的CGI Script存取狀態(tài)信息。在其它電腦上運行的其它應用程序包可以很容易的存取數據。

引導--LILO和BIOS在哪里

當一個微處理器第一次啟動的時候,它開始在預先設置的地址上執(zhí)行指令。通常在那里有一些只讀內存,包括初始化或引導代碼。類似于在PC上的BIOS。它執(zhí)行了一些低水平的CPU初始化和其它硬件的配置文件。BIOS繼續(xù)辨認哪個磁盤里有操作系統(tǒng),把操作系統(tǒng)復制到RAM并且轉向它。實際上,這非常復雜,但對我們的目標來說也非常重要。在PC上運行的Linux依靠PC的BIOS來提供這些配置和OS加載功能。

在一個嵌入式系統(tǒng)里經常沒有這種BIOS。這樣你就要提供同等的啟動代碼。幸運的是,嵌入式系統(tǒng)并不需要象PC機上的 BIOS引導程序那樣的靈活性,因為它通常只需要處理一個硬件的配置。這個代碼更簡單也更枯燥。它只是個指令清單,將固定的數字塞到硬件寄存器中去。然而,這是關鍵的代碼,因為這些數值要與你的硬件相符而且要按照特定的順序進行。所以在大多數情況下,一個最小的通電自檢模塊,可以檢查內存的正常運行、讓LED閃爍,并且驅動其它必須的硬件以使主Linux OS啟動和運行。這些啟動代碼完全根據硬件決定,不可隨意移動。幸運的是,許多系統(tǒng)都有為核心微處理器和內存所定制的菜單式硬件設計。典型的是,芯片制造商有一個樣本主板,可以用來作為設計的參考--或多或少與新設計相同。通常這些菜單式設計的啟動代碼是可以獲得的,它可以根據你的需要輕易的修改。在少數情況下,啟動代碼需要重新編寫。為了測試這些代碼,你可以使用一個包含模擬內存的電路內置模擬器,它可以代替目標內存。你把代碼裝到模擬器上并通過模擬器調試。如果這樣不行,你可以跳過這一步,但這樣就要一個更長的調試周期。這個代碼最終要在較為穩(wěn)定的內存上運行,通常是Flash或EPROM芯片。你需要使用一些方法將代碼放在芯片上。怎么做,要根據“目標”硬件和工具來定。

一種流行的方法是把Flash或EPROM芯片插入EPROM或Flash燒制器。這將把你的程序“燒”(存)入芯片。然后,把芯片插入你的目標板的插座,打開電源。這個方法需要板上配有插座,但有些設備是不能配插座的。

另一個方法是通過一個JTAG界面。一些芯片有JTAG界面可以用來對芯片進行編程。這是最方便的方法。芯片可以永遠被焊在主板上,一個小電纜從板上的JTAG連接器,通常是一個PC卡,聯(lián)到JTAG界面。下面是PC運行JTAG界面所需的一些慣用程序。這個設備還可以用來小量生產。

穩(wěn)定性

對大多數微處理器來說,Linux非常好。移植到新微處理器家族的Linux內核運行起來與原來的微處理器一樣穩(wěn)定。它經常被移植到一個或多個特定的主板上。這些板包括特定的外圍設備和CPU。幸運的是,許多代碼是與處理器的特性不相關的,所以移植集中在處理器的差異上,其中大多數是在內存管理和中斷控制領域。一旦成功移植,它們就非常穩(wěn)定。

引導策略廣泛依賴于硬件要求,而且你必須有計劃地做一些定制的工作。設備驅動程序更加混亂:有些穩(wěn)定有些不穩(wěn)定。而且選擇很有限;一旦你離開了通用的PC平臺,你需要自己編寫。幸運的是,周圍有許多驅動程序,你可能可以找到一個與你的需求相近的修改一下。這種驅動程序界面已定義好。許多類似的驅動程序都非常相近,所以把磁盤、網絡或一系列的端口驅動程序從一個設備移植到另一個設備上通常并不難。你可能發(fā)現許多驅動程序都寫得很好,很容易理解,但你還是要準備一本關于內核結構的書在手頭。

總之,這些操作系統(tǒng)和Linux的問題在于對工作過程微小之處的誤解,而不在于代碼的難度或基本的設計錯誤。任何操作系統(tǒng)都有很多爭論不休的故事,這里不需要重復。Linux的優(yōu)勢在于源代碼是公開、注釋清晰和文檔齊全的。這樣,你就可以控制和處理所出現的任何問題。

綜上所述,Linux嵌入式操作系統(tǒng)在嵌入式系統(tǒng)中的應用才剛剛開始,但它所具有的技術優(yōu)勢和獨特的運開發(fā)模式給業(yè)界以新異,有理由相信在不久的將來Linux嵌入式操作系統(tǒng)一定會成為綻放在操作系統(tǒng)中美麗的奇葩。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉