歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 嵌入式系統以及如何構造一個嵌入式系統概覽

嵌入式系統以及如何構造一個嵌入式系統概覽

日期:2017/2/27 14:17:48   编辑:更多Linux
  大多數的Linux系統運行於PC平台,但是,Linux也可在嵌入式系統中可靠的工作。此篇論文講述了嵌入式系統的概況,以及論證了有關Linux應用於商業嵌入式系統的問題。 嵌入式系統 ---- 比摩西還老 那些用以控制設備的計算機,或叫嵌入式系統,差不多同計算機本身一樣早地出現在我們的周圍。 在通信領域中,這些嵌入式系統早在20世紀60年代後期就被用來控制電話的電子式機械交換並被稱為“存儲程控控制“系統“計算機”一詞在那時尚不常見;所謂的存儲程序是指那些放有程序和路由信息的內存。存儲這些控制邏輯而不是用硬件來實現是在觀念上的一種真正突破,現今,我們早認為這種工作機理是理所當然的了。 為適應每一個應用,這些計算機是被定做出來的(簡言之,這些計算機是面向應用的).按今天的標准來看,他們有著奇怪的專用指令以及與主要計算引擎集成在一起的I/O設備,就像一批突變異種者. 微處理器通過提供一個小巧低價的並可以在大系統中像搭積木那樣使用的CPU引擎改變了這一情況;它利用一基於被一條總線掛接在一起的不同外設所構建的嚴格的硬件體系結構並提供一個可以簡化編程的通用目的編程模型. 同硬件一起,軟件也得到了發展.最初,只有一些簡單的開發工具可供用以創建和調試軟件.各工程項目的運行軟件通常以信手塗鴉的方式編出來.由於編譯器經常有很多錯誤而且也缺乏象樣的調試器,這些軟件差不多總是用匯編語言或宏語言來寫.采用軟件構建塊和標准庫的編程思想直到20世紀70年代中期才流行起來. 用於嵌入式系統的與"擱架"無關的操作系統(OS)在20世紀70年代後期開始出現.它們中的許多是用匯編語言寫就的並且僅能用於為其編寫的微處理器上.當這些微處理器變得過時的時候,它們使用的OS也厄運同臨.只能在新的處理器上從新寫一遍才能運行.今天,許多這種早期的系統只不過成了人們模糊的記憶,還有人能記起MTOS嗎?當C語言出現後,OS可以用一種高效的,穩定的和可移植的方式來編寫.這種方式對使用和經營有直接的吸引力,因為它承載著人們當微處理器廢棄不用時能保護他們的軟件投資的希望.聽起來,有點兒像商業市場營銷中的一段傳奇故事.用C來編寫OS已經成了一種標准直至今天.總之,軟件的可復用性已經為人接受而且正在很好地發揮作用. 在20世紀80年代早期,我特別喜愛的OS是Wendon操作系統;大概只要150美金,就可以獲得它的C源代碼庫.它是一個開發套件,人們可以通過選擇一些組件來構建自己的OS---整個過程就像是從中餐菜單裡訂餐一樣.比如,可以從庫中的多個可行選項列表中精選出一種任務調度算法和內存管理方案. 許多用於嵌入式系統的的商業操作系統在20世紀80年代獲得了蓬勃發展.(Wendon)這一原始的炖菜已經發展成為了商業操作系統這一現代炖肉.今天已經有幾打的商業性操作系統可供選擇.出現了許多互相競爭的產品,如VxWorks,pSOS,Neculeus和WindowsCE. 許多嵌入式系統根本就沒有操作系統,只不過有一個控制環而已.對很簡單的嵌入式系統來說,這可能已經足夠.不過,隨著嵌入式系統在復雜性上的增長,一個操作系統顯得重要起來,因為否則的話,將使(控制)軟件復雜度變得極不合理.可悲的是,現實中確實有一些復雜得另人生畏的嵌入式系統,而且它們之所以變得復雜就因為它們的設計者堅持認為它們的系統不需要操作系統. 漸漸地,更多的嵌入式系統需要被連接到某些網絡上,因而,需要在嵌入式系統中有網絡協議棧(支持);甚至很多賓館中的門把手都有一個連接到網絡的微處理器. 把網絡棧添加到一個僅用控制環來實現的簡單嵌入式系統所帶來的復雜程度可能足以喚起人們對一個操作系統的渴望. 除了各種商業性操作系統以外,還有多種私擁操作系統.其中,有很多是塗鴉式寫就的,像Cisco公司的IOS等.有些則源於對別的操作系統的改寫,像很多網絡產品都衍生於同一版本的伯克利UNIX操作系統,因為後者有完整的網絡支持能力;而還有一些則基於公共域OS,比如KA9Q就來源於PhilKarn. 作為侯選的嵌入式操作系統,LINUX有一些引人的優勢:它可以移植到多個有不同結構的CPU和硬件平台上,很好的穩定性,各種性能的升級能力,而且開發更容易.。 開發工具--打破了傳統仿真器的阻礙 在開發嵌入式系統中極為關鍵的一項是有各種可用的工具.就像任何一個行當一樣,好的工具有助於快捷而圓滿地完成任務;在嵌入式系統開發的不同階段,可能要用到不同的工具. 傳統上,開發嵌入式系統的首選工具是仿真器。這是一塊比較昂貴的設備,一般插於微處理器和它的總線之間的電路中,從而讓開發者監視和控制所有輸入和輸出 微處理器的各種活動和行為.在裝配起來,可能有一些困難,並且由於它們的侵入性,裝上後可能造成不穩定 的性能;盡管這樣,它們卻能在總線級上給出一個系統正在發生什麼的清晰的描繪並排除了很多在硬件和軟件 接口最底層上的猜測工作.


