linux嵌入(ru)式如何自(zi)學,這里有(you)方(fang)法
時間:2018-07-03 來源:未(wei)知
現(xian)在(zai)(zai)可(ke)以說嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)linux作(zuo)為現(xian)在(zai)(zai)嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)行(xing)業(ye)的(de)最核心(xin)的(de)一(yi)個點(dian),它廣(guang)泛應(ying)用在(zai)(zai)很多手機消(xiao)費品,工業(ye),航空航天電子等相關(guan)行(xing)業(ye)。隨著社會嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)的(de)發(fa)展,嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)linux也變得成熟(shu)起來,可(ke)以說處于(yu)一(yi)直發(fa)展中,而現(xian)在(zai)(zai)是學(xue)(xue)習嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)linux最適合的(de)時間,所以很多人(ren)(ren)隨著這股潮流學(xue)(xue)習嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)linux,那(nei)么(me)問題(ti)來了,嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)linux如何(he)學(xue)(xue),有些(xie)(xie)人(ren)(ren)選擇(ze)培訓而有些(xie)(xie)人(ren)(ren)選擇(ze)自學(xue)(xue),那(nei)么(me)今天就來說一(yi)下選擇(ze)自學(xue)(xue)的(de)人(ren)(ren)兒應(ying)該(gai)從何(he)學(xue)(xue)起。
對(dui)于自學(xue)的(de)新手(shou)來說,首先要(yao)有一個清晰的(de)學(xue)習路線,不然學(xue)的(de)會很迷茫的(de)。
首(shou)先(xian)我(wo)們要明白你(ni)的(de)目的(de)是什么(me),大概來說所謂嵌入式Linux可(ke)以(yi)分為兩部分:底層(ceng)系統、應用開發。
如果你是對(dui)底層(ceng)系(xi)統感興趣(qu),那么你就(jiu)要進行如下的學習:底層(ceng)學習有驅動和應用(yong),這又(you)該怎(zen)么選擇呢?
1.我們(men)說(shuo)的驅動,其實并不局(ju)限于(yu)硬件的操作(zuo)(zuo),還有操作(zuo)(zuo)系(xi)統的原理、進程的休(xiu)眠(mian)喚(huan)醒調度等概念。
2.做應(ying)用(yong)門檻低,特別是(shi)現(xian)在的(de)ANDROID,純(chun)JAVA。做應(ying)用(yong)的(de)發展路(lu)徑個(ge)人認為就是(shi)業(ye)務(wu)純(chun)熟。
比如在(zai)通信行業(ye)、IPTV行業(ye)、手機行業(ye),你了(le)解行業(ye)的需求。所以,當(dang)領導的人,多是做應用(yong)的。
3.做(zuo)驅動,其實(shi)我不想稱(cheng)為“做(zuo)驅動”,而是想稱(cheng)為“做(zuo)底層系統”,做(zuo)好(hao)了這(zhe)是通殺各(ge)行業。
4.其(qi)實,做底層還是做應用(yong),之間(jian)并沒有一(yi)個界(jie)線,有底層經驗,再去做應用(yong),你(ni)會感覺很踏實。
接下(xia)來就(jiu)是具(ju)體的概括學習了:
一、linux入門
目前嵌(qian)入(ru)式(shi)主要(yao)開(kai)發(fa)環境有 Linux、Wince等(deng);Linux因(yin)其開(kai)源、開(kai)發(fa)操作(zuo)便利而被廣泛采用。而Linux操作(zuo)系(xi)統也(ye)只是一個(ge)簡(jian)單(dan)的操作(zuo)系(xi)統,簡(jian)單(dan)的使用對(dui)(dui)于嵌(qian)入(ru)式(shi)開(kai)發(fa)人 員(yuan)來說價值并不很高,真正有價值的是掌握Linux的基本服務和Linux的設計理念(nian)、思想(xiang),這對(dui)(dui)于嵌(qian)入(ru)式(shi)開(kai)發(fa)人員(yuan)的長(chang)(chang)期發(fa)展是很極其重要(yao)的。Linux 系(xi)統有很多發(fa)行版,RedHat、Ubuntu、Fedora等(deng)。作(zuo)為嵌(qian)入(ru)式(shi)開(kai)發(fa)人員(yuan),我們(men)沒有必要(yao)把精力(li)放到使用哪個(ge)Linux發(fa)行版上,而是盡(jin)快(kuai)把 Linux系(xi)統盡(jin)快(kuai)安裝好。如果(guo)打算堅持長(chang)(chang)期學習,那么建(jian)議您把自己(ji)的電腦(nao)做成雙(shuang)系(xi)統,而不要(yao)在虛擬機上安裝。
二、C語言
C語(yu)(yu)言(yan)(yan)是(shi)嵌(qian)(qian)入式(shi)開(kai)發(fa)必(bi)(bi)備的(de)(de)基礎知識。在(zai)(zai)Linux下從(cong)事C語(yu)(yu)言(yan)(yan)的(de)(de)開(kai)發(fa),你會覺得更(geng)(geng)為(wei)順暢、更(geng)(geng)為(wei)自然(ran),因為(wei)C語(yu)(yu)言(yan)(yan)是(shi)因unix的(de)(de)出(chu)現(xian)而誕生(sheng)的(de)(de),Linux內(nei) 核幾乎完全是(shi)由(you)C語(yu)(yu)言(yan)(yan)編寫完成的(de)(de)。學(xue)(xue)習(xi)(xi)C語(yu)(yu)言(yan)(yan),如果(guo)不(bu)(bu)(bu)會用(yong)指(zhi)(zhi)(zhi)(zhi)針(zhen),那(nei)么(me)就稱不(bu)(bu)(bu)上會C語(yu)(yu)言(yan)(yan)。做嵌(qian)(qian)入式(shi)開(kai)發(fa)指(zhi)(zhi)(zhi)(zhi)針(zhen)更(geng)(geng)顯(xian)得尤為(wei)重(zhong)要,所(suo)(suo)以做嵌(qian)(qian)入式(shi)開(kai)發(fa)除了掌(zhang)(zhang)握位(wei)操 作、限定詞(ci)等,對指(zhi)(zhi)(zhi)(zhi)針(zhen)的(de)(de)掌(zhang)(zhang)握是(shi)不(bu)(bu)(bu)可(ke)或缺的(de)(de)。而且(qie)要掌(zhang)(zhang)握多級指(zhi)(zhi)(zhi)(zhi)針(zhen)、函數指(zhi)(zhi)(zhi)(zhi)針(zhen)等等。涉及到(dao)指(zhi)(zhi)(zhi)(zhi)針(zhen),那(nei)么(me)就會講到(dao)內(nei)存分配。在(zai)(zai)大學(xue)(xue)中,學(xue)(xue)習(xi)(xi)C語(yu)(yu)言(yan)(yan)一般(ban)的(de)(de)學(xue)(xue)習(xi)(xi)很(hen)少講 到(dao)內(nei)存分配,但是(shi)如果(guo)期(qi)望從(cong)事嵌(qian)(qian)入式(shi)開(kai)發(fa),那(nei)么(me)就必(bi)(bi)須(xu)懂得C語(yu)(yu)言(yan)(yan)是(shi)怎么(me)做內(nei)存分配管理(li)的(de)(de)。指(zhi)(zhi)(zhi)(zhi)針(zhen)之(zhi)外,還要學(xue)(xue)習(xi)(xi)模塊化編譯處理(li)、指(zhi)(zhi)(zhi)(zhi)針(zhen)與數組、gcc、 Makefile、GDB、遞歸、結構(gou)體、宏定義(yi)使(shi)用(yong)等。C語(yu)(yu)言(yan)(yan)是(shi)整棟嵌(qian)(qian)入式(shi)大廈(sha)的(de)(de)基礎,所(suo)(suo)以在(zai)(zai)學(xue)(xue)習(xi)(xi)嵌(qian)(qian)入式(shi)時(shi),必(bi)(bi)須(xu)把C語(yu)(yu)言(yan)(yan)重(zhong)視起來,多敲代碼(ma),多練。一 名優秀的(de)(de)程序員必(bi)(bi)定是(shi)通過“體力勞動”再轉向“腦(nao)力勞動的(de)(de)”,這(zhe)也(ye)是(shi)為(wei)什么(me)我們要有“寫不(bu)(bu)(bu)出(chu)代碼(ma)=0”思想(xiang)的(de)(de)原因所(suo)(suo)在(zai)(zai)。
如(ru)果(guo)說C語言相當于(yu)文(wen)字,那么數(shu)(shu)據結(jie)構(gou)就相當于(yu)在(zai)造句、寫(xie)文(wen)章(zhang)。代(dai)碼質(zhi)量有(you)一(yi)部分取決于(yu)對數(shu)(shu)據結(jie)構(gou)的(de)掌握(wo)程度。在(zai)數(shu)(shu)據結(jie)構(gou)部分我(wo)們(men)要把鏈表(biao)、樹、排序作 為學習重點(dian)。而且我(wo)們(men)也可(ke)以查(cha)看一(yi)些比較(jiao)常見的(de)函數(shu)(shu)(如(ru)strcopy、strcat、printf等)在(zai)內核中是如(ru)何(he)實(shi)現的(de),以及編寫(xie)代(dai)碼模擬(ni)堆(dui)棧,這 不僅有(you)利于(yu)編寫(xie)代(dai)碼質(zhi)量的(de)提高(gao),而且還可(ke)以初步了解Linux內核精髓(sui),為今后工作打(da)下堅實(shi)的(de)基礎。

