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