嵌入式系統(tǒng)及如何開發(fā)自己的嵌入式系統(tǒng)
多數(shù)Linux系統(tǒng)是在PC平臺上運行,然而Linux作為嵌入式系統(tǒng)也是非常穩(wěn)定的。本文描繪了一個嵌入式系統(tǒng)的概覽,并展示嵌入式系統(tǒng)產(chǎn)品是如何使用Linux的。
嵌入式系統(tǒng)比摩西還老的故事
電腦用于控制設備或嵌入系統(tǒng)的歷史幾乎電腦自身的歷史一樣長。在通訊領(lǐng)域,六十年代晚期,電腦被用于電子電話交換機,稱為“存儲程序控制”系統(tǒng)。“電腦”這詞那時并不普遍,存儲程序指內(nèi)存裝有程序和例程信息。存儲控制邏輯,而不是將其固化在硬件中,在當時確實是突破性的。今天,我們認為它本來就應如此。
那時的電腦是為每一個應用而定制的,按今天的標準,它們是一些不正常的、由奇怪的特殊指令和I/O設備集成在一部電腦中。
微處理器通過提供構(gòu)建大系統(tǒng)模塊的小型、低成本、CPU引擎改變了這一切。它提出了外設通過總線聯(lián)接的固定硬件架構(gòu)及稱為編程的一般編程模型。
軟件也隨著硬件提出。最初,編寫和測試軟件只有簡單的編程開發(fā)工具。每個項目實際運行的軟件通常來自于草稿的修改。編程常用匯編語言或宏語言,因為編譯器常常有缺陷和缺乏完善的調(diào)試工具。軟件構(gòu)建模塊和標準化庫只是到了七十年代才流行起來的概念。
嵌入式系統(tǒng)的商品化操作系統(tǒng)在1970年代后期才出現(xiàn),許多是用匯編語言寫成的,并且只能用于特定的微處理器,當微處理器被淘汰時,它的操作系統(tǒng)除非為新處理器重寫,否則也要被淘汰。今天,許多這類早期的系統(tǒng)成了些模糊的記憶;還有誰記得MTOS嗎?當C語言出現(xiàn)時,操作系統(tǒng)編寫的效率、穩(wěn)定性、可移植性都提高了很多。這一點在管理上立刻表現(xiàn)出來,它為微處理器被淘汰時保護軟件投資帶來了希望。對于市場來說這是一個好消息。用C語言寫成的操作系統(tǒng)今天越來越普遍。一般來說,可重復使用的軟件已經(jīng)占主導并越做越好。
在八十年代早期,我最喜歡的操作系統(tǒng)是Wendon操作系統(tǒng),大約150美元就可以得到一個C源碼庫。它是一個包,你可以通過選擇部件建立自己的操作系統(tǒng),類似在菜單上點菜。例如,你可以在庫清單上點工作排程安排和內(nèi)存管理方案。 很多嵌入式系統(tǒng)的商品化操作系統(tǒng)是在八十年代出現(xiàn)的。這一熱潮持續(xù)到現(xiàn)在,今天,有很多可行的商品化操作系統(tǒng)可供選擇。一些大佬出現(xiàn)了,如VxWorks, pSOS, Neculeus和Windows CE.
許多嵌入式系統(tǒng)根本沒有操作系統(tǒng),只有循環(huán)控制。對于一些簡單設備這是足夠的,但是隨著系統(tǒng)越來越復雜,操作系統(tǒng)就很必要了或軟件變得不可思議的復雜。不幸的是,有些復雜得可怕的嵌入式系統(tǒng)只因為設計者堅持不要操作系統(tǒng)才那么復雜。
漸漸地,更多嵌入式系統(tǒng)需要與各類網(wǎng)絡聯(lián)接,因此需要網(wǎng)絡功能。即便是酒店的門把手也嵌入了微處理器與網(wǎng)絡相聯(lián)。 對于僅僅是編碼控制循環(huán)的嵌入式系統(tǒng),增加網(wǎng)絡功能將導致系統(tǒng)復雜程度提高以致要求操作系統(tǒng)。
除了商品化操作系統(tǒng),還有大量專用操作系統(tǒng)。其中大部分來自于草案,如CISCO的IOS;還有是從其他操作系統(tǒng)中派生出來的。例如,許多操作系統(tǒng)是從同一版本的Berkeley Unix系統(tǒng)派生,因為它有完整的網(wǎng)絡功能。其他是基于主要操作系統(tǒng)的如KA9Q來自Phil Karn。
Linux作為嵌入式系統(tǒng)是一個帶有很多優(yōu)勢的新成員。它對許多CPU和硬件平臺都是可移植的、穩(wěn)定、功能強大、易于開發(fā)。
工具包突破ICE的障礙
開發(fā)嵌入式系統(tǒng)的關(guān)鍵的是可用的工具包。像任何工作一樣,好的工具使得工作更快更好。開發(fā)的不同階段需要不同的工具。
傳統(tǒng)上,首先用于開發(fā)嵌入式系統(tǒng)工具是內(nèi)部電路仿真器(ICE),它是一個相對昂貴的部件,用于植入微處理器與總線之間的電路中,允許使用者監(jiān)視和控制微處理器所有信號的進出。這有點難做,因為它是異體,可能會引起不穩(wěn)定。但是它提供了總線工作的清晰狀況,免了許多對硬件軟件底層工作狀況的猜測。
過去,一些工作依賴ICE為主要調(diào)試工具,用于整個開發(fā)過程。但是,一旦初始化軟件對串口支持良好的話,多數(shù)的調(diào)試可以不用ICE而用其他方法進行。較新的嵌入式系統(tǒng)利用非常清晰的微處理器設計。有時,相應工作初始碼已經(jīng)有了能夠快速獲得串口工作。這意味著沒有ICE人們也能夠方便地工作。省去ICE降低了開發(fā)的成本。一旦串口開始工作,它可以支持各種專業(yè)開發(fā)工具。
Linux是基于GNU的C編譯器,作為GNU工具鏈的一部分,與gdb源調(diào)試器一起工作。它提供了開發(fā)嵌入式Linux系統(tǒng)的所有軟件工具。這有些典型的、用于在新硬件上開發(fā)嵌入式Linux系統(tǒng)的調(diào)試工具。{{分頁}}
1. 寫入或植入引導碼
2. 向串口打印字符串的編碼,如“Hello World”(事實上我更喜歡“Watson,Come hre I need you”,電話上常用的第一個詞。)
3. 將gdb目標碼植入工作串口,這可與另一臺運行g(shù)db程序的Linux主機系統(tǒng)對話。只要簡單地告訴gdb通過串口調(diào)試程序。它通過串口與測試機的gdb目標碼對話,你可以進行C源代碼調(diào)試,也可以用這個功能將更多的碼載入RAM或Flash Memory中。
4. 利用gdb讓硬件和軟件初始化碼在Linux內(nèi)核啟動時工作。
5. 一旦Linux內(nèi)核啟動,串口成為Linux控制口并可用于后續(xù)開發(fā)。利用kgdb,內(nèi)核調(diào)試版的gdb,這步常常不作要求,如果你與網(wǎng)絡聯(lián)接,如10BaseT,下一步你可能要啟動它。
6. 如果在你的目標硬件上運行了完整的Linux內(nèi)核,你可以調(diào)試你的應用進程。利用其他的gdb或覆蓋gdb的圖形如xgdb。
什么是實時系統(tǒng)?
嵌入式系統(tǒng)常常被錯誤地分為實時系統(tǒng),盡管多數(shù)系統(tǒng)一般并不要求實時功能。實時是一個相對的詞,純化論者常常嚴格地定義實時為對一事件以預定的方式在極短的時間如微秒作出響應漸漸地,在如此短暫時間間隔內(nèi)的嚴格實時功能在專用DSP芯片或ASIC上實現(xiàn)了。只有在設計低層硬件FIFO、分散/聚集DMA引擎和定制硬件時才會有這樣的要求。
許多設計人員因為對真實的要求設有清晰的理解而對實時的要求焦慮不安。對于大多數(shù)的系統(tǒng),在一至五微秒的近似實時響應已經(jīng)足夠。同樣軟需求也是可以接受的。如 Windows 98 已經(jīng)崩潰的中斷必須在4毫秒內(nèi)(
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論