歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux嵌入式 >> Linux嵌入式系統與硬件平台的關系

Linux嵌入式系統與硬件平台的關系

日期:2017/2/27 9:30:17   编辑:Linux嵌入式
  一、 Linux嵌入式系統  操作系統是一種在計算機上運行的軟件,它的主要任務是管理計算機上的系統資源,為用戶提供使用計算機及其外部設備的接口。它存在的目的是為了管理所有硬件資源,並且提供應用軟件一個合適的操作環境。嵌入式系統由於硬件的先天限制,經常只具有極稀少的硬件資源,如 時脈較少的 CPU、較少的內存、常不具有磁盤而用小容量的DiskOnChip或DiskOnModule。而在使用電池的系統中,它還要實現節省電池消耗,延長電池使用時間的功能。    Linux 作為嵌入式操作系統是完全可行的,因為Linux提供了完成嵌入功能的基本的內核和你所需要的所有用戶界面,它是多面的。它能處理嵌入式任務和用戶界面。將Linux看作是連續的統一體,從一個具有內存管理、任務切換和時間服務及其他的分拆的微內核到完整的服務器,支持所有的文件系統和網絡服務。Linux作為嵌入式系統是一個帶有很多優勢的新成員,它對許多CPU和硬件平台都是易移植的、穩定、功能強大、易於開發。    Application program    API    X-server Java virtual machine    Device driver    Linux Kernel    Boot load    嵌入式Linux系統需要下面三個基本元素:    1. 引導工具    2. Linux微內核:內存管理、 程序管理    3. 初始化進程    如果要它成為完整的操作系統且繼續保持小型化,還得加上:    1.硬件驅動程序    2.硬件接口程序    3.應用程序組    談到操作系統就一定要說一說它的開發環境,Linux是基於GNU的C編譯器,作為GNU工具鏈的一部分,與gdb源調試器一起工作。它提供了開發嵌入式Linux系統的所有軟件工具。以下是一個典型的開發工具的使用流程:    1.寫入或植入引導碼    2.向串口打印字符串的編碼    3.將gdb目標碼移植工作串口,這可與另一台運行gdb程序的Linux主機系統對話    4.利用gdb讓硬件和軟件初始化碼在Linux內核啟動時工作    5.Linux內核啟動,串口成為Linux控制口並可用於後續開發    6.如果在你的目標硬件上運行了完整的Linux內核,你可以調試你的應用進程    更詳細的內容可參見網站http://www.emlinux.com    二、硬件平台  研發人員在選擇最好的硬件時,往往由於缺乏完整或精確的信息而使選擇硬件成為復雜且困難的工作。硬件成本經常是關鍵的議題,當考慮成本時、需要確信你在考慮產品的整個成本而不僅是CPU的成本;因為好的CPU一旦加上總線邏輯和延時電路使之與外設一起工作,硬件系統可能變成非常昂貴的產品。如果你正在尋找嵌入式軟件系統,那麼應首先確定了硬件平台即確定了微處理器CPU的型號。    現在比較流行的硬件平台有Intel公司的Strong Arm 系列,Motorola公司的DragonBall系列,NEC公司的VR系列,Hitachi公司SH3,SH4系列等等,都可選為硬件平台。但最好在選定前先要確定所做系統的應用功能和所需的速度,並且制定好外接設備和接口標准。這樣可准確的定位所需要的硬件方案,得到性價比最高的系統。 下圖是以Intel公司的StrongArm為例來說明硬件平台:    三、Linux嵌入式系統與硬件的關系  對初學者而言,可以將內核與任務分開,標准的Linux內核通常駐留在內存中,每一個應用程序程序都是從磁盤運到內存上執行。當程序結束後,它所占用的內存就被釋放,程序就被下載了。在一個嵌入式系統裡,可能沒有磁盤。有兩種途徑可以消除對磁盤的依賴,這要看系統的復雜性和硬件的設計。在一個簡單的系統裡,當系統啟動後,內核和所有的應用程序都在內存裡。這就是大多數傳統的嵌入式系統工作模式,它同樣可以被Linux支持。有了Linux,就有了第二種可能性。因為Linux已經有能力"加載"和"卸載"程序,一個嵌入式系統就可以利用它來節省內存。試想一個典型的包括一個大概8MB到16MB的Flash Memory和8MB內存的系統。Flash Memory可以作為一個文件系統。Flash Memory驅動程序用來連接Flash Memory和文件系統。作為替代也可使用Flash Disk,用工具軟件可把Flash Memory仿真為磁盤或部分。其中一個例子是Intel 公司可提供Flash Memory 管理軟件IPSM -Intel Persistent Storage Manager, 詳情見 http://developer.intel.com/design/builder/flbldr/swb/swb.htm    所有的程序都以文件形式存儲在Flash文件中,需要時可以裝入內存。這種動態的、"根據需要加載"的能力是支持其它一系列功能的重要特征:    1. 它使初始化代碼在系統引導後被釋放。Linux同樣有很多內核外運行的公用程序。這些通常程序在初始化時運行一次,以後就不再運行。而且,這些公用程序可以用它們相互共有的方式,一個接一個按順序運行。這樣,相同內存空間可以被反復使用以"調入"每一個程序,就象系統引導一樣。這的確可以節省內存,特別是那些配置一次以後就不再更改的網絡堆棧。如果Linux可加載模塊的功能包括在內核裡,驅動程序和應用程序就都可以被加載。它可以檢查硬件環境並且為硬件裝上相應的軟件。這就消除了用一個程序占用許多Flash Memory來處理多種硬件的復雜性。    2. 軟件的升級更模塊化。你可以在系統運行的時候在Flash上升級應用程序和可加載驅動程序。    3. 配置信息和運行時間參數可以作為數據文件儲存在Flash上。    虛擬內存    標准Linux的另一個特征是虛擬內存的能力。正是這種神奇的特征使應用程序員可以狂熱的編寫代碼而不計後果,不管程序有多大。在嵌入式系統裡不需要這種強大的功能。實際上,因為它會帶來無法控制的時間因素,你可能不希望它在實時的系統裡。這個軟件必須設計得更加精悍,以適合硬件平台上的物理內存,就象其它嵌入式系統一樣。注意由於CPU的原因,通常在Linux中保存虛擬內存代碼是明智的,因為將它清除很費事;而且還有另外一個原因--它支持共享文本,這樣就可以使許多程序共享一個軟件。    虛擬內存的調入功能可以被關掉,只要將交換空間的大小設置為零。如果你寫的程序比實際的內存大,系統就會當作你的運行用盡了交換空間來處理;這個程序將不會運行,或者malloc將會失靈。在許多CPU上,虛擬內存提供的內存管理可以將不同程序分開,防止它們寫到其它地址的空間上。這在嵌入式系統上通常不可能,因為它只支持一個簡單、扁平的地址空間。Linux的這種功能有助於其發展。它減少了胡亂的編寫程序造成系統崩潰的可能性。許多嵌入式系統基於效率方面的原因有意識使用程序間可以共享的"全局"數據。這也可以通過Linux共享內存功能來支持,共享的只是指定的內存部分。    文件系統    許多嵌入式系統沒有磁盤或者文件系統。Linux不需要它們也能運行。實際上,許多商業性嵌入式系統提供文件系統作為選項。Linux提供MS-DOS-Compatible文件系統,同時還有其它多種選擇。之所以提供其它選擇是因為它們更加強大而且具有容錯功能。Linux還具有檢查和維護的功能,商業性供應商往往不提供這些。這對於Flash系統來說尤其重要,因為它是通過網絡更新的。如果系統在升級過程中失去了能力,那它就沒有用了。維護的功能通常可以解決這類問題。    文件系統可以被放在傳統的磁盤驅動器、Flash Memory或其它這類的介質上。而且,用於暫時保存文件,一個小RAM盤就足夠了。Flash Memories被分割成塊。這些塊中也許包括一個含有當CPU啟動時運行的最初的軟件的引導塊。這可能包括Linux 引導代碼。剩余的Flash可以用作文件系統。Linux的內核可以通過引導代碼從Flash復制到RAM,或者還有一個選擇,內核可以被存儲在Flash的一個獨立部分,並且直接從那裡執行。另外對於一些系統來說還有一個有趣的選擇,那就是將一個便宜的CD-ROM包含在內。這比Flash Memory 便宜,而且通過交換CD-ROM支持簡單的升級。有了這個,Linux 只要從 CD-ROM上引導,類似從硬盤上一樣從CD-ROM上獲得所有的程序。    最後,對於聯網的嵌入式系統來說,Linux 支持NFS(Network File system)。這為實現聯網系統的許多增值功能打開了大門。第一,它允許通過網絡上加載應用程序。這是控制軟件修改的基礎,因為每一個嵌入式系統的軟件都可以在一個普通的服務器上加載。它在運行的時候也可以用來輸入或輸出大量的數據、配置和狀態信息。這對用戶監督和控制來說是一個非常強大的功能。舉例來說,嵌入式系統可以建立一個小的RAM磁盤,包含的文件中有與當前狀態信息同步的內容。其它系統可以簡單的把這個RAM磁盤設置為基於網絡的遠程磁盤,並且空中存取狀態文件。這就允許另一個機器上的Web服務器通過簡單的CGI Script存取狀態信息。在其它電腦上運行的其它應用程序包可以很容易的存取數據。    引導--LILO和BIOS在哪裡    當一個微處理器第一次啟動的時候,它開始在預先設置的地址上執行指令。通常在那裡有一些只讀內存,包括初始化或引導代碼。類似於在PC上的BIOS。它執行了一些低水平的CPU初始化和其它硬件的配置文件。BIOS繼續辨認哪個磁盤裡有操作系統,把操作系統復制到RAM並且轉向它。實際上,這非常復雜,但對我們的目標來說也非常重要。在PC上運行的Linux依靠PC的BIOS來提供這些配置和OS加載功能。    在一個嵌入式系統裡經常沒有這種BIOS。這樣你就要提供同等的啟動代碼。幸運的是,嵌入式系統並不需要象PC機上的 BIOS引導程序那樣的靈活性,因為它通常只需要處理一個硬件的配置。這個代碼更簡單也更枯燥。它只是個指令清單,將固定的數字塞到硬件寄存器中去。然而,這是關鍵的代碼,因為這些數值要與你的硬件相符而且要按照特定的順序進行。所以在大多數情況下,一個最小的




Copyright © Linux教程網 All Rights Reserved