俗話說萬事開頭難,剛開始的時候,你是否根本就不知如何開始,上網查資料被一堆堆新名詞搞的找不到北,去圖書館看書也是找不到方向?又是arm,又是linux,又是uboot頭都大了,不知道本身究竟從哪裏開始?linux
下面就跟着我學習設計嵌入式工程師的修煉日記吧!shell
簡單說,從arm基礎知識到裸機編程,從uCOSII到linux,從linux基礎的命令到shell編程,從u-boot到文件系統,最後到如今的linux驅動程序。從簡單到複雜,從基礎到高級基本是按照這個來的。編程
第一階段:嵌入式硬件基礎以及裸機程序開發網絡
1.知識點:多線程
(1) arm處理器基礎知識,工做模式,寄存器,中斷與異常,尋址方式,彙編指令集架構
(2) 熟悉ADS集成開發環境爲裸機程序開發作準備併發
(3) 裸機程序開發:LED,串口,LCD,觸摸屏,NANDFLASH,IIC,IIS,DMA等函數
2.過程以及目的:學習
這一階段的學習主要是熟悉嵌入式的硬件,爲之後的linux驅動打基礎。由於嵌入式主打處理器架構就是arm,因此針對arm來學習。首先學習基礎知識,而後經過在開發板上的練習來掌握。這一階段所用的資料主要有:ui
(1) 《ARM嵌入式基礎教程》 這本書主要看arm基礎的知識。這本書是講arm7的,可是arm的基礎的指令集以及模型是同樣的。
(2) 《嵌入式linux應用開發徹底手冊》 這本書主要看介紹s3c2410接口模塊的部分,實驗裸機的時候須要硬件的知識。
3.所用時間:大約兩個月。
第二階段:linux基礎以及shell編程
1.知識點:
(1) linux基礎知識
(2) linux安裝與使用
(3) linux經常使用命令
(4) vi使用
(5) 簡單shell編程
2.過程以及目的:
這一階段的學習主要是熟悉linux,會安裝linux,瞭解Linux的基礎知識,會簡單的操做。剛開始安裝linux仍是在虛擬機上安裝比較好,安裝開發板推薦的Fedora9,按照開發板配套的說明一步一步的安裝,而後在上面練習各類命令。
這一階段主要要看《鳥哥的linux私房菜基礎學習篇》,這個書有電子版,也不用全看,主要是看前面對Linux基礎知識的描述,以及基本的命令。命令只是瞭解,那麼多記也記不下來,之後用時再查閱。這一階段主要目的是對linux有一個總體的瞭解,最起碼要知道基礎的一些概念,還有會一些基本的操做。
3.時間:大約一個月。
第三階段:linux應用程序基礎開發
1.知識點:
(1) GCC,GDB,Make 基礎
(2) 文件,時間編程
(3) 多進程,多線程程序設計
(4) 進程間通訊
2. 過程以及目的:
這一階段的學習主要是瞭解linux應用程序的編寫調試,也都是基礎知識,主要目的仍是熟悉Linux。熟悉其中應用程序有關的一些概念,爲之後打基礎。這一階段主要看了《嵌入式Linux應用程序開發標準教程》,這本書對linux上應用程序編寫講的很詳細,並且不是很難,那本最經典的《UNIX高級環境編程》講的比較深刻,剛開始看有點難,萬事開頭難仍是從簡單的開始。學習應用編程之後也不必定搞應用,從事嵌入式linux行業的人,這是必須的基本技能。
3. 時間:大約一個月
第四階段:uCOSII操做系統學習
1.知識點:
(1)嵌入式實時操做系統的概念以及基礎知識
(2)uCOSII操做系統源代碼閱讀
(3)移植uCOSII
(4)uCOSII操做系統應用編程
2.過程以及目的:
這一階段的學習主要是瞭解嵌入式實時操做系統的基礎,由於uCOSII是開源的,能夠研究他的代碼。對操做系統的任務調度以及資源管理有直觀的認識。而且閱讀他的源碼可以提升本身的編程能力,規範本身的編程習慣。雖然提供了uCOSII的移植版本,可是本身實際移植一次可以有更深入的認識。
這個操做系統比較簡單,因此應用程序的編寫就很重要,在上面實現幾個功能仍是有助於對系統的理解。這一階段主要看的就是邵貝貝翻譯的uCOSII做者所著的《嵌入式實時操做系統uCOS-II》,裏面對操做系統的源碼有詳細的分析。看透這本書後就會對uCOSII有一個深刻的瞭解。這一階段的主要目的是瞭解操做系統的知識,好比任務調度,併發與競態。還有一個目的就是鍛鍊本身的編程能力。由於若是看介紹操做系統原理的書會比較枯燥,我感受閱讀一個操做系統的源碼比看一千本介紹原理的書來的實惠的多。
3.時間:大約一個月
第五階段:bootloader學習
1.知識點:
(1)bootloader基礎知識
(2)u-boot基礎與命令
(3)u-boot移植
2.過程以及目的:
bootloader是一個linux嵌入式系統的不可缺乏的部分。這一階段的學習主要是瞭解bootloader的做用,以及通用bootloader---u-boot的知識,剛開始學會用u-boot的各類命令。而後分析u-boot的啓動流程和Makefile以及u-boot加載內核過程。而後按照別人的步驟一步一步的移植內核,多作幾遍以熟悉這個過程。而後在熟悉整個u-boot的基礎上,獨自完成u-boot的移植,並添加本身修改。這一階段主要參考資料就是光盤自帶的u-boot移植參考手冊和一些網絡上的文章。我的感受u-boot移植這方面的網絡資源至關的豐富。
3.時間:大約一個月
第六階段:文件系統學習
1.知識點:
(1)linux文件系統的種類與做用
(2)熟悉busybox的使用,以及linux系統啓動過程
(3)構建本身的根文件系統
2.過程以及目的:
文件系統也是一個linux嵌入式系統不可缺乏的部分,這一階段的學習主要是熟悉根文件系統的做用以及基礎知識,而且本身構建本身的根文件系統。這一階段所看的書有《構建嵌入式linux系統》,這本書詳細講解了嵌入式linux的全部元素,包括文件系統。這裏主要看文件系統這塊。我還參考了網上的一些文章。這裏首先要熟悉基本的一些Linux文件系統,而後學習busybox的使用以及linux的啓動過程,最後參考別人的一步一步來構建本身的文件系統。
3.時間:大約半個月
第七階段:嵌入式圖形界面GUI
1.知識點:
(1)嵌入式圖形界面GUI的種類與特色
(2)minigui 基礎知識
(3)minigui 移植與程序編寫
2.過程以及目的:
嵌入式圖形界面GUI做爲嵌入式上層系統的東西也是須要了解的,這裏我只學習了minigui,由於QT是須要C++的知識,而我沒有學過C++,因此只看了minigui的相關知識。這個階段的目的主要是熟悉一下嵌入式圖形接界面的開發流程,由於之後也不打算搞應用。
只是熟悉一下嵌入式組成的一些方面。這裏只要將minigui移植到板子上能跑hello程序就能夠了。其餘的也不用深刻了解。經過移植minigui對linux上運行的軟件以及函數庫,程序運行原理,編譯器都會有一個新的認識。
3 時間:大約半個月
第八階段:linux驅動程序基礎知識
1.知識點:
(1)看完《LINUX設備驅動程序》除了網絡驅動程序,tty驅動程序,塊驅動程序這幾章不看,其餘的都要看完。
(2)實驗書中全部例程,要仔細分析結果,理解相關知識點。
(3)就算是例子,程序編程習慣必定要統一,文檔必定要規範。
2.過程以及目的
這一階段的目的就是爲了linux驅動打基礎,《LINUX設備驅動程序》(第三版)也就是你們所說的ldd3,是最經典的一本講linux驅動的書,必定要看並且多看幾遍。第一次看很難看進去,感受講的晦澀難懂。可是多看幾遍就會由豁然開朗的感受。看完了書,而後就是實驗書中的例子。
3.時間:大約兩個月
第九階段:linux驅動實戰
1. 知識點:
(1)經過led驅動理解雜項字符設備的註冊與實現,並掌握MINI2440的IO操做過程。
(2)經過button驅動程序掌握基本的中斷實現方法。
(3)掌握PWM驅動程序。
(4)經過觸摸屏驅動程序掌握input設備模型的實現。
(5)掌握ADC驅動程序的設計
(6)掌握看門狗,rtc驅動程序的設計
(7)經過LCD驅動程序分析platform設備模型的實現。
2.過程以及目的:
這一階段的學習主要是掌握實際的簡單的驅動程序的實現與ldd3中的差異,而且分析一些linux子系統。經過這一階段的學習,可以對linux驅動程序有更深刻的認識。而且鍛鍊本身閱讀海量代碼的能力。這一階段主要工做就是看代碼,實驗,看代碼,實驗,經過現象學習知識。
3. 時間:大約一個月
第十階段:深刻理解linux內核與USB子系統的研究
前九個階段完成了,本身感受嵌入式Linux應該應該算是入門了。因此要開始計劃第十個階段了。這一階段基本上要肯定本身將來的發展方向了。由於如今嵌入式系統的標準接口都有USB,因此學會USB的相關知識是頗有競爭力的。搞驅動的人對內核應該有必定的瞭解,因此《深刻理解Linux內核》仍是必須的。
這一階段主要是學習USB協議,閱讀linux USB子系統所有的代碼,經過閱讀代碼加深對USB的理解,隨後就是熟悉各類USB類協議,編寫和移植USB驅動了。USB是我肯定的方向,由於我想搞什麼東西都要專注,什麼都搞,什麼也搞很差。因此我決定學習USB。決定之後從事嵌入式有關USB方面的工做。這一階段的學習正在進行中,如今正在linux USB子系統浩瀚的代碼中漫遊。