大家好,我是CodeAllen(康哥),今天文章的主題是承接單片機(jī),分享我之前在知乎寫的一篇關(guān)于嵌入式Linux學(xué)習(xí)路線的文章,這也是單片機(jī)工程師進(jìn)階的一個(gè)重要方向。
其實(shí)對(duì)于嵌入式開發(fā),不管是單片機(jī)方向還是Linux方向,其難度都不能說很大,但是從很多同學(xué)的反饋看則覺得嵌入式的知識(shí)門檻很高,我從我這些年的學(xué)習(xí)感悟中,大概知道了些原因。
嵌入式不同于其他一些純軟的方向,它沒有非常具體的學(xué)習(xí)的學(xué)習(xí)路線,有些培訓(xùn)班貌似具體的路線,其實(shí)是過分冗余,三四個(gè)月恨不得把嵌入式技術(shù)棧刷完,這顯然不是很好的方法,但是很多同學(xué)還樂此不疲,失敗了還總結(jié)為自己不夠刻苦,亦或是埋怨嵌入式道路難且長(zhǎng)。
我把學(xué)習(xí)嵌入式的路徑大致總結(jié)幾個(gè)關(guān)鍵詞,核心知識(shí)+實(shí)踐能力+長(zhǎng)期積累,與大家共勉。
先放個(gè)總結(jié)的腦圖,因?yàn)榧夹g(shù)本就是不斷的變化,所以后期會(huì)根據(jù)實(shí)際情況不定期更新,這個(gè)更新大家可以點(diǎn)擊文末的“閱讀原文”跳轉(zhuǎn)到知乎閱讀。
雖然嵌入式Linux的學(xué)習(xí)路線看起來比單片機(jī)復(fù)雜很多,不過使用類比學(xué)習(xí)的方法也是完全可以的,這個(gè)后邊會(huì)細(xì)說,有什么疑問也可以加我微信交流。對(duì)于嵌入式Linux而言,C語言仍然是重中之重,下邊就是我提供的一些學(xué)習(xí)概念和資源,有時(shí)間會(huì)不斷的更新,所以請(qǐng)持續(xù)關(guān)注!
下邊按照腦圖的順序依次分享下:
目的:這部分是屬于Linux的入門操作,也是新人比較容易切入的學(xué)習(xí)點(diǎn)。做到基本了解Linux系統(tǒng)的使用,知道什么是Linux即可。方法:需要在電腦上安裝Linux系統(tǒng),這里比較建議安裝虛擬機(jī),然后在虛擬機(jī)中安裝Linux系統(tǒng)。安裝步驟可以參考我的文章:CodeAllen:Ubuntu在虛擬機(jī)中的安裝方法CodeAllen:虛擬機(jī)快速安裝VMware ToolCodeAllen:Ubuntu更換下載源,國(guó)內(nèi)用戶必備書籍:《Linux命令行與shell腳本編程大全(第3版)》《Linux與Unix Shell 編程指南》
目的:上文也說了,對(duì)于嵌入式Linux開發(fā),C語言是核心,而對(duì)于軟件研發(fā),數(shù)據(jù)結(jié)構(gòu)又是靈魂。至于C++對(duì)于嵌入式是屬于進(jìn)階的角色,也是嵌入式開發(fā)后期進(jìn)入高薪的一個(gè)敲門磚,但是并不是必須,所以有余力的同學(xué)可以看看。
方法:嵌入式Linux的C語言學(xué)習(xí)是在掌握基礎(chǔ)C語言的前提下,屬于是繼續(xù)深挖的學(xué)習(xí)。所以這種情況就需要多實(shí)踐,盡可能在Linux系統(tǒng)上實(shí)操,并進(jìn)行debug,因?yàn)镃語言就是debug的藝術(shù),這是必不可少的能力。盡可能多的編碼,要學(xué)好嵌入式C語言,不能只注重C本身。算法,架構(gòu)方式等都很重要。
書籍推薦:
C語言:《C程序設(shè)計(jì)語言現(xiàn)代方法》《C Primer Plus》《高質(zhì)量C++/C編程指南》《C語言深度剖析》《C和指針》《C陷阱與缺陷》《專家C編程》《嵌入式系統(tǒng)編程》《C語言嵌入式系統(tǒng)編程修煉》
數(shù)據(jù)結(jié)構(gòu)及理論基礎(chǔ):《數(shù)據(jù)結(jié)構(gòu)(C語言版)》《算法》《算法導(dǎo)論》
進(jìn)階部分:
目的:這里的進(jìn)階其實(shí)就是進(jìn)入嵌入式Linux實(shí)戰(zhàn)階段,也是之后工作的重點(diǎn),所以這部分知識(shí)是雜糅在一起的,我雖然根據(jù)自己的理解把之分解為了三部分,但其實(shí)這些很多是需要一起學(xué)習(xí)的。
方法:對(duì)于這部分知識(shí)的學(xué)習(xí),后續(xù)的路徑有些分化,但是也有共同點(diǎn):熟練使用Linux -> Linux系統(tǒng)編程開發(fā)熟練使用Linux?->驅(qū)動(dòng)開發(fā)和Linux內(nèi)核開發(fā)當(dāng)然實(shí)際這里面還有很多細(xì)節(jié),很難用概述的方法講清楚,只能是大家學(xué)習(xí)的過程中去體會(huì)。
書籍:
Linux應(yīng)用開發(fā):《Unix環(huán)境高級(jí)編程》《嵌入式Linux應(yīng)用程序開發(fā)詳解》《Advanced Programming in the UNIX Environment》(APUE)《Linux高級(jí)程序設(shè)計(jì)》 楊宗德《嵌入式ARM系統(tǒng)原理與實(shí)例開發(fā)》 楊宗德《深入理解計(jì)算機(jī)系統(tǒng)》《操作系統(tǒng):精髓與設(shè)計(jì)原理》
Linux網(wǎng)絡(luò)開發(fā):《UNIX Network Programming》(UNP)《TCP/IP詳解》
Linux驅(qū)動(dòng)開發(fā):《Linux設(shè)備驅(qū)動(dòng)開發(fā)》(LDD)《ARM體系結(jié)構(gòu)與編程》杜春雷《linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》宋寶華
Linux內(nèi)核:《Linux內(nèi)核完全剖析》《Unix環(huán)境高級(jí)編程》《深入理解Linux內(nèi)核》《嵌入式系統(tǒng)》毛德操《Linux內(nèi)核源代碼情景分析》毛德操 胡希明《Linux內(nèi)核編程》