在以往,一些工程項目依賴它--經常在開發周期中的各個階段--作為主要的調試工具.不過,一旦當編制的軟件 有能力支持一個串型口的時候,大量的調試可以不用ICE而使用別的方法來完成.同樣,大部分新一代的嵌入式系統 采用蠻像食譜式的微處理器設計;通信工作的啟動代碼常常是具備的以使串型口盡快地工作,這意味著開發者能 在沒有ICE的情況下也能很好地進展;去掉了ICE,從而降低了開發成本.一旦串型口可以工作起來,便能用於支持那 些日漸復雜的開發工具的相關(軟件)層 LINUX基於GNU C 編譯器;後者作為GNU工具集的一組成部分,和源碼級調試器gdb一起工作,提供了在開發一個嵌入式 LINUX系統中要用到的所有軟件工具.下面是在為一個新的硬件開發一個新的嵌入式LINUX系統時要用到的典型調試 工具的序列和步驟: 1:寫出或移植一段啟動代碼(後面再詳細討論); 2:寫一段代碼在串型口上輸出一字符串,像"Hello,World!"(其實,我更喜歡人類發明電話後,通過電話說的第一句話"Watson, come here I need you"); 3:移植gdb目標碼使之能在串型口上工作.這將允許向另一台正運行著gdb程序的LINUX主機會話;你只不過要告訴 gdb是通過串型口調試該目標程序;gdb通過串型口與你的測試計算機上的gdb目標碼會話並給出全部C源碼級的 調試信息.你也可以利用這一(通信)能力把附加的代碼下載到RAM或閃存中. 4:借助gdb,執行余下的直到LINUX內核開始接管之前的所有硬件和軟件的初始化代碼. 5: 一旦LINUX內核啟動後,上述的串型口就成為LINUX的控制台端口並可以利用它的便利來進行後繼開發過程.再使用gdb的內核調試版本kgdb.這一步常常不是必需的.如果你有一個網絡連接,比如,10BaseT,你或許會想讓它緊接著工作起來. 6: 如果你的目標平台運行的Linux kernel是全功能的(即:未經刪減過功能),你可以利用gdb或其圖形化替代品如xgdb去調試你的應用進程. 實時--真是這樣嗎? 輕率,大部分的系統並不是如此。嵌入式系統經常被錯誤地說做實時系統,但是它們中的大多數並不具備實時特性。實時性僅僅是相對的。實時嚴謹地定義應為硬實時:能在極短的時間(毫秒級)內響應,並以某種確定的方式處理事件。現在,許多硬實時功能正逐漸集中在DSP或ASIC的設計中,通過一些適當的硬件,如FIFO,DMA或其它專用硬件來實現。 對大多數系統來說,有1到5毫秒的實時響應時間應足夠了。當然,另一種寬松的要求也是可以接受的,例如: Windows 98的處理監視器崩潰畫面的中斷,要求必須在4微秒之內處理的,占所有情況的98%;而在20微秒之內處理的,占各情況的100%. 這些寬松的實時要求可以很容易達到.實現它們過程中涉及到一些探討,包括現場切換,中斷延遲,任務選優和調度. 現場切換曾一度成為操作系統界的一個熱點話題,不過,由於大多數CPU在這點上處理得比較令人滿意而且CPU速度現在已經變得足夠的快,現場切換現已不再是主要關注點了. 實時的嚴格性要求通常應由一個中斷例程或內核中的現場驅動函數來處理以確保行為的一致性.當中斷發生後,處理該中斷所用的時間,即中斷延遲,在很大程度上,由中斷優先級與其它能臨時屏蔽該中斷的軟件決定. (實時系統中的)中斷必須應被高效地設計和安排以確保滿足時間上的要求,就像在其它OS中那樣.在Intel X86處理器系列中,這項工作可以能被擴充了實時性的Linux很好地處理.(實時Linux,即:RTLinux,參看http://www.rtlinux.org/).從本質上說,它提供了一個把Linux作為其後台任務而運行的中斷處理調度器.(This essentially provides an interrupt processing scheduler that runs Linux as its background task)一些關鍵(臨界)中斷可以不為Linux其他部分所知地得到服務(處理),因而,你就有了對臨界時間的控制權.這種做法提供了實時級別和時間限制性較為寬松的基本Linux級別之間的界面.並提供了一個與別的嵌入式操作系統類似的實時處理框架.從根本上講,為滿足實時性要求,采用了把實時性的關鍵(臨界)代碼段隔離開來並進行高效的安排,然後對該段代碼的處理結果再以更一般的方式(或許在進程級別上)來做進一步處理. 嵌入式系統--定義 一種觀點認為: 如果某種應用沒有用戶界面,從而,用戶不能直接地和它交互,那麼它就是嵌入式系統.這當然太過簡單化了.電梯控制系統是嵌入式系統,但卻有一個用戶界面: 選擇樓層的按鈕和顯示電梯正到達幾層的指示器. 對於那些連入網絡的嵌入式系統,如果該系統包含一個用於監視和控制的web服務器,界面上的區別就更顯模糊了.一個較好的定義應強調在該系統的重要功能或主要用途上. 由於Linux可以提供一個用以執行嵌入功能的基本內核以及各種你想要的用戶界面



嵌入式系統--定義 一種觀點認為: 如果某種應用沒有用戶界面,從而,用戶不能直接地和它交互,那麼它就是嵌入式系統.這當然太過簡單化了.電梯控制系統是嵌入式系統,但卻有一個用戶界面: 選擇樓層的按鈕和顯示電梯正到達幾層的指示器. 對於那些連入網絡的嵌入式系統,如果該系統包含一個用於監視和控制的web服務器,界面上的區別就更顯模糊了.一個較好的定義應強調在該系統的重要功能或主要用途上. 由於Linux可以提供一個用以執行嵌入功能的基本內核以及各種你想要的用戶界面



Copyright © Linux教程網 All Rights Reserved