嵌入式Linux學(xué)習方法 適合初學(xué)者設計學(xué)習計劃
俗話(huà)說(shuō)萬(wàn)事開(kāi)頭難,剛開(kāi)始的時(shí)候,你是否根本就不知如何開(kāi)始,上網(wǎng)查資料被一堆堆新名詞搞的找不到北,去圖書(shū)館看書(shū)也是找不到方向?又是arm,又是linux,又是uboot頭都大了。不知道自己究竟從哪里開(kāi)始?
本文引用地址:http://dyxdggzs.com/article/201706/361182.htm下面就跟著(zhù)我學(xué)習設計嵌入式工程師的修煉日記吧!
簡(jiǎn)單說(shuō),從arm基礎知識到裸機編程,從uCOSII到linux,從linux基礎的命令到shell編程,從u-boot到文件系統,最后到現在的linux驅動(dòng)程序。從簡(jiǎn)單到復雜,從基礎到高級基本是按照這個(gè)來(lái)的。
第一階段:嵌入式硬件基礎以及裸機程序開(kāi)發(fā)
1.知識點(diǎn):
(1) arm處理器基礎知識,工作模式,寄存器,中斷與異常,尋址方式,匯編指令集
(2) 熟悉ADS集成開(kāi)發(fā)環(huán)境為裸機程序開(kāi)發(fā)做準備
(3) 裸機程序開(kāi)發(fā):LED,串口,LCD,觸摸屏,NANDFLASH,IIC,IIS,DMA等
2.過(guò)程以及目的:
這一階段的學(xué)習主要是熟悉嵌入式的硬件,為以后的linux驅動(dòng)打基礎。因為嵌入式主打處理器架構就是arm,所以針對arm來(lái)學(xué)習。首先學(xué)習基礎知識,然后通過(guò)在開(kāi)發(fā)板上的練習來(lái)掌握。這一階段所用的資料主要有:
(1) 《ARM嵌入式基礎教程》 這本書(shū)主要看arm基礎的知識。這本書(shū)是講arm7的,但是arm的基礎的指令集以及模型是一樣的。
(2) 《嵌入式linux應用開(kāi)發(fā)完全手冊》 這本書(shū)主要看介紹s3c2410接口模塊的部分,實(shí)驗裸機的時(shí)候需要硬件的知識。
3.所用時(shí)間:大約兩個(gè)月。
第二階段:linux基礎以及shell編程
1.知識點(diǎn)
(1) linux基礎知識
(2) linux安裝與使用
(3) linux常用命令
(4) vi使用
(5) 簡(jiǎn)單shell編程
2.過(guò)程以及目的:
這一階段的學(xué)習主要是熟悉linux,會(huì )安裝linux,了解Linux的基礎知識,會(huì )簡(jiǎn)單的操作。剛開(kāi)始安裝linux還是在虛擬機上安裝比較好,安裝開(kāi)發(fā)板推薦的Fedora9,按照開(kāi)發(fā)板配套的說(shuō)明一步一步的安裝,然后在上面練習各種命令。這一階段主要要看《鳥(niǎo)哥的linux私房菜基礎學(xué)習篇》,這個(gè)書(shū)有電子版,也不用全看,主要是看前面對Linux基礎知識的描述,以及基本的命令。命令只是了解,那么多記也記不下來(lái),以后用時(shí)的再查閱。這一階段主要目的是對linux有一個(gè)整體的了解,最起碼要知道基礎的一些概念,還有會(huì )一些基本的操作。
3.時(shí)間:大約一個(gè)月
第三階段:linux應用程序基礎開(kāi)發(fā)
1.知識點(diǎn):
(1) GCC,GDB,Make 基礎
(2) 文件,時(shí)間編程
(3) 多進(jìn)程,多線(xiàn)程程序設計
(4) 進(jìn)程間通信
2. 過(guò)程以及目的:
這一階段的學(xué)習主要是了解linux應用程序的編寫(xiě)調試,也都是基礎知識,主要目的還是熟悉Linux。熟悉其中應用程序有關(guān)的一些概念,為以后打基礎。這一階段主要看了《嵌入式Linux應用程序開(kāi)發(fā)標準教程》,這本書(shū)對linux上應用程序編寫(xiě)講的很詳細,而且不是很難,那本最經(jīng)典的《UNIX高級環(huán)境編程》講的比較深入,剛開(kāi)始看有點(diǎn)難,萬(wàn)事開(kāi)頭難還是從簡(jiǎn)單的開(kāi)始。學(xué)習應用編程以后也不一定搞應用,從事嵌入式linux行業(yè)的人,這是必須的基本技能。
3. 時(shí)間:大約一個(gè)月
第四階段:uCOSII操作系統學(xué)習
1.知識點(diǎn):
(1)嵌入式實(shí)時(shí)操作系統的概念以及基礎知識
(2)uCOSII操作系統源代碼閱讀
(3)移植uCOSII
(4)uCOSII操作系統應用編程
2.過(guò)程以及目的:
這一階段的學(xué)習主要是了解嵌入式實(shí)時(shí)操作系統的基礎,因為uCOSII是開(kāi)源的,可以研究他的代碼。對操作系統的任務(wù)調度以及資源管理有直觀(guān)的認識。并且閱讀他的源碼能夠提高自己的編程能力與雖說(shuō)友規范自己的編程習慣。善之臂提供了uCOSII的移植版本。但是自己實(shí)際移植一次能夠有更深刻的認識。這個(gè)操作系統比較簡(jiǎn)單,所以應用程序的編寫(xiě)就很重要,在上面實(shí)現幾個(gè)功能還是有助于對系統的理解。這一階段主要看的就是紹貝貝翻譯的uCOSII作者所著(zhù)的《嵌入式實(shí)時(shí)操作系統uCOS-II》,里面對操作系統的源碼有這詳細的分析??赐高@本書(shū)后就會(huì )對uCOSII有一個(gè)深入的了解。這一階段的主要目的是了解操作系統的知識,比如任務(wù)調度,并發(fā)與競態(tài)。還有一個(gè)目的就是鍛煉自己的編程能力。因為如果看介紹操作系統原理的書(shū)會(huì )比較枯燥,我感覺(jué)閱讀一個(gè)操作系統的源碼比看一千本介紹原理的書(shū)來(lái)的實(shí)惠的多。
3.時(shí)間:大約一個(gè)月
第五階段:bootloader學(xué)習
1.知識點(diǎn):
(1)bootloader基礎知識
(2)u-boot基礎與命令
(3)u-boot移植
2.過(guò)程以及目的:
bootloader是一個(gè)linux嵌入式系統的不可缺少的部分。這一階段的學(xué)習主要是了解bootloader的作用,以及通用bootloader---u-boot的知識,剛開(kāi)始學(xué)會(huì )用u-boot的各種命令。然后分析u-boot的啟動(dòng)流程和Makefile以及u-boot加載內核過(guò)程。然后按照別人的步驟一步一步的移植內核,多做幾編以熟悉這個(gè)過(guò)程。然后在熟悉整個(gè)u-boot的基礎上,獨自完成u-boot的移植,并添加自己修改。這一階段主要參考資料就是光盤(pán)自帶的u-boot移植參考手冊和一些網(wǎng)絡(luò )上的文章。個(gè)人感覺(jué)u-boot移植這方面的網(wǎng)絡(luò )資源相當的豐富。
3.時(shí)間:大約一個(gè)月
第六階段:文件系統學(xué)習
1.知識點(diǎn):
(1)linux文件系統的種類(lèi)與作用
(2)熟悉busybox的使用,以及l(fā)inux系統啟動(dòng)過(guò)程
(3)構建自己的根文件系統
2.過(guò)程以及目的:
文件系統也是一個(gè)linux嵌入式系統不可缺少的部分,這一階段的學(xué)習主要是熟悉根文件系統的作用以及基礎知識。并且自己構建自己的根文件系統。這一階段所看的書(shū)有《構建嵌入式linux系統》,這本書(shū)詳細講解了嵌入式linux的所有元素,包括文件系統.這里主要看文件系統這塊。我還參考了網(wǎng)上的一些文章。這里首先要熟悉基本的一些Linux文件系統,然后學(xué)習busybox的使用以及l(fā)inux的啟動(dòng)過(guò)程,最后參考別人的一步一步來(lái)構建自己的文件系統。
3.時(shí)間:大約半個(gè)月
第七階段:嵌入式圖形界面GUI
1.知識點(diǎn):
(1)嵌入式圖形界面GUI的種類(lèi)與特點(diǎn)
(2)minigui 基礎知識
(3)minigui 移植與程序編寫(xiě)
2.過(guò)程以及目的:
嵌入式圖形界面GUI作為嵌入式上層系統的東西也是需要了解的,這里我只學(xué)習了minigui,因為QT是需要C++的知識,而我沒(méi)有學(xué)過(guò)C++.所以只看了minigui的相關(guān)知識。這個(gè)階段的目的主要是熟悉一下嵌入式圖形接界面的開(kāi)發(fā)流程,因為以后也不打算搞應用。只是熟悉一下嵌入式組成的一些方面。這里只要將minigui移植到板子上能跑hello程序就可以了。其他的也不用深入了解。通過(guò)移植minigui對linux上運行的軟件以及函數庫,程序運行原理,編譯器都會(huì )有一個(gè)新的認識。
3 時(shí)間:大約半個(gè)月
第八階段:linux驅動(dòng)程序基礎知識
1.知識點(diǎn):
(1)看完《LINUX設備驅動(dòng)程序》除了網(wǎng)絡(luò )驅動(dòng)程序,tty驅動(dòng)程序,塊驅動(dòng)程序這幾章不看,其他的都要看完。
(2)實(shí)驗書(shū)中所有例程,要仔細分析結果,理解相關(guān)知識點(diǎn)。
(3)就算是例子,程序編程習慣一定要統一,文檔一定要規范。
2.過(guò)程以及目的
這一階段的目的就是為了linux驅動(dòng)打基礎,《LINUX設備驅動(dòng)程序》(第三版)也就是大家所說(shuō)的ldd3,是最經(jīng)典的一本講linux驅動(dòng)的書(shū),一定要看而且多看幾遍。第一次看很難看進(jìn)去,感覺(jué)講的晦澀難懂。但是多看幾遍就會(huì )由豁然開(kāi)朗的感覺(jué)??赐炅藭?shū),然后就是實(shí)驗書(shū)中的例子。
3.時(shí)間:大約兩個(gè)月
第九階段:linux驅動(dòng)實(shí)戰
1. 知識點(diǎn):
(1)通過(guò)led驅動(dòng)理解雜項字符設備的注冊與實(shí)現,并掌握MINI2440的IO操作過(guò)程。
(2)通過(guò)button驅動(dòng)程序掌握基本的中斷實(shí)現方法。
(3)掌握PWM驅動(dòng)程序。
(4)通過(guò)觸摸屏驅動(dòng)程序掌握input設備模型的實(shí)現。
(5)掌握ADC驅動(dòng)程序的設計
(6)掌握看門(mén)狗,rtc驅動(dòng)程序的設計
(7)通過(guò)LCD驅動(dòng)程序分析platform設備模型的實(shí)現。
2.過(guò)程以及目的:
這一階段的學(xué)習主要是掌握實(shí)際的簡(jiǎn)單的驅動(dòng)程序的實(shí)現與ldd3中的差別,并且分析一些linux子系統。通過(guò)這一階段的學(xué)習,能夠對linux驅動(dòng)程序有更深入的認識。并且鍛煉自己閱讀海量代碼的能力。這一階段主要工作就是看代碼,實(shí)驗,看代碼,實(shí)驗,通過(guò)現象學(xué)習知識。
3. 時(shí)間:大約一個(gè)月
第十階段:深入理解linux內核與USB子系統的研究
? 前九個(gè)階段完成了,自己感覺(jué)嵌入式Linux應該應該算是入門(mén)了。所以要開(kāi)始計劃第十個(gè)階段了。這一階段基本上要確定自己未來(lái)的發(fā)展方向了。因為現在嵌入式系統的標準接口都有USB,所以學(xué)會(huì )USB的相關(guān)知識是很有競爭力的。搞驅動(dòng)的人對內核應該有一定的了解,所以《深入理解Linux內核》還是必須的。這一階段主要是學(xué)習USB協(xié)議,閱讀linux USB子系統全部的代碼,通過(guò)閱讀代碼加深對USB的理解,隨后就是熟悉各種USB類(lèi)協(xié)議,編寫(xiě)和移植USB驅動(dòng)了。USB是我確定的方向,因為我想搞什么東西都要專(zhuān)一,什么都搞,什么也搞不好。所以我決定學(xué)習USB。決定以后從事嵌入式有關(guān)USB方面的工作。這一階段的學(xué)習正在進(jìn)行中,現在正在linux USB子系統浩瀚的代碼中漫游。
評論