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