嵌入式系統是以應用為中心,以電腦技術為基礎、軟硬體均可裁剪、適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用電腦系統。其發展已有二十多年的曆史,國際上也出現了一些著名的嵌入式作業系統,如VxWorks,Palm OS,Windows CE等等,但這些作業系統均屬於商品化產品,價格昂貴且由於原始碼不公開導致了諸如對裝置的支援 ,應用軟體的移植等一系列的問題。而Linux作為一種優秀的Free OS,近幾年在嵌入式領域異軍突起,成為了最有潛力的嵌入式作業系統。
嵌入式Linux融合了嵌入式和Linux的特點,其開發與一般的應用程式開發相比有著自己的特點,下面簡要的介紹一下嵌入式Linux開發的一般過程。
瞭解硬體是首要的一步,這是嵌入式開發的特點決定的。瞭解硬體指的是瞭解整個硬體,判斷硬體對於當前的應用來說是否合適。嵌入式系統中需要使用到CPU和各種外圍裝置,由此需要收集相關硬體的資料,包括CPU,晶片手冊和各種外圍裝置的手冊以及相關的各種電路圖等,並對整體系統有較深入的瞭解。
瞭解硬體後,下一步就該準備需要使用的Linux工具以及其他工具,這些工具包括:針對所用CPU的編譯器/彙編器/連接器,相應的庫工具,目標檔案分析/管理工具,符號查看器等等。幸運的是,由於Linux的開放性,針對不同目標平台的Linux工具都可在網上免費得到,絕大部分的這些工具都由GNU提供。所需要的其他工具還包括硬體廠商提供給公司的工具,如編程器,下載工具和查錯器等等。所有這些工具對以後的開發、調試等都可說是必不可少的。
做好以上的準備工作後,就要進入實質性的工作階段了。首先需要安排記憶體位址,如SDRAM的記憶體位址,Flash的記憶體位址等,這需要與實際應用和硬體狀況相結合來考慮,要根據硬體的限制以及實際應用的需要對記憶體位址進行合理的安排,同時要注意記憶體位址的安排要具有一定的伸縮性,以便於將來需要改動時所做的變動達到最小。一般來說,嵌入式Linux的記憶體位址安排體現在串連指令碼當中。
接著就該進入編寫啟動代碼和機器相關代碼階段了。各種不同目標系統,甚至相同目標系統的啟動代碼和機器相關代碼也是不相同的。啟動代碼一般需要完成硬體初始化,裝載核心及安裝根檔案系統以及開始核心執行的工作,不同目標平台的啟動代碼一般可通過參考Linux下已有的啟動代碼和相關CPU的手冊進行編寫。
啟動代碼和機器相關代碼編程完成並可以啟動系統後,下一步就可以開始驅動程式的編寫了。Linux編寫驅動程式與一般情況下編寫驅動程式並沒有太大的區別,都需要對相關的硬體作出瞭解,同時需要遵循Linux編寫驅動程式的一些規則進行,編寫完一個驅動程式後,一般就寫一個相應的測試程式已便隨時進行測試。Linux下各種不同類型的裝置都有相當多的驅動程式源碼可以參考,因此實際編寫時更多的時間是花在對特定硬體特性的熟悉上。
除了以上提到的這些步驟外,進行實際開發時,很多時候還要進行庫(這裡所提到的庫均指C庫),GUI和系統程式的移植。這是因為嵌入式Linux中所用的庫一般不能直接使用標準庫,而需要進行精簡,雖然已有些精簡的C庫如uClibc等可供使用,但還是需要經常對其進行修改。嵌入式Linux常用的GUI有Microwindows,MiniGUI,QT/Embedded,TinyX等等,各自均有其使用的場合,所針對的目標平台和應用程式層次也不一樣,必鬚根據實際需要進行選擇。系統程式如mount,ls等等有些是應用時所必須的,有些則是進行調試時所需要的,初始時則需要一些通用的系統程式即可。
作者:李曉平
現任職於:博利思軟體有限公司項目工程師
本文曾刊登在《共創軟體》雜誌
轉載:嵌入式 Linux 作者Blog:http://blog.csdn.net/zcatlinux/相關文章
| 巧用tmpfs加速你的linux伺服器 |
| redhat7.2 DNS配置筆記 |
| JSP的環境引擎--websphere |
| J2EE 1.4 application Server for Linux 安裝與配置 |
| 如何從技術上選擇中介軟體 |