1. 程式人生 > >Linux嵌入式學習過程(轉載)

Linux嵌入式學習過程(轉載)

嵌入式時代已經來臨,你還在等什麼?

 ---循序漸進學習嵌入式開發技術
最近經常有用人單位給 我打來電話,問我這有沒有嵌入式Linux方面的開發人員,他們說他們單位急需要懂得在嵌入式linux環境下的軟體開發人員,我回答說,現在每年畢業的 大學生那麼多,還招不到合適的軟體開發人員嗎?他跟我說,畢業大學生雖然多,但大部分都能力不夠,不能達到他們的工作的要求。該公司HR的一句話說出來我 們現在的大學教學和大學生就業的現狀:一方面每年那麼多大學生畢業找不到合適的工作,另一方面很多用人單位和企業又找不到合適的人才。造成這種現象最基本 的原因是學校教育和社會需求的嚴重脫節。其他的專業和行業我不清楚,但是對於嵌入式專業和嵌入式軟體行業來說,通過與多所高校的老師和在校高年級本科生, 研究生交流,我還是有所瞭解的,高校的嵌入式專業的教學現狀我在前一篇文章裡仔細分析過,造成很多嵌入式專業的學生在畢業後,還是很難達到用人單位的要求 最主要的原因在於高校在嵌入式教學方面重理論和輕實踐,很多嵌入式專業的老師也沒有實際的工作經驗,這樣培養出的學生可能讓他講起來頭頭是道,但是讓他去 真正編寫,除錯一個應用程式就傻眼了,不知道從何下手,因為他們在學校的學習可能從來就沒有老師帶著他們實際除錯過嵌入式程式,也沒有機會讓你去除錯嵌入 式應用程式,那些看起來非常不錯的嵌入式實驗箱大部分時間都躺在實驗室睡大覺,只有在上實驗課的時候搬出來讓大家看2眼,摸2下,還沒有弄明白怎麼回事, 又要收到實驗室睡大覺去了。這樣的教學模式,如何能培養出一名合格的嵌入式工程師呢?出現企業找不到合適的人,大學畢業生找不到合適的工作也就不奇怪了。
嵌入式專業是一門實踐性非常強的學科,只有多動手,多實踐,多程式設計,多除錯,多看書,多思考才能真正掌握好嵌入式開發技術。
現 在很多同學也意識到了學校培養模式和社會需求脫節問題,有一部分同學也先行行動起來,開始注重培養自己的實際動手能力,培養自己實際分析問題,解決問題的 問題,培養自己在嵌入式專業實際程式設計,和除錯程式的能力。但是嵌入式專業不同於其他學科,嵌入式專業是一門綜合性非常強,涉及知識面非常廣的學科,對於初 學者來說,面對那麼多教程,課本,那麼多知識點,往往不知道從何處下手,不知道哪些是重點,哪些不是重點,這些知識點之間有什麼關聯,一臉的茫然,然後東 一榔頭,西一棒子,折騰了幾個月甚至大半年後,還是找不著學習嵌入式的方向,還徘徊在嵌入式開發的大門之外。
那麼,如何從零開始學習嵌入式開發技術, 進入嵌入式開發大門呢,筆者根據自己的嵌入式學習經歷和多年的嵌入式linux教學經驗,談談自己對嵌入式學習的一些想法和意見,希望對大家有所幫助。