三、linux應用(yong)程序設計
Linux的(de)(de)(de)思想源于Unix。Linux繼承了Unix的(de)(de)(de)優(you)點,但是(shi)沒有用(yong)UNIX的(de)(de)(de)代碼,所有程序都是(shi)重新編寫的(de)(de)(de),而(er)且(qie)Linux與Unix的(de)(de)(de)源碼級兼(jian)容(rong)。Linux是(shi)類(lei)Unix操作系統。Linux 不僅符合(he) POSIX 標準(zhun),而(er)且(qie)還包括其(qi)它 UNIX 標準(zhun)的(de)(de)(de)多種特性(xing),例(li)如,UNIX 的(de)(de)(de) System V 接口文檔(dang)(System V Interface Document,SVID)和伯克利軟件發布(Berkeley Software Distribution,BSD)版本。Linux 采用(yong)了折衷的(de)(de)(de)策略,包含(han)了 UNIX 幾個典型(xing)特性(xing)當中(zhong)最實用(yong)的(de)(de)(de)一(yi)些功(gong)能:
Linux 采(cai)用了 SVR4 的進程間通信(xin)(IPC)機(ji)制:共(gong)享內(nei)存、消息隊列、信(xin)號(hao)。
Linux 支(zhi)持 BSD Socket 網絡編程(cheng)接口。
許(xu)多 Linux 發行版(ban)采用 SysV init 機制(zhi),支持運行級別。
此(ci)階段的(de)(de)學(xue)習(xi)是(shi)(shi)(shi)從事嵌入(ru)式上(shang)層應(ying)用開(kai)發(fa)以(yi)及底(di)層開(kai)發(fa)人(ren)員的(de)(de)必修(xiu)課(ke)程。進程、線(xian)程、信(xin)號(hao)、文(wen)件鎖、socket是(shi)(shi)(shi)這(zhe)(zhe)部分內容(rong)的(de)(de)重(zhong)點。要把(ba)這(zhe)(zhe)些內容(rong)學(xue)的(de)(de)透(tou)徹非(fei)要下些苦功夫不(bu)可。而且函數是(shi)(shi)(shi)系統(tong)提(ti)供給(gei)我們的(de)(de),難免(mian)要對計(ji)算機系統(tong)深入(ru)理解(jie)一番。TCP/IP協議(yi)也是(shi)(shi)(shi)要涉及到的(de)(de)。有問題建(jian)議(yi)用Google搜索及登陸chinaunix論壇。通(tong)過這(zhe)(zhe)個階段的(de)(de)學(xue)習(xi),我們就可以(yi)初步實現(xian)一些應(ying)用程序的(de)(de)開(kai)發(fa)了(le),如做自己的(de)(de)shell命令解(jie)析器、簡單的(de)(de)聊(liao)天軟件、視頻多播等(deng)。
四、arm體系結構(gou)
從這部分開(kai)始,我(wo)們將真正進入嵌入式(shi)開(kai)發學習階(jie)段。首先(xian)我(wo)們要知道(dao)采用(yong)(yong)哪種(zhong)處理器(qi)(qi)。目前通用(yong)(yong)嵌入式(shi)處理器(qi)(qi)有ARM、MIPS、PowerPC、X86等。從市(shi)場(chang)產品占(zhan)有率上看(kan),ARM處理器(qi)(qi)遠(yuan)遠(yuan)領先(xian)于(yu)同類(lei)其(qi)它處理器(qi)(qi),并逐步掠(lve)奪傳統51單(dan)片機和(he)英特爾市(shi)場(chang)份額。據招聘網站統計,目前用(yong)(yong)人(ren)單(dan)位在(zai)技(ji)術水(shui)平上要求開(kai)發人(ren)員掌(zhang)握ARM9及(ji)以上平臺的(de)開(kai)發技(ji)術。ARM公司在(zai)發布ARM11產品后,更改以往的(de)數字(zi)標記(ji)更新(xin)(xin)方式(shi),轉為(wei)發布ARM Cortex。但是(shi)(shi)Cortex并不是(shi)(shi)更高端,而(er)是(shi)(shi)全新(xin)(xin)系列的(de)處理器(qi)(qi),比(bi)如(ru)Cortex M3,它主要應用(yong)(yong)于(yu)機械加工、工控領域,目的(de)是(shi)(shi)取(qu)代以前的(de)ARM7處理器(qi)(qi)。
五、linux內核 驅(qu)動(dong)
眾所周知嵌(qian)入式(shi)開(kai)(kai)發包含(han)至少兩個(ge)級(ji)別(bie),一個(ge)是(shi)嵌(qian)入式(shi)內(nei)核(he)驅動(dong)級(ji)別(bie),另外(wai)一個(ge)是(shi)嵌(qian)入式(shi)應用層開(kai)(kai)發,而薪酬高(gao)的(de)(de)、最具價(jia)值的(de)(de)無疑是(shi)嵌(qian)入式(shi)內(nei)核(he)驅動(dong)級(ji)別(bie)的(de)(de)開(kai)(kai)發者。真(zhen)正的(de)(de)嵌(qian)入式(shi)高(gao)手或者企業中的(de)(de)核(he)心(xin)開(kai)(kai)發人(ren)員(yuan),一定是(shi)嵌(qian)入式(shi)底層的(de)(de)內(nei)核(he)驅動(dong)開(kai)(kai)發工(gong)程師,這些(xie)工(gong)程師成(cheng)長比較緩慢,造(zao)成(cheng)對內(nei)核(he)驅動(dong)人(ren)才的(de)(de)大(da)量需求,所以這些(xie)人(ren)才是(shi)真(zhen)正企業需要的(de)(de)香餑餑。掌握驅動(dong)開(kai)(kai)發會讓(rang)自己的(de)(de)核(he)心(xin)能力(li)有(you)極(ji)大(da)的(de)(de)飛(fei)躍(yue),真(zhen)正實現(xian)嵌(qian)入式(shi)最有(you)價(jia)值的(de)(de)就(jiu)業。
通過上面的(de)(de)(de)學習(xi)(xi),你(ni)(ni)會學的(de)(de)(de)很容易,但是有(you)一(yi)點(dian)你(ni)(ni)要知(zhi)道,自(zi)學的(de)(de)(de)話,不(bu)(bu)(bu)是很建(jian)議,因為自(zi)學,學習(xi)(xi)的(de)(de)(de)東(dong)西不(bu)(bu)(bu)全,很多(duo)東(dong)西都學不(bu)(bu)(bu)到(dao),而且不(bu)(bu)(bu)會的(de)(de)(de)時候(hou)很多(duo)都解決(jue)不(bu)(bu)(bu)了,也不(bu)(bu)(bu)能面對社會的(de)(de)(de)要求,這個的(de)(de)(de)話就得看(kan)你(ni)(ni)自(zi)身了,看(kan)你(ni)(ni)的(de)(de)(de)選(xuan)擇了,學習(xi)(xi)嵌入式還是很不(bu)(bu)(bu)錯的(de)(de)(de)。

