Jz2440VideoStudyGuide

出自 百问网嵌入式Linux wiki
前往: 導覽搜尋
1.三周从STM32入门Linux
2.三周掌握Linux驱动基本技能
3.四周掌握输入子系统_Framebuffer_APP基本编程
入门之后
 123部分如果全天学习的话,最快的学习时间是10周;你可以给自己加点余量,争取3、4个月搞定。

1. 三周從STM32入門Linux

面向對象:掌握C語言、STM32單片機開發的人
目標:快速入門Linux驅動開發,掌握簡單的LED、按鍵驅動開發
時長:3周
過程:
① 掌握ubuntu常用操作
② 掌握在ubuntu下開發單片機程序,跟STM32的開發有一個對比
③ 掌握u-boot的使用(無需了解代碼,但是要會編譯、燒寫u-boot)
④ 掌握Linux內核的配置、編譯、燒寫
⑤ 掌握文件系統的結構,會燒寫我們構建好的文件系統(不要求會自己編譯)
⑥ 編寫LED驅動、編寫按鍵驅動

1.1 基於Ubuntu開發裸機(目標①②)(學習時間:1周)

學習新1期視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
005_ARM裸机1期加强版(151节,23节免费,已完结)
只學習前面9課:

Jz2440VideoStudyGuide 001.png

1.2 ARM板系統的基本使用(目標③④⑤)(學習時間:1周)

學習以下銜接課程,下載地址:http://wiki.100ask.net/Download,存放位置為:

06_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
注意1:這部分視頻中涉及u-boot的源碼分析,因為未學習第1期中的代碼重定位等知識,所以不要看源碼分析,只要學會:編譯、燒寫、使用u-boot就可以。
注意2:這部分視頻中涉及內核的部分源碼分析,不要求掌握這些源碼,只要學會:大概了解內核啟動過程做了什麼事、會編譯、燒寫、使用uImage就可以。
注意3:這部分視頻中涉及根文件系統之busybox的編譯,照著操作就可以了。
只學習其中的1、3、4課(搭建開發環境時,需要閱讀JZ2440開發板使用手冊):

Jz2440VideoStudyGuide 002.png

Linux基礎驅動程序(目標⑥)(學習時間:1周)

學習以下銜接課程,下載地址:http://wiki.100ask.net/Download,存放位置為:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
只學習其中的第5課,基於快速入門的目的,第5課不需要全部學完,只需要學習前5節視頻:

Jz2440VideoStudyGuide 003.png

三周掌握Linux驅動基本技能

面向對象:已經會編譯第1個LED裸板程序、第1個LED驅動的人
目標:快速入門Linux驅動開發,掌握簡單的LED、按鍵驅動開發
時長:3周
過程:
① 掌握裸機重定位(這有助於後續理解u-boot)
② 掌握裸機中斷處理流程
③ 掌握Linux異常、中斷處理體系
④ 編寫Linux下的按鍵驅動程序
⑤ 掌握Linux中驅動和應用程式的交互方式:查詢、中斷-喚醒、poll、異步通知

裸機核心知識(目標①②)(學習時間:1周)

學習新1期視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
005_ARM裸机1期加强版(151节,23节免费,已完结)
學習第010課到第014課:

Jz2440VideoStudyGuide 004.png

Linux內核中斷體系及APP與內核交互(目標③④⑤)(學習時間:2周)

學習以下銜接課程,下載地址:http://wiki.100ask.net/Download ,存放位置為:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)
只學習其中的第5課的部分內容,學習第005課中的第006~第011節:

Jz2440VideoStudyGuide 005.png

四周掌握輸入子系統_Framebuffer_APP基本編程

面向對象:具備了基本驅動開發能力並且希望驅動和應用兼顧的人
目標:掌握輸入子系統驅動開發、掌握Framebuffer驅動開發、掌握基本APP編程能力
時長:4周
過程:
① 學習裸機觸控螢幕編程(只要求理解原理,不要求能寫出來)
② 編寫Linux輸入子系統驅動開發:按鍵、觸控螢幕
③ 學習裸機LCD編程(只要求理解原理,不要求能寫出來)
④ 編寫Linux下的LCD Framebuffer驅動
⑤ 練習Linux下APP編程
有同學提問:
老師我看您在這一階段目標中非常側重LCD學習,
但感覺還是有很多項目開發用不到LCD和觸控螢幕。
這階段的學習涉及觸控螢幕、LCD,
請注意:不是讓你去關注觸控螢幕、LCD的硬體操作,
而是輸入子系統、LCD的驅動跟之前寫的LED、按鍵驅動不一樣,
它們藉助於內核現有的代碼來實現,
你要體會這種「基於某個子系統編寫驅動」的思路。
而APP編程里,也不是讓你去關注硬體的操作,
而是要關注很多接口函數:比如文件讀寫、多線程、網絡,poll。
當然如果你本身對APP編程已經有經驗了,那沒必要學習本階段的APP編程。