一、練好基本功
嵌入式系統專業是綜合了計算機硬體技術,計算機軟體技術以及電子電路技術的一門綜合學科,所涉及的內涵和知識非常廣泛,包括:數位電路,類比電路,計算機組成原理,微控制器基礎,C語言基礎,作業系統,資料結構,編譯原理,計算機控制,計算機網路等知識。
在真正學習嵌入式開發之前,u
。對於C語言,至少能單獨編寫除錯一個3 ~ 500行的程式,能夠了解C語言的基本語法規則,基本語句的使用,理解指標概念並能靈活使用各種指標。
計算機組成原理要能理解組成一個計算機系統的幾大部件,計算機系統的結構,理解系統匯流排,理解處理器和計算機外部裝置的關係,處理器和計算機外設是如何協調工作完成某一項功能的,計算機軟體和硬體是如何分工協作完成某一項任務的,理解軟體是通過暫存器來控制硬體的。
數位電路,類比電路要了解其基本原理個概念,能看懂簡單模擬、數位電路原理圖。理解數位電路中的暫存器,時序的概念,能看懂晶片手冊和時序圖。對於其他基礎課程,重點要理解其中的一些基本概念,如何使用等等。
對 於電子,自動化,通訊,計算機類專業的學生,在大二、大三開設的專業基礎或專業課程中基本包含了以上的大部分課程。因為缺乏實踐,可能學得不是很深入,但 是一些基本的概念和基本知識應該還是有所瞭解,針對一些薄弱環節,自己稍微加強學習一下,基本上已經具備了學習嵌入式開發的基礎。在嵌入式基本功學習階 段,最重要的是C語言和微控制器基礎,最好是能用C語言開發一個小的微控制器程式,例如用C語言實現微控制器和PC的串列埠通訊,用C語言控制LED等顯示,用C 語言控制數碼管顯示等小程式。在這個期間需要的學習工具就是微控制器51學習開發板。推薦飛凌的OK-51學習開發板。詳情參考:

二、嵌入式Linux應用開發
嵌 入式開發基礎知識學習完後,這時候你已經有了一定的嵌入式開發基礎了,可以進行基於微控制器的嵌入式系統設計了。微控制器程式設計本身也是屬於嵌入式程式設計,但是在 這裡我們只是把微控制器開發當作嵌入式系統開發的基礎,不把微控制器開發作為真正的嵌入式系統開發,在這裡我們的嵌入式系統開發是指在帶有作業系統的嵌入式平 臺上的應用和驅動開發,特別指在嵌入式linux平臺上的開發。
微控制器開發在很早以前是非常熱門的,現在在一些比較簡單的系統上微控制器也用的非常 廣泛,隨著硬體的成本不斷降低,在一些比較複雜的嵌入式裝置一般都採用嵌入式linux作業系統,在嵌入式linux平臺上進行開發,這樣可以極大的提高 嵌入式開發效率,提高系統的穩定性和可靠性,降低開發成本。由於linux是一個開源的作業系統,你可以通過閱讀linux核心來理解核心的實現機制,如 果有需要,你甚至可以通過修改核心原始碼來提高系統的效能;同時,全球參與linux開發的隊伍非常龐大,網上有大量的嵌入式linux開發資料和原始碼, 很多你需要實現的功能在網上基本都能找到相關原始碼,參考一下別人寫的原始碼,這樣可以極大的提高自己的工作效率和技術能力,近幾年,隨著參與linux開發 的人越來越多,linux系統的穩定性、實時性有了很大的提高,linux系統無論在伺服器上還是嵌入式裝置平臺上都應用越來越廣泛,現在包括華為、中 興、朗訊的各大通訊巨頭都開始把自己裝置的底層平臺從vxworks作業系統遷移到linux系統,可以說嵌入式linux是嵌入式技術發展一個方向,是 嵌入式技術的一面旗幟。基於以上原因,我的建議是學嵌入式開發,就學嵌入式linux開發,相對於wince等其他的嵌入式平臺,你可以真正學到更多的東 西,學到嵌入式技術的精髓,同時他又符合嵌入式產業發展的方向,不容易被日新月異的技術發展所淘汰。
有了嵌入式開發的基礎,又知道了我們為什麼要學習嵌入式linux開發,那我們就要開始動手開始學習了,那如何開始學習嵌入式linux開發,從哪裡開始著手呢?
很 多同學這時候就開始買linux書籍,從圖書館借了一大堆關於linux的書:什麼《linux使用基礎教程》、《linux原始碼深度分析》、 《linux情景分析等》、 《linux高階使用指南》等等。結果抱著這些圖書看了10天半個月還是不知所云,當初學習的激情慢慢就消退了,最後不了了之,終究沒有進入嵌入式開發大 門。究其原因,是因為沒有找到合適學習嵌入式開發的方法,做任何事情都有方法可循,找對了學習方法往往就能事半功倍;否則就可能是事倍功半,甚至勞而無 功。接下來我先分析一下同學們的幾種常見的嵌入式linux學習誤區,然後提出一種比較合適的嵌入式linux學習方法。



