首先,我得宣告嵌入式Linux的核心很重要,非常非常重要!但是這個東西如果你沒有一定的基礎,還是暫時不碰為好。因為想知道它的工作機理,你必須具備N多知識才可以的。弄明白核心(包括驅動和協議棧,以及核心工作機制)你至少需要作業系統原理、體系結構、微機原理、ARM體系結構、網路原理、資料結構、C語言、數位電路技術方面的知識;當然這些還遠遠不夠,你還需要了解很多細微之處;這裡就不打算多舉例了,在這方面有興趣的同學在學校開設課程不完備的條件下你很容易走上一條死路,一定要慎重!
其次,我不建議新手以一個萬能的超人方式來學習嵌入式(有人說嵌入式是程式界的特種兵,啥啥都會,上述觀點我只是部分贊同),嵌入式不是計算機專業的專利,在很多年前,嵌入式根本就不是計算機專業的人能玩的;因為它是一門跨專業學科的行業,以前一直電子和通訊兩家獨有。隨著硬體技術越來越成熟,慢慢地才把嵌入式開發的精力從硬體中解放出來,逐步轉移至軟體開發方面,尤其在智慧系統的使用上,軟體開發層面的任務也越來越多,逐漸向大規模軟體方向發展。所以,軟硬方向二者選一是非常合理的!
再次,一旦你確立了軟體開發作為自己的發展方向,那麼你選擇一個嵌入式系統就是當務之急的問題了,我建議你選擇Linux,因為它是完全開源的,很多東西錯了你就能直接查詢到原因,不依賴他人而直接解決;否則只能向廠家報告BUG了。這個Linux還有一個非常明顯的好處,就是你一旦達到了某種高度,你在看其它系統如WINCE、Symbian等,你也不會對它感冒的,因為你已經知道他們的GUI等關鍵技術的大體原理了。
最後,選擇了Linux之後,你就必須熟練地使用C語言,熟悉你使用的Linux系統;切記開始從淺灘入水才能到深海的道理,否則直接入深海你必然會被淹死的。“先會用,後會做,最後會創造”,這個過程一定要好好把握,切勿超之過急!
學習嵌入式Linux設計需要的細節很多,不過這都不是問題,關鍵在於你的心態!那麼我常說的,如果你能自己寫個GUI系統的話,那你將會很通透的理解嵌入式Linux的構架,也會很深刻的明白嵌入式Linux軟體開發的精髓。
DIY的GUI系統需要的知識:
1、系統提供寫螢幕的/dev下的檔名是哪個?檔案操作如何和類似二維陣列的LCD一一對應?
2、一個圖形介面需要的是格式問題(8位、16位、24位、32位),這些格式如何寫入資料?
3、如何在LCD上畫一個點,並且能很好的相容各種格式?
4、當有多個程式或執行緒向LCD寫入資訊時,如何避免寫入衝突?
5、觸控式螢幕和滑鼠操作相似嗎?如何編寫類似滑鼠的操作呢?
6、解決了畫點的問題,那你能根據畫點的方法,寫出畫線、畫框、畫圓和其他形狀的方法嗎?
7、能根據你解決的觸控式螢幕問題和畫點、線、面等方法繪製一個類似Windows介面的GUI嗎?
8、多個GUI介面直接疊加如何解決?那事件響應呢?
9、特殊GUI元件你怎麼設計,如對話方塊、按鈕、文字框。。。。。。他們表現方式可不一樣啊
10、當元件在某個頂級視窗上出現時,一但被其他元件覆蓋,你如何進行裁剪?
11、你如何編寫元件被觸發時所需要執行的事件機制?
12.、元件之間的訊息機制是如何傳遞的,你是如何處理的?
13、文字顯示你怎麼辦?很多元件需要文字標籤,你是怎麼解決的?
14、若一個專案需要多個程式分別執行才能完成,那麼這兩個程式一旦都是GUI的,他們之間的顯示還能層疊和有效防止這兩個程式寫入LCD時不發生衝突嗎?你設計之初的構架合理嗎?
當你把DIY的GUI系統做完,你突然發現原來原來原來一切一切一切是這樣的道理啊,這時候再看WINDOWS你突然發現,你能解釋以前你無法明白的現象了!這個時候,你已經得小道而成小仙啦!
接著你可以嘗試狂暴而有趣的移植技術,把你看到的,分析後能夠移植的東東都移植過去,權當練習!此時你已經默默地把網路(Socket)、資料庫(SQLIT3)、多媒體(….)都玩了一遍,可以了!可以考慮做像樣的專案或去搞核心研究了。其他的系統,我估計你只需要最多2個月,你就知道如何使用和開發了。一切將變得VERY EASY!
大道至簡,小而蘊真!