1. 程式人生 > >嵌入式開發學習路線——寫給初入門的同仁

嵌入式開發學習路線——寫給初入門的同仁

 一般的應用開發,例如桌面應用的開發,移動應用的開發,通常都是在一個IDE整合開發環境中完成。

開發者,熟悉了IDE的使用,熟悉了相關應用程式設計介面API,就能開發應用了。不需要關心繫統本身的太多東西。

(當然,這並不是說,一般的應用開發,不需要了解很多的系統知識。如果開發者具有深厚的系統知識,那當然對於應用開發大有幫助)。

而嵌入式開發卻有所不同,他相當於是做系統整合。

開發者可能需要自己確定使用什麼cpu,什麼記憶體,什麼flash,使用什麼外圍裝置。

同時,整個系統的軟體,包括boot、核心、檔案系統、應用程式,可能有部分或全部需要自己去拼湊或開發。

這樣的話,光靠一點點程式語言的知識,就難以搞定了。

那怎麼辦呢,當然要學習一些額外的東西了。

好了,話歸正轉。下面給出相關的學習資料。資料出現的順序,也就是我們學習的順序。

1.  C程式設計語言

    C語言作者寫的書,超級精簡。因為精簡,所以,這本書要很認真的讀。不要求快,要細嚼慢嚥,要多思考,要從頭到尾(包括附錄)的讀。

2.  Unix環境高階程式設計 第2版

    知名的Unix程式設計書籍。學完這本書,對一般的Linux應用開發,基本上可以達到得心應手的地步。

3. Unix網路程式設計 第3版 第1卷

    知名的Unix程式設計書籍。學完這本書,對一般的Linux網路應用開發,基本上可以達到得心應手的地步。

    (說句題外話,如果自我要求不高的話,學完這3本書,出去混口飯吃已經不是大問題了。)

       (另外,如果想深入一點理解網路,TCP/IP詳解 卷2  是一本非常好的書)

4.  深入理解計算機系統

    注意,到這裡,要進入關鍵的一步了。這本書,共分為3部分,我們只要看前2部分即可。

    這本書,要相當認真的學習。不僅要看,要思考,還要做完所有的練習題(做題非常重要,一定要堅持先做,再看答案)。

    同時,書中的內容不可能解答你全部的程式設計疑問。因此,在學習過程中,對自己以前不理解的概念(如C語法的含義,C++多型究竟是如何實現的等問題),要多寫小函式或者小程式碼片段,多分析他們對應的彙編程式碼(objdump這個最精確;當然,通過使用-S編譯選項也行,它的可讀性要好一點,但是可能會帶有巨集指令)。另外,我的經驗是,寫小函式時,參與運算的變數,最好將它定義為入參(編譯器不敢優化)而不是區域性變數或全域性變數(容易被編譯器優化,導致未能生成你要想看的機器碼)。

        這本書學完,你將真正成為C語言(甚至C++)的專家。因為你將從機器碼的層次,理解C(及C++)的語義究竟是怎麼實現的。你還會理解,從C語言程式碼生成可執行程式的整個過程(預處理,編譯,連結,靜態庫,動態庫等)。你還將理解程序的概念,包括程序如何執行,程序如何與OS互動(中斷、異常、系統呼叫)。

5.  Linux核心設計與實現

    到這裡,算是開始踏入Linux核心的大門了。這本書,從比較高的層次介紹Linux核心。是非常好的核心入門書籍。

6.  Linux核心原始碼情景分析

    華人寫的書,超級通俗易懂。從幫助讀者理解核心的角度來看,本書幾乎可以算是最好的一本書了。

7. Linux裝置驅動程式

    這本書非常注重實用。我們最終的開發,基本上,要麼是開發驅動,要麼是在核心中做些應用(並與使用者態做一定互動)。而這本書恰恰教給我們最老練的開發方法。

8    u-boot學習

      這裡推薦的不是書籍了,而是一篇網路資料。

        上面這篇文章,是一篇非常不錯的介紹u-boot工作機制的好文。

        另外,學習u-boot,最好還是買塊開發板,以便於實驗。

       開發板不用買高檔的,買個基本的arm9的就行了。因為我們是學習嵌入式系統原理,有個基本的arm9 CPU就足夠了。

       當然,如果是做產品,那還是需要根據產品本身的需求來做選型的。

        有了開發板,就可以修改、編譯、燒寫u-boot、核心、根檔案系統了。

        有了開發板,就可以理解從CPU一通電開始,到Linux跑起來,到最後應用跑起來,在這整個過程中,機器裡所發生的一切事情了。

好了,在下能介紹的內容就這麼多了。後面搞什麼,怎麼搞,就看大家自己的啦。