Linux輸入子系統的驅動開發(目標①②)(學習時間:1周)

學習新1期視頻,下載地址:http://wiki.100ask.net/Download 存放位置為:
005_ARM裸机1期加强版(151节,23节免费,已完结)
學習第018課(能理解硬體操作即可,不要求能自己寫出來):

Jz2440VideoStudyGuide 006.png

然後學習第2期中第002、003、005課:
008_韦东山第2期驱动大全视频(81节,6节免费 ,已完结)

Jz2440VideoStudyGuide 007.png

LCD Framebuffer驅動開發(目標③④)(學習時間:1周)

學習新1期視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
005_ARM裸机1期加强版(151节,23节免费,已完结)
學習第017課,掌握LCD的硬體操作原理,不要求能寫出裸機程序:

Jz2440VideoStudyGuide 008.png

然後學習第2期中第004課,最好自己寫一下驅動:
008_韦东山第2期驱动大全视频(81节,6节免费 ,已完结)

Jz2440VideoStudyGuide 009.png

Linux下APP編程(目標⑤)(學習時間:2周)

第3期的第1個項目,涉及大量的Linux APP編程。裡面含有Makefile、多線程、網絡等很多知識。
對於初學者,可以先不管Makefile。
對於初學者,也可以先不管過於複雜的「數碼相框項目」。

① 前期準備:

第3期不再使用2.6.22.6內核,而是使用linux 3.4.2;
第3期使用工具鏈arm-linux-gcc 4.3.2;
第3期使用新的文件系統:fs_mini_mdev_new。
請注意上述3點。
下載地址:http://wiki.100ask.net/Download ,存放位置為:
010_韦东山Linux_第3期视频_项目实战(适用任意Linux板,111节,6节免费,已完结)
 3期视频(含相应的文档与源码)
    项目1_文件浏览器_数码相框(33节, 2节免费)
        资料
            数码相框固件.rar
下載解壓「數碼相框固件.rar」,可以使用其中的:
数码相框文件系统
 3.4.2内核
  映象文件:u-boot.bin,uImage_digitpic,fs_mini_mdev_new_digitpic.yaffs2
工具鏈也在「數碼相框固件.rar」里。

② 視頻學習:

在PC上的實驗都可以不做,以前之所以錄製在PC做實驗是為了方便,但是後來發現並不方便。特別是64位ubuntu系統不支持那些實驗。
Makefile的知識挺複雜,可以只使用我們提供的Makefile,不需要深入理解。
數碼相框的代碼過於複雜,理解「面向對象編程」的思想即可,不需要去鑽研裡面的代碼。
這部分視頻的學習,是為了讓你掌握基本的Linux APP編程。


視頻下載地址:http://wiki.100ask.net/Download ,存放位置為:
010_韦东山Linux_第3期视频_项目实战(适用任意Linux板,111节,6节免费,已完结)
 3期视频(含相应的文档与源码)
    项目1_文件浏览器_数码相框(33节, 2节免费)
        视频

Jz2440VideoStudyGuide 010.png

入門之後

入門之後,請按需學習。

驅動程序的學習

按需學習

學習完某個硬體的裸機視頻,就學習對應的Linux驅動視頻。
比如學習完裸機的I2C視頻,就可以學習Linux I2C驅動視頻。
不需要把裸機視頻全部學習了,再去開始學習驅動。
我們的驅動視頻非常多,以第2期為核心來學習。
第3期中的攝像頭、ALSA音效卡驅動特別龐大複雜,你工作中涉及時再學習吧。

Jz2440VideoStudyGuide 011.png

檢驗學習成果:移植到新的內核上去