誤區一、全身投入學習桌面或伺服器版本linux系統
很 多想學嵌入式linux 的同學經常問我,我不會linux系統,怎麼學習嵌入式linux開發,於是他們就花費了大量的精力和時間去研究學習桌面版本linux系統的使用,什麼 redhat 、federo,、ubuntu等等都用過,如何配置linux,linux的各種使用命令都背的滾瓜爛熟,linux各種伺服器的配置,還原備份各種操 作非常熟悉,以為這樣就學會了嵌入式linux開發。其實這是一個學習嵌入式Linux開發的誤區。
Linux桌面環境只是嵌入式linux的一 個開發工具,開發環境而已。我們的目標不是學習linux伺服器的配置和使用,linux伺服器的高階配置和使用那是另外一個領域,不屬於嵌入式 linux討論的範疇。我們進行嵌入式linux開發,只是把linux桌面環境當作一個工具,在linux桌面環境下執行嵌入式linux開發工具,例 如gcc 編譯器,make工具來開發我們的嵌入式linux應用程式而已,對於嵌入式開發工程師來說,沒有必要花費那麼多的精力和時間去研究linux桌面版和服 務器的應用,只要能瞭解最基本的操作即可。現在的桌面linux系統的圖形化介面做的也相當好,跟window具有相同的易用效能,例如ubuntu很多 操作都可以在圖形介面下完成,就沒有必要去記每個linux命令了。熟悉linux桌面系統的使用和基本操作命令,安排1~2天時間學習基本就可以掌握 了。

誤區二、直接閱讀linux核心原始碼
 很多想學linux,在連linux是什麼東西,一點都還不會使用的情況下去就閱讀linux核心原始碼,花了大量時間去閱讀《linux原始碼深度分 析》、《linux情景分析等》等書。這樣的結果很可能就是看的頭昏眼花,不知所云,最後只能放棄了。這也是同學們學習嵌入式linux的一個誤區,在有 一定嵌入式linux開發基礎後,帶著一定的目的去閱讀linux原始碼,這樣可以極大的提高你的技術能力,但是你在沒有任何基礎,對linux一點都不 瞭解的情況下就去閱讀linux核心原始碼,無異於以卵擊石,最後只能是撞個頭破血流。

以上分析了同學們學習嵌入式linux 開發的2個誤區,那麼如何正確的嵌入式linux開發呢?

u
,學習嵌入式linux也一樣。在u, 學習嵌入式linux開發比較適合的切入點是從嵌入式linux應用程式開發開始,即暫時先不去關心嵌入式硬體平臺,不去關心linux的底層驅動,先把 精力集中在現有的嵌入式linux平臺上進行嵌入式linux應用程式設計開發。學習嵌入式linux開發絕不是看看書就可以學好的,需要多實踐,程式設計調 試;因為嵌入式開發不同於普通的基於PC機或伺服器的應用程式開發,嵌入式開發的應用程式是要燒寫到嵌入式板卡或開發板上執行的,所以首先你要給自己購買 一塊開發板,現在普遍流行的嵌入式開發板都是基於u星的ARM9 CPU S3C2440,價效比極高,在這裡我推薦使用飛凌公司FL-2440 高性價比ARM9學習開發板,開發板資源豐富,穩定,同時配有大量的實驗原始碼,視訊教程和實驗指導書。
 有了開發板後 先後開始學習嵌入式linux開發環境搭建、嵌入式linux開發模型、linux核心移植和檔案系統、嵌入式linux應用程式移植、嵌入式linux 多程序,多執行緒應用程式設計、嵌入式linux網路程式設計,如果對嵌入式資料庫或圖形軟體開發有興趣的,可以進一步學習嵌入式linux資料庫開發或基於 QT的嵌入式linux圖形應用軟體設計。每學一章節都要通過相關實驗來來驗證你從書上學到的東西,同時提高自己編寫程式碼,除錯程式的能力。這個過程根據 不同學員的基礎不同,大概要花上1 ~ 2個月時間。學完這些課程後,你就有了在現有的嵌入式linux平臺上進行應用程式設計開發的能力,到一些嵌入式軟體公司去,能夠勝任在現有的嵌入式 linux平臺上進行上層的應用程式開發工作。但是目前你還不能進行嵌入式linux系統和驅動的開發,也就是說,你現在只能在一個已經構建好的嵌入式 linux平臺上進行應用程式開發,而自己還沒有能力根據實際需要去重新構建一個嵌入式linux平臺。要讓自己有能力根據實際需要重新構建一個嵌入式 linux軟硬體平臺,這時候就需要進行下一階段的學習了,即嵌入式linux系統和驅動開發。

