|  | |
| 嵌入式linux入門六步走 | |
| 學習嵌入式linux怎樣才能快速入門?這是很多出來華清遠見參加嵌入式培訓學員(yuan)愛問的問題,這里做一個總結(jie)供大(da)家(jia)參考,嵌入式linux入門(men)可以概括為(wei)六步走: 第一步:學習基本的裸機編程 對(dui)于(yu)學硬(ying)(ying)件(jian)的(de)人而言,必須(xu)先對(dui)硬(ying)(ying)件(jian)的(de)基本(ben)使(shi)用方法有感(gan)(gan)性(xing)的(de)認(ren)識(shi),更必須(xu)深刻認(ren)識(shi)該硬(ying)(ying)件(jian)的(de)控(kong)制方式(shi),如果一開(kai)始就學linux系統(tong)、學移植那么只會馬(ma)上就陷入(ru)一個很(hen)深的(de)漩渦。要(yao)知道無論做多復(fu)雜的(de)系統(tong)終都(dou)會落(luo)實到這(zhe)些(xie)底層的(de)硬(ying)(ying)件(jian)控(kong)制,因此對(dui)這(zhe)些(xie)硬(ying)(ying)件(jian)的(de)控(kong)制有了感(gan)(gan)性(xing)的(de)認(ren)識(shi)就好很(hen)多了學習裸機的(de)編(bian)程的(de)同時要(yao)好好理(li)解這(zhe)個硬(ying)(ying)件(jian)的(de)構(gou)架、控(kong)制原理(li),這(zhe)些(xie)我稱他為理(li)解硬(ying)(ying)件(jian)。 所(suo)謂的理(li)解硬(ying)件就是(shi)說(shuo),理(li)解這(zhe)個硬(ying)件是(shi)怎(zen)么(me)組織這(zhe)么(me)多資源的,這(zhe)些(xie)(xie)資源又(you)是(shi)怎(zen)么(me)由cpu、由編程進行控制(zhi)(zhi)的。比如說(shuo),s3c2410中有(you)AD轉換器(qi)(qi),有(you)GPIO(通用IO口),還有(you)nandflash控制(zhi)(zhi)器(qi)(qi),這(zhe)些(xie)(xie)東西都(dou)有(you)一(yi)些(xie)(xie)寄(ji)存器(qi)(qi)來控制(zhi)(zhi),這(zhe)些(xie)(xie)寄(ji)存器(qi)(qi)都(dou)有(you)一(yi)個地址,那(nei)么(me)這(zhe)些(xie)(xie)地址是(shi)什么(me)意思?又(you)怎(zen)么(me)通過寄(ji)存器(qi)(qi)來控制(zhi)(zhi)這(zhe)些(xie)(xie)外圍設(she)備的運(yun)轉? 還(huan)有(you),norflash內(nei)部(bu)的(de)每一個單(dan)元在(zai)這(zhe)個芯(xin)片的(de)內(nei)存中(zhong)都(dou)有(you)一個相(xiang)應的(de)地(di)(di)址(zhi)單(dan)元,那(nei)么(me)(me)這(zhe)些地(di)(di)址(zhi)與(yu)剛剛說的(de)寄存器地(di)(di)址(zhi)又(you)有(you)什么(me)(me)關系(xi)?他們是(shi)一樣的(de)嗎?而與(yu)norflash相(xiang)對應的(de)nandflash內(nei)部(bu)的(de)儲(chu)存單(dan)元并不(bu)是(shi)線(xian)性排放的(de),那(nei)么(me)(me)s3c2410怎么(me)(me)將nandflash的(de)地(di)(di)址(zhi)映射(she)在(zai)內(nei)存空間上進行使(shi)用?或者簡單(dan)地(di)(di)說應該怎么(me)(me)用nandflash? 再有,使(shi)用(yong)ADS進對(dui)(dui)ARM9行編程(cheng)時都需(xu)要使(shi)用(yong)到一(yi)(yi)個初始化的匯編文件(jian),這個文件(jian)究竟(jing)有什么(me)用(yong)?他里面的代碼是什么(me)意思?不要這個可以嗎(ma)?諸如(ru)(ru)此類(lei)都是對(dui)(dui)硬件(jian)的理解(jie)(jie),理解(jie)(jie)了(le)這些東(dong)西就對(dui)(dui)硬件(jian)有很深(shen)的理解(jie)(jie)了(le),這對(dui)(dui)以后(hou)更深(shen)一(yi)(yi)步的學習將有很大的幫(bang)助,如(ru)(ru)果(guo)跳過這一(yi)(yi)步,我相信越往后(hou)學越會覺(jue)得(de)迷茫(mang),越覺(jue)得(de)這寫東(dong)西深(shen)不可測。 第二不: 使用linux系統進行一些基本的實驗   在(zai)買一(yi)套板子的(de)時(shi)候一(yi)般會提(ti)供一(yi)些(xie)linux的(de)試驗例程(cheng),好(hao)(hao)好(hao)(hao)做(zuo)一(yi)段時(shi)間這(zhe)個(ge)吧,這(zhe)個(ge)過程(cheng)也是很有意義的(de),也是為進一(yi)步(bu)的(de)學習(xi)積累感(gan)性(xing)認識,你(ni)能想象(xiang)一(yi)個(ge)從沒有使用過linux系統的(de)人能學好(hao)(hao)linux的(de)編(bian)程(cheng)嗎(ma)?好(hao)(hao)好(hao)(hao)按照手(shou)冊上的(de)例程(cheng)做(zuo)一(yi)做(zuo)里(li)面的(de)實驗,雖然有點(dian)娃娃學走路,有點(dian)弱智,但(dan)是我想很多(duo)高手(shou)都會經歷這(zhe)個(ge)過程(cheng)。 華清遠見自主研發嵌入式開發板推薦://dev.fsbing.cn/case/ 第三步:研究完整的linux系統的的運行過程 完(wan)整的(de)linux系(xi)統包括(kuo)三部分:bootloader、linux kernel(linux內核)、rootfile(根文件(jian)系(xi)統)。這(zhe)3部分是怎(zen)么(me)(me)相互協作來構(gou)成這(zhe)個(ge)系(xi)統的(de)呢?各自(zi)有什(shen)(shen)么(me)(me)用呢?三者有什(shen)(shen)么(me)(me)聯系(xi)?怎(zen)么(me)(me)聯系(xi)?系(xi)統的(de)執行流程又是怎(zen)么(me)(me)樣的(de)呢?搞清楚(chu)這(zhe)個(ge)問題你對(dui)整個(ge)系(xi)統的(de)運行就很清楚(chu)了,對(dui)于(yu)下一步制作這(zhe)個(ge)linux系(xi)統就打下了另一個(ge)重要的(de)根基。介紹這(zhe)方面的(de)資料網上可以挖掘(jue)到(dao)幾噸,自(zi)己好(hao)好(hao)研究吧(ba)。 第四步:開始做系統移植 搞清楚(chu)linux系統三部分之間的關系和(he)作用后(hou),你現在需要做的就是自(zi)己動手學(xue)會制(zhi)作這些東(dong)西。 當然我不可能(neng)叫你編寫這些代(dai)碼(ma),這不實現(xian)(xian)。事實上(shang)(shang)這個(ge)3者(zhe)都能(neng)在(zai)(zai)網下(xia)載到(dao)相應的源代(dai)碼(ma),但是這個(ge)源代(dai)碼(ma)不可能(neng)下(xia)載編譯后(hou)就能(neng)在(zai)(zai)你的系統(tong)上(shang)(shang)運行,需要很多(duo)的修改,直到(dao)他能(neng)運行在(zai)(zai)你的板子上(shang)(shang),這個(ge)修改的過(guo)程(cheng)(cheng)就叫移植。在(zai)(zai)進行移植的過(guo)程(cheng)(cheng)中你要學的東西很多(duo),要懂的相關知識也很多(duo),等你完(wan)成了這個(ge)過(guo)程(cheng)(cheng)你會(hui)發現(xian)(xian)你已經算是一個(ge)初出茅(mao)廬的高手了。 在這個過程(cheng)中如(ru)果你很有研(yan)究精神的(de)(de)(de)話你必(bi)然會想到看(kan)源(yuan)代(dai)碼。很多書(shu)介紹(shao)你怎么閱讀(du)linux源(yuan)代(dai)碼,我不提(ti)倡無目的(de)(de)(de)地去(qu)看(kan)linux源(yuan)代(dai)碼,用許三多的(de)(de)(de)話說,這沒有意義。等你在做移植的(de)(de)(de)時(shi)候(hou)你覺得你必(bi)須去(qu)看(kan)源(yuan)代(dai)碼時(shi)再(zai)去(qu)找(zhao)基(ji)本好書(shu)看(kan)看(kan),《linux內核的(de)(de)(de)分析與編程(cheng)》,這是一(yi)本針對(dui)linux-2.6.11內核的(de)(de)(de)書(shu),說得很深,建議先提(ti)高自己的(de)(de)(de)C語言編程(cheng)水(shui)平再(zai)去(qu)看(kan)。 至于每個部分(fen)的(de)(de)移植網上參考資料很多(duo),自(zi)己研(yan)(yan)究(jiu)研(yan)(yan)究(jiu)吧,不過要提醒的(de)(de)是,很多(duo)介(jie)紹自(zi)己經(jing)驗的(de)(de)東西都或多(duo)或少有所保留,你(ni)(ni)按照他說的(de)(de)去做總有一(yi)些問題(ti),但是他不會告訴你(ni)(ni)怎么解(jie)(jie)決,這時就(jiu)要靠自(zi)己,如果自(zi)己都靠不住(zhu)就(jiu)找我(wo)一(yi)起研(yan)(yan)究(jiu)研(yan)(yan)究(jiu)吧,我(wo)也不能(neng)(neng)保證能(neng)(neng)解(jie)(jie)決你(ni)(ni)的(de)(de)問題(ti),因為我(wo)未必遇(yu)到過你(ni)(ni)的(de)(de)問題(ti),不過我(wo)相信(xin)能(neng)(neng)給你(ni)(ni)一(yi)點建議(yi),也許有助你(ni)(ni)解(jie)(jie)決問題(ti)。   這一步的(de)(de)(de)終目(mu)的(de)(de)(de)是,從(cong)源代碼的(de)(de)(de)官方主(zhu)頁上(shang)下載標準的(de)(de)(de)源代碼包(bao),然(ran)后進(jin)行修改,終運行在板子上(shang)。 第五步:研究linux驅動程序的編寫 移植系(xi)統并不(bu)是(shi)終(zhong)的(de)目的(de),終(zhong)的(de)目的(de)是(shi)開(kai)發產品,做(zuo)項目,這(zhe)些都要進行驅(qu)動(dong)程序的(de)開(kai)發。 Linux的(de)(de)(de)(de)(de)(de)驅(qu)(qu)動(dong)(dong)程(cheng)序可以(yi)說是(shi)五花(hua)八(ba)門,linux2.4和linux2.6的(de)(de)(de)(de)(de)(de)編寫有(you)相當大的(de)(de)(de)(de)(de)(de)區別(bie),就(jiu)是(shi)同為linux2.6但是(shi)不同版(ban)本(ben)間(jian)的(de)(de)(de)(de)(de)(de)驅(qu)(qu)動(dong)(dong)程(cheng)序也有(you)區別(bie),因此(ci)編寫linux的(de)(de)(de)(de)(de)(de)驅(qu)(qu)動(dong)(dong)程(cheng)序變都不是(shi)那么容易的(de)(de)(de)(de)(de)(de)事情,對于新(xin)版(ban)本(ben)的(de)(de)(de)(de)(de)(de)驅(qu)(qu)動(dong)(dong)程(cheng)序的(de)(de)(de)(de)(de)(de)編寫甚至還沒有(you)足夠的(de)(de)(de)(de)(de)(de)參考(kao)資料(liao)。那么我的(de)(de)(de)(de)(de)(de)建議就(jiu)是(shi)使(shi)用、移植一個不算很新(xin)的(de)(de)(de)(de)(de)(de)版(ban)本(ben)內(nei)核,這樣到時學驅(qu)(qu)動(dong)(dong)的(de)(de)(de)(de)(de)(de)編程(cheng)就(jiu)有(you)足夠的(de)(de)(de)(de)(de)(de)資料(liao)了。 第六步:研究應用程序的編寫 做作品做項目除了編(bian)寫驅(qu)動程(cheng)序,后還要編(bian)寫應用程(cheng)序。現在的趨勢是(shi)圖(tu)形(xing)應用程(cheng)序的開發,而圖(tu)形(xing)應用程(cheng)序中用得多的還是(shi)qt/e函(han)數庫。在這里推薦(jian)大家可(ke)以使(shi)用MiniGUI函(han)數庫,MiniGUI的編(bian)程(cheng)比較(jiao)相(xiang)似Windows下的VC編(bian)程(cheng),比較(jiao)容易上(shang)手,效果(guo)應該說是(shi)相(xiang)當不(bu)錯的。 完成這一(yi)步(bu)你基(ji)本就(jiu)學完了嵌(qian)入(ru)式(shi)linux的全(quan)部(bu)內容了,在(zai)這里(li)有一(yi)個小小的經驗想和大家分享:一(yi)般的問(wen)題到網(wang)上搜(sou)索(suo)一(yi)下,確實找(zhao)不(bu)到答(da)案了就(jiu)問(wen)問(wen)高手,還(huan)是不(bu)行(xing)了就(jiu)自己去研(yan)究,不(bu)要一(yi)味去等別人幫你解決問(wen)題。記住(zhu),問(wen)題是學習的好機會。 熱點鏈(lian)接: |