嵌入式專業是一門實踐性很是強的學科,只有多動手,多實踐,多編程,多調試,多看書,多思考才能真正掌握好嵌入式開發技術。那麼,如何從零開始學習嵌入式開發技術, 進入嵌入式開發大門呢,筆者根據本身的嵌入式學習經歷和多年的嵌入式linux教學經驗,談談本身對嵌入式學習的一些想法和意見,但願對你們有所幫助。linux
嵌入式系統專業是綜合了計算機硬件技術,計算機軟件技術以及電子電路技術的一門綜合學科,所涉及的內涵和知識很是普遍,包括:數字電路,模擬電路,計算機組成原理,單片機基礎,C語言基礎,操做系統,數據結構,編譯原理,計算機控制,計算機網絡等知識。
對於C語言,至少能單獨編寫調試一個3 ~ 500行的程序,可以瞭解C語言的基本語法規則,基本語句的使用,理解指針概念並能靈活使用各類指針。
計算機組成原理要能理解組成一個計算機系統的幾大部件,計算機系統的結構,理解系統總線,理解處理器和計算機外部設備的關係,處理器和計算機外設是如何協調工做完成某一項功能的,計算機軟件和硬件是如何分工協做完成某一項任務的,理解軟件是經過寄存器來控制硬件的。
數字電路,模擬電路要了解其基本原理個概念,能看懂簡單模擬、數字電路原理圖。理解數字電路中的寄存器,時序的概念,能看懂芯片手冊和時序圖。對於其餘基礎課程,重點要理解其中的一些基本概念,如何使用等等。
對 於電子,自動化,通訊,計算機類專業的學生,在大2、大三開設的專業基礎或專業課程中基本包含了以上的大部分課程。由於缺少實踐,可能學得不是很深刻,但 是一些基本的概念和基本知識應該仍是有所瞭解,針對一些薄弱環節,本身稍微增強學習一下,基本上已經具有了學習嵌入式開發的基礎。在嵌入式基本功學習階 段,最重要的是C語言和單片機基礎,最好是能用C語言開發一個小的單片機程序,例如用C語言實現單片機和PC的串口通訊,用C語言控制LED等顯示,用C 語言控制數碼管顯示等小程序。在這個期間須要的學習工具就是單片機51學習開發板。數據庫
嵌 入式開發基礎知識學習完後,這時候你已經有了必定的嵌入式開發基礎了,能夠進行基於單片機的嵌入式系統設計了。單片機編程自己也是屬於嵌入式編程,可是在 這裏咱們只是把單片機開發看成嵌入式系統開發的基礎,不把單片機開發做爲真正的嵌入式系統開發,在這裏咱們的嵌入式系統開發是指在帶有操做系統的嵌入式平 臺上的應用和驅動開發,特別指在嵌入式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學習方法。編程
誤區1、全身投入學習桌面或服務器版本linux系統。ubuntu
很 多想學嵌入式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天時間學習基本就能夠掌握 了。小程序
誤區2、直接閱讀linux內核源代碼服務器
不少想學linux,在連linux是什麼東西,一點都還不會使用的狀況下去就閱讀linux內核源代碼,花了大量時間去閱讀《linux源碼深度分 析》、《linux情景分析等》等書。這樣的結果極可能就是看的頭昏眼花,不知所云,最後只能放棄了。這也是同窗們學習嵌入式linux的一個誤區,在有 必定嵌入式linux開發基礎後,帶着必定的目的去閱讀linux源代碼,這樣能夠極大的提升你的技術能力,可是你在沒有任何基礎,對linux一點都不 瞭解的狀況下就去閱讀linux內核源代碼,無異於以卵擊石,最後只能是撞個頭破血流。
以上分析了同窗們學習嵌入式linux 開發的2個誤區,那麼如何正確的嵌入式linux開發呢?網絡
學習嵌入式linux也同樣。在學習嵌入式linux開發比較適合的切入點是從嵌入式linux應用程序開發開始,即暫時先不去關心嵌入式硬件平臺,不去關心linux的底層驅動,先把 精力集中在現有的嵌入式linux平臺上進行嵌入式linux應用程序設計開發。學習嵌入式linux開發毫不是看看書就能夠學好的,須要多實踐,編程調 試;由於嵌入式開發不一樣於普通的基於PC機或服務器的應用程序開發,嵌入式開發的應用程序是要燒寫到嵌入式板卡或開發板上運行的,因此首先你要給本身購買 一塊開發板,如今廣泛流行的嵌入式開發板都是基於三星的ARM9 CPU S3C2440,性價比極高,在這裏我推薦使用飛凌公司FL-2440 高性價比ARM9學習開發板,開發板資源豐富,穩定,同時配有大量的實驗源碼,視頻教程和實驗指導書。
有了開發板後 前後開始學習嵌入式linux開發環境搭建、嵌入式linux開發模型、linux內核移植和文件系統、嵌入式linux應用程序移植、嵌入式linux 多進程,多線程應用程序設計、嵌入式linux網絡編程,若是對嵌入式數據庫或圖形軟件開發有興趣的,能夠進一步學習嵌入式linux數據庫開發或基於 QT的嵌入式linux圖形應用軟件設計。每學一章節都要經過相關實驗來來驗證你從書上學到的東西,同時提升本身編寫代碼,調試程序的能力。這個過程根據 不一樣學員的基礎不一樣,大概要花上1 ~ 2個月時間。學完這些課程後,你就有了在現有的嵌入式linux平臺上進行應用程序設計開發的能力,到一些嵌入式軟件公司去,可以勝任在現有的嵌入式 linux平臺上進行上層的應用程序開發工做。可是目前你還不能進行嵌入式linux系統和驅動的開發,也就是說,你如今只能在一個已經構建好的嵌入式 linux平臺上進行應用程序開發,而本身尚未能力根據實際須要去從新構建一個嵌入式linux平臺。要讓本身有能力根據實際須要從新構建一個嵌入式 linux軟硬件平臺,這時候就須要進行下一階段的學習了,即嵌入式linux系統和驅動開發。數據結構
3、嵌入式Linux系統和驅動開發多線程
有 了嵌入式linux平臺上開發應用程序的基礎,你已經對linux的功能、linux對應用程序提供的接口和系統調用有了必定的瞭解,知道如何利用 linux提供的功能來進行應用程序開發,知道如何來使用設備驅動來進行應用程序設計,有了這些知識後,你就能夠更深刻的去學習Linux系統原理和基於 Linux驅動的開發,Linux內核的裁剪,文件系統構,bootloader等等底層的知識了。
想要更深刻學習嵌入式Linux系統和驅動開發,要學的內容很是多包括計算機軟件、硬件、操做系統知識。這時候你能夠參照如下的學習思路,包括:ARM體系架構、S3C2440微處理器接口設計、時鐘系統、LCD屏接口、存儲控制器及系統的存儲空間分配、NAND FLASH接口和NOR FLASH接口等。 學完這些知識點並經過相關實驗驗證後,嵌入式Linux系統和驅動的開發就算掌握了差很少了,可以勝任絕大部分基於linux平臺的驅動開發工做了。學完 這些知識點,根據學員的不一樣狀況,通常須要花三個月到半年時間。經過這一階段的學習,你在嵌入式Linux開發領域已經算是有了必定的功底,已經再也不被人 稱爲菜鳥了,已經進入嵌入式linux開發高手行列了。架構
4、更上一層樓
深刻理解了嵌入式內核和驅動開發,這時候寫個什麼驅動對你已經沒有什麼問題了,開發過程當中一些基本問題都難不倒你了。這是你可能想優化一下系統的性能,比 如實時性,提升系統的啓動速度,或者優化系統的內存管理機制,要達到修改內核核心機制的境界,你就須要去深刻去研讀linux內核源碼了,參考 《linux源碼深度分析》、《linux情景分析等》等linux源碼分析的書籍,深刻理解linux各部分的實現機制和原理,以及可能存在的問題。你 只有在深刻理解現有代碼和實現機制的基礎上,才能提出更好的改進方案。若是你能達到這個境界,那你已是高手中的高手,能夠笑傲羣雄了。以 上是筆者結合本身的嵌入式學習經歷和嵌入式培訓經驗總結的一些嵌入式學習方法和步驟,這只是筆者對嵌入式學習的一些見解,但願對那些有興趣學習嵌入式 linux又不知道從哪開始學的同窗們有所幫助。固然,每一個人,每一個同窗的基礎,各方面的狀況都不同,每一個人都有本身適合的學習方式,本文章總結的一些 學習方法和思路僅供參考,但願你們能找到適合本身的學習嵌入式開發的方式,早日進入嵌入式開發大門。萬丈高樓平地起,心動不如行動,有志從事嵌入式開發的同窗不要再猶豫了,趕忙拿出實際行動,好好學習,爲實現本身的偉大夢想而努力奮鬥吧