嵌入式Linux學習步驟
一、為什麼要學習嵌入式Linux?
學習嵌入式Linux的原因,歸納起來有以下三個:
- 興趣:興趣是學習東西最好的導師;
- 職業發展:嵌入式Linux開發有好的公司和好的職業發展;
- 高收入:嵌入式開發比平常的軟體開發有更高的收入;
二、學習物件,是否適合我?
並不是任何人都適合來學習嵌入式Linux,要想學習嵌入式Linux,必須是計算機相關的學生或者畢業生,或者對計算機有強烈愛好並具有基本計算機知識的同學。
當前大學畢業生應具有的技能有: 演算技能、交際能力、創新能力、與人合作、資訊處理、外語應用、自我提高、解決問題及核心技能 。
三、如何學好嵌入式Linux?
選擇學習嵌入式Linux道路之後,要如何才能學好嵌入式Linux呢?要明白以下兩點:
- 學什麼?
- 如何學?
四、學什麼?
嵌入式Linux所涵蓋的知識面很廣,需要按步驟、不間斷的努力深入學習,才能有所成就。學習嵌入式Linux需要學習如下5大知識(按照學習步驟):
- 嵌入式處理器(ARM)與裸機程式開發;
- Linux系統管理;
- Linux應用程式開發;
- Linux驅動程式開發;
- Linux核心開發與系統移植。
五、如何學?
5.1 第一大知識結構——嵌入式微處理器與邏輯程式開發時,需要學懂一下幾點
- ARM微處理器的兩種工作模式(ARM模式和Thumb模式);
- ARM系統暫存器;
- ARM定址方式;
- ARM彙編指令集;
- ARM環境C語言程式程式設計
- ==ARM中斷與異常==
- ADS(或其他)整合開發環境;
- ==裸機程式開發(如串列埠、LCD、時鐘、LED、按鍵、網絡卡驅動、音訊驅動、flash驅動等)==
以上8點鐘,第6和8點是非常重要的,而前5點則是基礎。在這個階段推薦看的書籍有:
- 語言程式設計類:
- ==《C語言程式設計》==——譚浩強
- 《C語言深度解剖》
- ==《C陷阱與缺陷》==
- ==《C專家程式設計》==
- ==《C++ Primer puls》==第五版——Slephen Prala
- 《高質量C程式設計指南》
- ==《程式設計師面試寶典》==
- ARM微處理器類:
- ==《ARM嵌入式系統開發——軟體設計與優化》==——斯洛斯(Sloss,A.N.)
然後就是各種驅動程式編寫時,用到什麼樣的晶片就查閱相關的晶片手冊,如網絡卡DM9000,音訊的UDA1341等。
5.2 第二大知識結構——Linux系統管理時,需要學懂一下幾點
- Linux定製安裝
- Linux命令詳解(會熟練的運用)
- samba、nfs、tftp等伺服器的配置與使用,以及Wireshark、Source Insight、Xshell、Ultraedit等軟體的使用;
- Shell程式設計。
其中第2和第4點是最重要的,它將是學習以後的知識的一個最基礎的技能。學會這些東西可以看一下兩本書:
- 《Linux標準學習教材》——IT同路人
- 《Linux系統管理技術手冊》——奈米斯,斯奈德,海因
5.3 第三大知識結構——Linux應用程式開發時,需要學懂一下幾點
- GCC、GDB、Makefile;
- 檔案、時間程式設計;
- 多程序、多執行緒程式設計;
- 程序間通訊;
- 網路程式設計;
- ==QT圖形化應用程式開發==;
- == Android圖形化應用程式開發==。
這個階段的知識點都特別的重要,個人覺得除了第一點外,其他六點都需要下苦功夫學習,而第7和第8是這個階段的最後兩個也是最重要的,以後也可以直接應用於工程開發中。這個階段可以學習一下兩本書:
- 《Linux程式設計》第四版——馬修(Matthew,N.),斯通斯(Stones,R.)
- 《UNIX環境高階程式設計》第二版——史蒂文斯,拉戈
5.4 第四大知識結構——Linux核心開發時,需要學習一下幾點
- Linux核心配置與裁剪;
- Linux核心模組開發;
- 根檔案系統的製作;
- ==程序子系統==;
- ==記憶體子系統==;
- ==Proc和sys檔案系統==;
- ==系統呼叫==;
- ==核心定時器==;
- ==核心異常分析==;
這個階段的知識非常的難,看書有時看上四五遍都無法理解,建議多去各種論壇上面看看,學習大家的經驗。本知識中從第4點到第9點是Linux核心子系統的知識。這個階段可以看一下兩本書:
- 《深入理解LINUX核心》第三版——博韋,西斯特
- 《Linux核心原始碼情景分析》
5.5 第五大知識結構——Linux驅動程式開發時,需要學習一下幾點
- 字元裝置驅動程式;
- 匯流排、裝置、驅動模型;
- 硬體訪問技術;
- 中斷處理;
- Input裝置驅動;
- Platform驅動程式;
- PCI、USB驅動程式;
- 網絡卡驅動程式;
- 觸控式螢幕驅動程式;
- 串列埠驅動程式。
這個階段所學習的驅動程式與第一階段學習的驅動程式有本質的區別:第一個階段學習的是裸機驅動程式,重在瞭解硬體,而這個階段是在編寫核心驅動模組,同時也是硬體驅動程式,它存在於作業系統核心當中,並給應用程式程式設計提供統一的程式設計介面,同時基本脫離硬體的具體操作。
這個階段可學習如下書籍:
- 《Linux驅動開發入門與實戰》——鄭強
- 《LINUX裝置驅動程式》——科波特
- 《精通Linux裝置驅動程式開發》——溫卡特斯瓦蘭
至此,嵌入式Linux五大知識體系就學習完成了。
六、學習順序?
由於嵌入式Linux知識架構非常多,也非常難,為了達到學習的真正效果,建議按照以下順序進行學習:
- 嵌入式處理器與裸機程式開發;
- Linux系統管理;
- Linux應用程式開發;
- Linux核心開發基礎;
- 嵌入式Linux環境搭建;
- Linux驅動程式開發;
- 深入學習Linux核心;
這裡將學習的過程分為三個重要的階段,大家可以根據自身的情況調整學習的時間和進度。

image
圖1 嵌入式學習第一階段

image
圖2 嵌入式學習第二階段

image
圖3 嵌入式學習第三階段
當然,就目前形式來說,一般的第三個階段的學習轉為了Java程式語言的學習和Android系統的開發上面了,這個根據個人的興趣愛好分享發展,但是前面兩個階段是必須要熟練掌握的。
七、注意
根據個人的學習經驗,得出如下幾點需要注意:
- 這五大知識體系是相互穿插,相互依賴的。大家學習的時候一定要==按照先後順序學習==,如果後面學習的東西有不懂或不能理解的,一定要回頭查閱以前學過的知識,或者上相關論壇與大蝦們探討;
- 在每個知識點中,我都羅列了至少兩本書籍,但並不是每本書大家都必須去看,去研究,而是大家==選擇其中一本進行深入研究即可==,知識我列出來的書相比較於其他書籍較好而已;另外每個部分的書籍是按照從易到難的順序羅列的,大家可根據自己的具體情況進行學習;
- 學習過程是艱苦的,大家如果確定要學習嵌入式Linux,就必須下狠心,多努力,不能“三天打漁兩天晒網”,至少應該==保證一個階段學完一個知識體系==;另外還要注重==多實踐==。