嵌入式Linux七大學習步驟,你了解幾個呢?(嵌入式linux基礎教程)
一、為什么要學習嵌入式Linux?
學習嵌入式Linux的原因,歸納起來有以下三個:
- 興趣:興趣是學習東西最好的導師;
- 職業(yè)發(fā)展:嵌入式Linux開發(fā)有好的公司和好的職業(yè)發(fā)展;
- 高收入:嵌入式開發(fā)比平常的軟件開發(fā)有更高的收入;
二、學習對象,是否適合我?
并不是任何人都適合來學習嵌入式Linux,要想學習嵌入式Linux,必須是計算機相關(guān)的學生或者畢業(yè)生,或者對計算機有強烈愛好并具有基本計算機知識的同學。
當前大學畢業(yè)生應具有的技能有:演算技能、交際能力、創(chuàng)新能力、與人合作、信息處理、外語應用、自我提高、解決問題及核心技能。
三、如何學好嵌入式Linux?
選擇學習嵌入式Linux道路之后,要如何才能學好嵌入式Linux呢?要明白以下兩點:
- 學什么?
- 如何學?
四、學什么?
嵌入式Linux所涵蓋的知識面很廣,需要按步驟、不間斷的努力深入學習,才能有所成就。學習嵌入式Linux需要學習如下5大知識(按照學習步驟):
- 嵌入式處理器(ARM)與裸機程序開發(fā);
- Linux系統(tǒng)管理;
- Linux應用程序開發(fā);
- Linux驅(qū)動程序開發(fā);
- Linux內(nèi)核開發(fā)與系統(tǒng)移植。
五、如何學?
5.1 第一大知識結(jié)構(gòu)——嵌入式微處理器與邏輯程序開發(fā)時,需要學懂一下幾點
- ARM微處理器的兩種工作模式(ARM模式和Thumb模式);
- ARM系統(tǒng)寄存器;
- ARM尋址方式;
- ARM匯編指令集;
- ARM環(huán)境C語言程序編程
- ==ARM中斷與異常==
- ADS(或其他)集成開發(fā)環(huán)境;
- ==裸機程序開發(fā)(如串口、LCD、時鐘、LED、按鍵、網(wǎng)卡驅(qū)動、音頻驅(qū)動、flash驅(qū)動等)==
以上8點鐘,第6和8點是非常重要的,而前5點則是基礎。在這個階段推薦看的書籍有:
- 語言編程類:
- ==《C語言程序設計》==——譚浩強
- 《C語言深度解剖》
- ==《C陷阱與缺陷》==
- ==《C專家編程》==
- ==《C Primer puls》==第五版——Slephen Prala
- 《高質(zhì)量C編程指南》
- ==《程序員面試寶典》==
- ARM微處理器類:
- ==《ARM嵌入式系統(tǒng)開發(fā)——軟件設計與優(yōu)化》==——斯洛斯(Sloss,A.N.)
然后就是各種驅(qū)動程序編寫時,用到什么樣的芯片就查閱相關(guān)的芯片手冊,如網(wǎng)卡DM9000,音頻的UDA1341等。
5.2 第二大知識結(jié)構(gòu)——Linux系統(tǒng)管理時,需要學懂一下幾點
- Linux定制安裝
- Linux命令詳解(會熟練的運用)
- samba、nfs、tftp等服務器的配置與使用,以及Wireshark、Source Insight、Xshell、Ultraedit等軟件的使用;
- Shell編程。
其中第2和第4點是最重要的,它將是學習以后的知識的一個最基礎的技能。學會這些東西可以看一下兩本書:
- 《Linux標準學習教材》——IT同路人
- 《Linux系統(tǒng)管理技術(shù)手冊》——奈米斯,斯奈德,海因
5.3 第三大知識結(jié)構(gòu)——Linux應用程序開發(fā)時,需要學懂一下幾點
- GCC、GDB、Makefile;
- 文件、時間編程;
- 多進程、多線程程序設計;
- 進程間通訊;
- 網(wǎng)絡編程;
- ==QT圖形化應用程序開發(fā)==;
- == Android圖形化應用程序開發(fā)==。
這個階段的知識點都特別的重要,個人覺得除了第一點外,其他六點都需要下苦功夫?qū)W習,而第7和第8是這個階段的最后兩個也是最重要的,以后也可以直接應用于工程開發(fā)中。這個階段可以學習一下兩本書:
- 《Linux程序設計》第四版——馬修(Matthew,N.),斯通斯(Stones,R.)
- 《UNIX環(huán)境高級編程》第二版——史蒂文斯,拉戈
5.4 第四大知識結(jié)構(gòu)——Linux內(nèi)核開發(fā)時,需要學習一下幾點
- Linux內(nèi)核配置與裁剪;
- Linux內(nèi)核模塊開發(fā);
- 根文件系統(tǒng)的制作;
- ==進程子系統(tǒng)==;
- ==內(nèi)存子系統(tǒng)==;
- ==Proc和sys文件系統(tǒng)==;
- ==系統(tǒng)調(diào)用==;
- ==內(nèi)核定時器==;
- ==內(nèi)核異常分析==;
這個階段的知識非常的難,看書有時看上四五遍都無法理解,建議多去各種論壇上面看看,學習大家的經(jīng)驗。本知識中從第4點到第9點是Linux內(nèi)核子系統(tǒng)的知識。這個階段可以看一下兩本書:
- 《深入理解LINUX內(nèi)核》第三版——博韋,西斯特
- 《Linux內(nèi)核源代碼情景分析》
5.5 第五大知識結(jié)構(gòu)——Linux驅(qū)動程序開發(fā)時,需要學習一下幾點
- 字符設備驅(qū)動程序;
- 總線、設備、驅(qū)動模型;
- 硬件訪問技術(shù);
- 中斷處理;
- Input設備驅(qū)動;
- Platform驅(qū)動程序;
- PCI、USB驅(qū)動程序;
- 網(wǎng)卡驅(qū)動程序;
- 觸摸屏驅(qū)動程序;
- 串口驅(qū)動程序。
這個階段所學習的驅(qū)動程序與第一階段學習的驅(qū)動程序有本質(zhì)的區(qū)別:第一個階段學習的是裸機驅(qū)動程序,重在了解硬件,而這個階段是在編寫內(nèi)核驅(qū)動模塊,同時也是硬件驅(qū)動程序,它存在于操作系統(tǒng)內(nèi)核當中,并給應用程序編程提供統(tǒng)一的編程界面,同時基本脫離硬件的具體操作。
這個階段可學習如下書籍:
- 《Linux驅(qū)動開發(fā)入門與實戰(zhàn)》——鄭強
- 《LINUX設備驅(qū)動程序》——科波特
- 《精通Linux設備驅(qū)動程序開發(fā)》——溫卡特斯瓦蘭
至此,嵌入式Linux五大知識體系就學習完成了。
六、學習順序?
由于嵌入式Linux知識架構(gòu)非常多,也非常難,為了達到學習的真正效果,建議按照以下順序進行學習:
- 嵌入式處理器與裸機程序開發(fā);
- Linux系統(tǒng)管理;
- Linux應用程序開發(fā);
- Linux內(nèi)核開發(fā)基礎;
- 嵌入式Linux環(huán)境搭建;
- Linux驅(qū)動程序開發(fā);
- 深入學習Linux內(nèi)核;
這里將學習的過程分為三個重要的階段,大家可以根據(jù)自身的情況調(diào)整學習的時間和進度。
image
圖1 嵌入式學習第一階段
image
圖2 嵌入式學習第二階段
image
圖3 嵌入式學習第三階段
當然,就目前形式來說,一般的第三個階段的學習轉(zhuǎn)為了Java程序語言的學習和Android系統(tǒng)的開發(fā)上面了,這個根據(jù)個人的興趣愛好分享發(fā)展,但是前面兩個階段是必須要熟練掌握的。
七、注意
根據(jù)個人的學習經(jīng)驗,得出如下幾點需要注意:
- 這五大知識體系是相互穿插,相互依賴的。大家學習的時候一定要==按照先后順序?qū)W習==,如果后面學習的東西有不懂或不能理解的,一定要回頭查閱以前學過的知識,或者上相關(guān)論壇與大蝦們探討;
- 在每個知識點中,我都羅列了至少兩本書籍,但并不是每本書大家都必須去看,去研究,而是大家==選擇其中一本進行深入研究即可==,知識我列出來的書相比較于其他書籍較好而已;另外每個部分的書籍是按照從易到難的順序羅列的,大家可根據(jù)自己的具體情況進行學習;
- 學習過程是艱苦的,大家如果確定要學習嵌入式Linux,就必須下狠心,多努力,不能“三天打漁兩天曬網(wǎng)”,至少應該==保證一個階段學完一個知識體系==;另外還要注重==多實踐==。