嵌入式開(kāi)發(fā)學(xué)習(xí)路線——寫給初入門的同仁
掃描二維碼
隨時(shí)隨地手機(jī)看文章
一般的應(yīng)用開(kāi)發(fā),例如桌面應(yīng)用的開(kāi)發(fā),移動(dòng)應(yīng)用的開(kāi)發(fā),通常都是在一個(gè)IDE集成開(kāi)發(fā)環(huán)境中完成。
開(kāi)發(fā)者,熟悉了IDE的使用,熟悉了相關(guān)應(yīng)用編程接口API,就能開(kāi)發(fā)應(yīng)用了。不需要關(guān)心系統(tǒng)本身的太多東西。
(當(dāng)然,這并不是說(shuō),一般的應(yīng)用開(kāi)發(fā),不需要了解很多的系統(tǒng)知識(shí)。如果開(kāi)發(fā)者具有深厚的系統(tǒng)知識(shí),那當(dāng)然對(duì)于應(yīng)用開(kāi)發(fā)大有幫助)。
而嵌入式開(kāi)發(fā)卻有所不同,他相當(dāng)于是做系統(tǒng)集成。
開(kāi)發(fā)者可能需要自己確定使用什么cpu,什么內(nèi)存,什么flash,使用什么外圍設(shè)備。
同時(shí),整個(gè)系統(tǒng)的軟件,包括boot、內(nèi)核、文件系統(tǒng)、應(yīng)用程序,可能有部分或全部需要自己去拼湊或開(kāi)發(fā)。
這樣的話,光靠一點(diǎn)點(diǎn)編程語(yǔ)言的知識(shí),就難以搞定了。
那怎么辦呢,當(dāng)然要學(xué)習(xí)一些額外的東西了。
好了,話歸正轉(zhuǎn)。下面給出相關(guān)的學(xué)習(xí)資料。資料出現(xiàn)的順序,也就是我們學(xué)習(xí)的順序。
1. C程序設(shè)計(jì)語(yǔ)言
C語(yǔ)言作者寫的書(shū),超級(jí)精簡(jiǎn)。因?yàn)榫?jiǎn),所以,這本書(shū)要很認(rèn)真的讀。不要求快,要細(xì)嚼慢咽,要多思考,要從頭到尾(包括附錄)的讀。
2. Unix環(huán)境高級(jí)編程 第2版
知名的Unix編程書(shū)籍。學(xué)完這本書(shū),對(duì)一般的Linux應(yīng)用開(kāi)發(fā),基本上可以達(dá)到得心應(yīng)手的地步。
3. Unix網(wǎng)絡(luò)編程 第3版 第1卷
知名的Unix編程書(shū)籍。學(xué)完這本書(shū),對(duì)一般的Linux網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā),基本上可以達(dá)到得心應(yīng)手的地步。
(說(shuō)句題外話,如果自我要求不高的話,學(xué)完這3本書(shū),出去混口飯吃已經(jīng)不是大問(wèn)題了。)
(另外,如果想深入一點(diǎn)理解網(wǎng)絡(luò),TCP/IP詳解 卷2 是一本非常好的書(shū))
4. 深入理解計(jì)算機(jī)系統(tǒng)
注意,到這里,要進(jìn)入關(guān)鍵的一步了。這本書(shū),共分為3部分,我們只要看前2部分即可。
這本書(shū),要相當(dāng)認(rèn)真的學(xué)習(xí)。不僅要看,要思考,還要做完所有的練習(xí)題(做題非常重要,一定要堅(jiān)持先做,再看答案)。
同時(shí),書(shū)中的內(nèi)容不可能解答你全部的編程疑問(wèn)。因此,在學(xué)習(xí)過(guò)程中,對(duì)自己以前不理解的概念(如C語(yǔ)法的含義,C++多態(tài)究竟是如何實(shí)現(xiàn)的等問(wèn)題),要多寫小函數(shù)或者小代碼片段,多分析他們對(duì)應(yīng)的匯編代碼(objdump這個(gè)最精確;當(dāng)然,通過(guò)使用-S編譯選項(xiàng)也行,它的可讀性要好一點(diǎn),但是可能會(huì)帶有宏指令)。另外,我的經(jīng)驗(yàn)是,寫小函數(shù)時(shí),參與運(yùn)算的變量,最好將它定義為入?yún)?編譯器不敢優(yōu)化)而不是局部變量或全局變量(容易被編譯器優(yōu)化,導(dǎo)致未能生成你要想看的機(jī)器碼)。
這本書(shū)學(xué)完,你將真正成為C語(yǔ)言(甚至C++)的專家。因?yàn)槟銓臋C(jī)器碼的層次,理解C(及C++)的語(yǔ)義究竟是怎么實(shí)現(xiàn)的。你還會(huì)理解,從C語(yǔ)言代碼生成可執(zhí)行程序的整個(gè)過(guò)程(預(yù)處理,編譯,鏈接,靜態(tài)庫(kù),動(dòng)態(tài)庫(kù)等)。你還將理解進(jìn)程的概念,包括進(jìn)程如何運(yùn)行,進(jìn)程如何與OS交互(中斷、異常、系統(tǒng)調(diào)用)。
5. Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)
到這里,算是開(kāi)始踏入Linux內(nèi)核的大門了。這本書(shū),從比較高的層次介紹Linux內(nèi)核。是非常好的內(nèi)核入門書(shū)籍。
6. Linux內(nèi)核源代碼情景分析
華人寫的書(shū),超級(jí)通俗易懂。從幫助讀者理解內(nèi)核的角度來(lái)看,本書(shū)幾乎可以算是最好的一本書(shū)了。
7. Linux設(shè)備驅(qū)動(dòng)程序
這本書(shū)非常注重實(shí)用。我們最終的開(kāi)發(fā),基本上,要么是開(kāi)發(fā)驅(qū)動(dòng),要么是在內(nèi)核中做些應(yīng)用(并與用戶態(tài)做一定交互)。而這本書(shū)恰恰教給我們最老練的開(kāi)發(fā)方法。





