|
發(fā)一篇給電子設(shè)計(jì)信息網(wǎng)(www.eaw.com.cn)的“技術(shù)人生”雜志寫(xiě)的文章,希望大伙能有所體會(huì)。另外,如果要轉(zhuǎn)載請(qǐng)注明是電子設(shè)計(jì)信息網(wǎng)的“技術(shù)人生”雜志,謝謝!
如何快速有效的掌握ARM和Linux
如何才能少走彎路,即“快速”又“有效”的掌握ARM Linux?這是大多數(shù)初學(xué)者都會(huì)有的疑問(wèn),阿南覺(jué)得這是一個(gè)非常好的問(wèn)題,學(xué)習(xí)者就應(yīng)當(dāng)經(jīng)常思考自己是否處在最有效的方式下學(xué)習(xí)。所以《ARM Linux入門(mén)與實(shí)踐》一書(shū)也主要以阿南的ARM和Linux自學(xué)經(jīng)歷為線索、基礎(chǔ),試圖希望自學(xué)朋友們能夠從中體會(huì)出規(guī)律、方法和道理,再根據(jù)自身的實(shí)踐情況總結(jié)出適合自己的一套快速、有效的掌握ARM Linux的學(xué)習(xí)步驟和方法。此次有幸在《技術(shù)人生》里和朋友們?cè)俅谓涣鬟@個(gè)問(wèn)題,阿南感到高興!希望能夠給更多的朋友以借鑒,也歡迎朋友們給阿南來(lái)信(ccn422@hotmail.com)進(jìn)一步交流學(xué)習(xí)共同提高。
一.明確學(xué)習(xí)目標(biāo)和目的
隨著工作的深入,需要學(xué)習(xí)的知識(shí)、技術(shù)也越來(lái)越多,這讓阿南不得不在學(xué)習(xí)時(shí)特別強(qiáng)調(diào)目標(biāo)和目的性。比如在ARM的學(xué)習(xí)中,不需要學(xué)習(xí)太多的匯編知識(shí),因?yàn)橐话愕腁RM應(yīng)用幾乎不親自用匯編去寫(xiě)程序,只需要能夠理解啟動(dòng)代碼和少量用匯編實(shí)現(xiàn)的底層庫(kù)函數(shù)。在Linux的學(xué)習(xí)中,不需要去研究大量的內(nèi)核源代碼,只需學(xué)習(xí)常用的Linux命令、目錄結(jié)構(gòu)等,再以應(yīng)用編程和Linux驅(qū)動(dòng)編程為主。如果工作上需要GUI和網(wǎng)絡(luò)編程,那么也可以有選擇的學(xué)習(xí)相應(yīng)的部分知識(shí)?傊龅剑号c目標(biāo)較遠(yuǎn)的“不學(xué)”,或暫時(shí)不學(xué),因?yàn)榧词箤W(xué)了也很快會(huì)忘記,但卻浪費(fèi)了原本就緊張的時(shí)間。阿南認(rèn)為之所以有天才或智者,主要取決于它善于思考,尋找方法和捷徑,善于判斷重點(diǎn)和次要,善于花時(shí)間扎扎實(shí)實(shí)的做好必須要做的工作,學(xué)習(xí)必須要學(xué)習(xí)的知識(shí),而不拘泥于次要或不相關(guān)的細(xì)節(jié)上。
二.硬件是基礎(chǔ),但它沒(méi)有想象中難
通?梢詫⒄麄(gè)嵌入式系統(tǒng)分成硬件、底層驅(qū)動(dòng)和應(yīng)用程序三個(gè)部分,而學(xué)習(xí)者除了具有不同程度的單片機(jī)基礎(chǔ)的電子類專業(yè)外,還有計(jì)算機(jī)軟件專業(yè)的朋友。據(jù)阿南觀察,無(wú)論是電子還是計(jì)算機(jī)專業(yè)都對(duì)底層驅(qū)動(dòng)最感興趣,都想將來(lái)從事基于Linux下的驅(qū)動(dòng)開(kāi)發(fā)。底層驅(qū)動(dòng)位于硬件和應(yīng)用程序之間,是橋梁,它不僅要求工程師能夠理解硬件,也要求有一定的應(yīng)用編程能力。其中硬件是基礎(chǔ),如果不想只從事純應(yīng)用(和硬件沒(méi)有任何關(guān)系)編程,那必須要求掌握一定的ARM系統(tǒng)與接口等硬件技術(shù),具有分析系統(tǒng)原理和調(diào)試解決問(wèn)題的能力。而事實(shí)上,初學(xué)者往往忽略了硬件,忽略了整個(gè)系統(tǒng)的原理構(gòu)成。電子類專業(yè)的學(xué)習(xí)者急于去學(xué)習(xí)軟件,急于在開(kāi)發(fā)板上運(yùn)行程序,有些朋友甚至將開(kāi)發(fā)板自帶的所有程序編譯、運(yùn)行一次就認(rèn)為已經(jīng)學(xué)完、掌握ARM了。計(jì)算機(jī)專業(yè)的朋友更是害怕硬件,只學(xué)軟件。阿南覺(jué)得這種學(xué)習(xí)方式是不好的,應(yīng)該重視硬件,從硬件的原理開(kāi)始掌握。其實(shí)硬件并沒(méi)有初學(xué)者想像中難,ARM處理器原廠或第三方也都會(huì)提供完整的硬件參考設(shè)計(jì),都是標(biāo)準(zhǔn)化電路及接口,學(xué)習(xí)者只要突破一種就可舉一反三到多種ARM處理器,就可以幫助學(xué)習(xí)者在學(xué)習(xí)軟件時(shí)消除硬件上的模糊。如果計(jì)算機(jī)專業(yè)的朋友確實(shí)沒(méi)有一點(diǎn)的硬件基礎(chǔ),可以找本模擬、數(shù)字的基礎(chǔ)書(shū)查閱,也可參考一些嵌入式硬件設(shè)計(jì)的書(shū)籍和直接查看芯片的數(shù)據(jù)手冊(cè)。
三.在源碼和實(shí)驗(yàn)中求答案,培養(yǎng)獨(dú)立解決問(wèn)題的思維能力
什么最能體現(xiàn)一個(gè)工程師的經(jīng)驗(yàn)水平?什么樣的能力最能體現(xiàn)一個(gè)工程師在團(tuán)隊(duì)中的價(jià)值?阿南認(rèn)為是解決問(wèn)題的能力,只有解決別人都不能解決的問(wèn)題才能真正體現(xiàn)您在團(tuán)隊(duì)中的價(jià)值和不可或缺的重要性。如果說(shuō)編程的速度,您可能會(huì)比一個(gè)人快,但你絕對(duì)不會(huì)比兩個(gè)人甚至整個(gè)團(tuán)隊(duì)加起來(lái)還要快,但您完全可以解決其它人甚至一個(gè)團(tuán)隊(duì)都無(wú)法解決的問(wèn)題。而解決問(wèn)題的能力如何去培養(yǎng)呢?它需要在初學(xué)時(shí)就養(yǎng)成一種獨(dú)立思考解決問(wèn)題的習(xí)慣,需要在實(shí)踐中不斷的摸索、總結(jié)經(jīng)驗(yàn)和思維方式,也是一個(gè)工程師內(nèi)功的表現(xiàn)。而目前很多學(xué)習(xí)者在遇到問(wèn)題時(shí)就不知所措,急于請(qǐng)教別人,甚至在BBS發(fā)出“跪求”,把“男兒膝下有黃金”忘的一干二凈,這種習(xí)慣是不可取的,也培養(yǎng)不出解決問(wèn)題的能力,更達(dá)不到有效掌握一種技術(shù)的真締。在ARM應(yīng)用中通常分硬件和軟件問(wèn)題,硬件通常由電源、處理器配置以及接口等問(wèn)題,檢查的順序應(yīng)該是電源、ARM內(nèi)核再到外圍接口,ARM硬件仿真器在硬件調(diào)試中將發(fā)揮重要的作用,有時(shí)也需要示波器等常用工具,甚至需要借用測(cè)試代碼。軟件的問(wèn)題更多的是需要分析源代碼,有時(shí)也必須通過(guò)仿真調(diào)試。
四.以單片機(jī)的思維,重點(diǎn)突出ARM的不同之處
大部分的ARM學(xué)習(xí)者都有一定程度的單片機(jī)基礎(chǔ),此時(shí)完全可以將ARM看作是超級(jí)單片機(jī),以單片機(jī)的思維方式去理解,重點(diǎn)突出ARM系統(tǒng)的不同且關(guān)鍵之處,加以學(xué)習(xí)。在硬件上,ARM通常運(yùn)行更高的主頻,通過(guò)總線擴(kuò)展大容易的Flash和SDRAM(甚至DDR),具有更多的管腳及采用高密度的BGA封裝,以及超強(qiáng)的外設(shè)等,因此ARM系統(tǒng)往往需要更多層的PCB,且對(duì)器件的布局,信號(hào)走線等都有一定的要求。所以在ARM的硬件設(shè)計(jì)中要特別注意處理器的一些關(guān)鍵信號(hào)引腳的處理,一定要仔細(xì)閱讀處理器用戶手冊(cè)上對(duì)各信號(hào)管腳的描述,有些引腳在不用時(shí)必須接固定的高或低電平,DDR的信號(hào)線需要等長(zhǎng)處理等,否則系統(tǒng)將不能正常運(yùn)行。由于目前單片機(jī)基本上是將Flash和RAM內(nèi)置,所以朋友們可能都沒(méi)有像最早的8031那樣擴(kuò)展過(guò)外部存儲(chǔ)器(可以重新復(fù)習(xí)一下單片機(jī)的基礎(chǔ)),此時(shí)應(yīng)該重點(diǎn)理解ARM的總線擴(kuò)展方式,理解它是如何外擴(kuò)Flash、SDRAM(或DDR)及其它的總線設(shè)備等,它們的存儲(chǔ)空間又是如何分配等,此時(shí)參考數(shù)據(jù)手冊(cè)的內(nèi)存映射圖和一些SDRAM、Flash等的基本原理、尋址方式等都大有幫助。在軟件,ARM如果不跑操作系統(tǒng),那么它和單片機(jī)也是非常類似的,此時(shí)朋友們只需熟悉ARM的開(kāi)發(fā)環(huán)境、工具的使用。然后將重點(diǎn)放在ARM處理器的啟動(dòng)過(guò)程和中斷處理過(guò)程上,阿南認(rèn)為如果沒(méi)能理解這兩個(gè)過(guò)程,那么就不算掌握ARM!。∮捎诠俜交虻谌蕉紩(huì)提供測(cè)試程序,所以我們也不需要親自去實(shí)現(xiàn),但必須把它分析透徹,因?yàn)樗匾,直接關(guān)系著整個(gè)系統(tǒng)能否正常運(yùn)行。ARM處理器通常都會(huì)外擴(kuò)大容量的NAND Flash,支持NAND Flash的直接引導(dǎo)啟動(dòng),而這是單片機(jī)所沒(méi)有的,因此朋友們也需要重點(diǎn)理解NAND Flash的應(yīng)用。在使用單片機(jī)時(shí),我們習(xí)慣從無(wú)到有開(kāi)始寫(xiě)程序,而在使用ARM時(shí)我們要懂得利用資源,直接在官方提供的DEMO中提取代碼。
五.PC機(jī)的Linux技術(shù)同樣適用于ARM Linux
阿南發(fā)現(xiàn)很多朋友存在一個(gè)誤區(qū):學(xué)習(xí)嵌入式Linux必須在開(kāi)發(fā)板上才能進(jìn)行,而不能好好利用PC機(jī)的強(qiáng)大資源或者忽略了Linux的基礎(chǔ)。其實(shí)PC機(jī)的Linux編程同樣適用于ARM Linux,當(dāng)您有了PC機(jī)的Linux基礎(chǔ)后,只需重點(diǎn)學(xué)習(xí)ARM Linux的開(kāi)發(fā)方式、工具使用,及嵌入式硬件資源的局限性所帶來(lái)一些需要注意的地方。阿南覺(jué)得ARM Linux基本上就等于ARM的前后臺(tái)應(yīng)用和通用的Linux技術(shù)的結(jié)合。因此完整的ARM和Linux技術(shù)的學(xué)習(xí)順序應(yīng)該為ARM的硬件,ARM前后臺(tái)應(yīng)用,PC機(jī)Linux的命令操作,PC機(jī)Linux應(yīng)用編程,PC機(jī)Linux的驅(qū)動(dòng)技術(shù),PC機(jī)的GUI和網(wǎng)絡(luò)編程,再到基于ARM Linux特有的開(kāi)發(fā)技術(shù)。當(dāng)然朋友們也可以有選擇的進(jìn)行學(xué)習(xí),比如不需要GUI或不需要網(wǎng)絡(luò)編程,不想從事ARM硬件等。
六.不實(shí)踐永遠(yuǎn)掌握不了ARM,工具決定效率
嵌入式是一門(mén)實(shí)踐性很強(qiáng)的技術(shù),如果只想看書(shū),而不去實(shí)踐,那么阿南建議請(qǐng)不要浪費(fèi)時(shí)間。多看書(shū)也無(wú)用(現(xiàn)在書(shū)店的嵌入式書(shū)籍太多),要有選擇性、針對(duì)性的看?磿(shū)的目的可以概括為理論基礎(chǔ)、應(yīng)用指導(dǎo)和給解決問(wèn)題提供思路3種。理論基礎(chǔ)需要系統(tǒng)的學(xué)習(xí),建議選擇一些國(guó)外的經(jīng)典教材(如《UNIX環(huán)境高級(jí)編程》或《GNU/Linux編程指南》等),但對(duì)將來(lái)的應(yīng)用不相關(guān)的也可以略去或泛讀;A(chǔ)的學(xué)習(xí)也離不開(kāi)實(shí)踐,需要實(shí)踐操作來(lái)進(jìn)一步的驗(yàn)證理解。應(yīng)用指導(dǎo)一般都是在實(shí)踐應(yīng)用到時(shí)再去學(xué)習(xí),邊看邊實(shí)踐,如處理器的某個(gè)外設(shè)使用,需要查看處理器的用戶指南或規(guī)格書(shū)的相關(guān)部分。如ARM Linux開(kāi)發(fā)環(huán)境、工具的使用,可以參考具體的資料,也可以作一些筆記給以后應(yīng)用時(shí)直接參考。當(dāng)出現(xiàn)無(wú)法解決的難題而沒(méi)有頭緒時(shí),此時(shí)可能需要上網(wǎng)收索相關(guān)的資料,或大量的查找相關(guān)的技術(shù)書(shū)籍,當(dāng)有思路后就要通過(guò)實(shí)踐測(cè)試、實(shí)驗(yàn)去驗(yàn)證解決問(wèn)題?傊碚撌菫閷(shí)踐服務(wù)的,脫離了實(shí)踐,脫離了實(shí)際應(yīng)用,看書(shū)就等于浪費(fèi)時(shí)間。!開(kāi)發(fā)工具在實(shí)踐中起著重要作用,不僅決定開(kāi)發(fā)效率,也提高學(xué)習(xí)的效率。因此學(xué)習(xí)者需要一個(gè)開(kāi)發(fā)學(xué)習(xí)板(或?qū)嵺`產(chǎn)品及目標(biāo)板),朋友們?nèi)绻Y金允許,也請(qǐng)盡量配置一個(gè)硬件仿真器,它不僅給仿真調(diào)試帶來(lái)了便利,而有些問(wèn)題就必須要通過(guò)仿真器查看CPU內(nèi)部寄存器等狀態(tài)來(lái)查找解決。
阿南
2008-11-24 |
|