三、嵌入式Linux系統和驅動開發


有 了嵌入式linux平臺上開發應用程式的基礎,你已經對linux的功能、linux對應用程式提供的介面和系統呼叫有了一定的瞭解,知道如何利用 linux提供的功能來進行應用程式開發,知道如何來使用裝置驅動來進行應用程式設計,有了這些知識後,你就可以更深入的去學習Linux系統原理和基於 Linux驅動的開發,Linux核心的裁剪,檔案系統構,bootloader等等底層的知識了。
想要更深入學習嵌入式Linux系統和驅動開發,要學的內容非常多包括計算機軟體、硬體、作業系統知識。這時候你可以參照以下的學習思路,u
包括:ARM體系架構、S3C2440微處理器介面設計、時鐘系統、LCD屏介面、儲存控制器及系統的儲存空間分配、NAND FLASH介面和NOR FLASH介面等。u。 學完這些知識點並通過相關實驗驗證後,嵌入式Linux系統和驅動的開發就算掌握了差不多了,能夠勝任絕大部分基於linux平臺的驅動開發工作了。學完 這些知識點,根據學員的不同情況,一般需要花三個月到半年時間。通過這一階段的學習,你在嵌入式Linux開發領域已經算是有了一定的功底,已經不再被人 稱為菜鳥了,已經進入嵌入式linux開發高手行列了。

四、更上一層樓
 深入理解了嵌入式核心和驅動開發,這時候寫個什麼驅動對你已經沒有什麼問題了,開發過程中一些基本問題都難不倒你了。這是你可能想優化一下系統的效能,比 如實時性,提高系統的啟動速度,或者優化系統的記憶體管理機制,要達到修改核心核心機制的境界,你就需要去深入去研讀linux核心原始碼了,參考 《linux原始碼深度分析》、《linux情景分析等》等linux原始碼分析的書籍,深入理解linux各部分的實現機制和原理,以及可能存在的問題。你 只有在深入理解現有程式碼和實現機制的基礎上,才能提出更好的改進方案。如果你能達到這個境界,那你已經是高手中的高手,可以笑傲群雄了。

以 上是筆者結合自己的嵌入式學習經歷和嵌入式培訓經驗總結的一些嵌入式學習方法和步驟,這只是筆者對嵌入式學習的一些看法,希望對那些有興趣學習嵌入式 linux又不知道從哪開始學的同學們有所幫助。當然,每個人,每個同學的基礎,各方面的情況都不一樣,每個人都有自己適合的學習方式,本文章總結的一些 學習方法和思路僅供參考,希望大家能找到適合自己的學習嵌入式開發的方式,早日進入嵌入式開發大門。
萬丈高樓平地起,心動不如行動,有志從事嵌入式開發的同學不要再猶豫了,趕緊拿出實際行動,好好學習,為實現自己的偉大夢想而努力奮鬥吧