視頻里大部分驅動是基於linux 2.6.22.6來錄製的,但是所講的知識可以在新內核上無縫使用。
你可以嘗試把視頻中的驅動移植到linux 3.4.2去,我們有示例視頻:
009_UBOOT移植_LINUX移植_驱动移植(19节, 全部免费,已完结)

Jz2440VideoStudyGuide 012.png

設備樹

有一種錯誤的觀點,說「新驅動都是用設備樹來寫了」。
設備樹不可能用來寫驅動。請想想,要操作硬體就需要去操作複雜的寄存器,如果設備樹可以操作寄存器,那麼它就是「驅動」,它就一樣很複雜。
設備樹只是用來給內核里的驅動程序,提供硬體的信息。比如LED驅動,在內核的驅動程序里去操作寄存器,但是操作哪一個引腳?這由設備樹指定。
我們的驅動視頻是基於linux 2.6.22.6錄製的,但是那些知識在最新的內核上也完全沒有變。
我們錄製了設備樹的視頻,使用linux 4.19版本的內核:
018_设备树详解(29节,4节免费,已完结)

Jz2440VideoStudyGuide 013.png

u-boot的學習

u-boot是很複雜的,它是一個裸機程序的集大成者,如果你的工作不涉及u-boot開發,可以先不學習它,會使用就可以了。
複雜在於它的啟動流程,在於它支持很多的設備,比如支持網卡、SD卡、Flash。
但是,我們要記住它的核心功能:啟動內核。
所以,學習u-boot時,要掌握2點:
1. u-boot本身怎麼啟動?重定位、把自己從Flash中讀到內存里,需要理解這些知識
2. 怎麼去讀出Flash上的內核:

這會涉及u-boot中Flash的驅動, 但是我們可以只關注u-boot提供的命令,比如使用」nand read …」命令來讀; 而不需要關注「nand read」命令的實現

3. 怎麼啟動內核。

怎麼學習u-boot?

先學習怎麼使用

學習以下課程,下載地址:http://wiki.100ask.net/Download 存放位置為:
06_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)

Jz2440VideoStudyGuide 014.png

u-boot過於複雜,我們先學習自己寫一個bootloader

先學習重定位

學習新1期視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
005_ARM裸机1期加强版(151节,23节免费,已完结)

Jz2440VideoStudyGuide 015.png

再學習Nand Flash操作

學習新1期視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
005_ARM裸机1期加强版(151节,23节免费,已完结)

Jz2440VideoStudyGuide 016.png

現在,從0寫bootloader

學習視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)

Jz2440VideoStudyGuide 017.png

可以研究u-boot 1.1.6了

學習視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)

Jz2440VideoStudyGuide 018.png

試試自己移植

學習視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
009_UBOOT移植_LINUX移植_驱动移植(19节, 全部免费,已完结)

Jz2440VideoStudyGuide 019.png

Linux內核的學習

我目前的視頻里,對內核的講解並不多。 我認為內核就是各類驅動的集合。 但是,你可以理解一下內核的啟動流程,嘗試移植一下內核。

理解內核啟動流程

學習視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
006_u-boot_内核_根文件系统(新1期_2期间的衔接,29节,已完结,全部免费)

Jz2440VideoStudyGuide 020.png

移植新內核

學習視頻,下載地址:http://wiki.100ask.net/Download ,存放位置為:
009_UBOOT移植_LINUX移植_驱动移植(19节, 全部免费,已完结)

Jz2440VideoStudyGuide 021.png

應用開發的學習

第3期的第1個項目,建議觀看其中的全部視頻。
1. 掌握各類基礎技能:多線程、網絡等等
2. 掌握面向對象的編程思想
3. 不要陷於細節,比如「數碼相框」中對圖像著處理、坐標的變換,這些很複雜,不用管它。

「數碼相框」名字比較老土了,但是裡面的知識還是APP開發的基礎。 在這個項目里,我們還實現了電子書、文件瀏覽器。文件瀏覽器就比較高大上了。

第3期的第2個項目中的內容非常多,有攝像頭、ALSA音效卡、WIFI網卡使用、3G上網卡等等,按需學習。
可以看看裡面的攝像頭應用編程,至於其中的攝像頭驅動太複雜了,你用到時再看。
第3期的第3個項目是電源管理,理解一下概念即可,不用看。

Jz2440VideoStudyGuide 022.png