時(shí)間:2020-03-20 16:32:48 來(lái)源:信盈達(dá) 作者:信盈達(dá)
很多程序員在學(xué)習(xí)技能時(shí),盲目追求技術(shù)實(shí)現(xiàn),而忽略了整個(gè)生態(tài)環(huán)境的觀察和基礎(chǔ)理論鋪墊,導(dǎo)致學(xué)完后似是而非,不能舉一反三,遇到項(xiàng)目依然拿不出合理的解決方案。
作為一個(gè)技術(shù)開發(fā)者,大家要明白“技術(shù)只是工具,有用的是產(chǎn)品”,我們要用技術(shù)去解決問(wèn)題,而不是單純地做個(gè)技術(shù)控,自我娛樂。
想要學(xué)習(xí)一門新技術(shù),我們首先要對(duì)它有個(gè)清晰的了解,不能什么都不懂就開始往上面撲,就像很多人到廟里面就上香求佛祖保佑,可能根本都不知道這個(gè)佛是哪一路神仙。
那今天我們就先帶大家來(lái)深入了解下嵌入式開發(fā)中至關(guān)重要的一環(huán):linux驅(qū)動(dòng)。
在學(xué)習(xí)驅(qū)動(dòng)之前,我們首先來(lái)了解下操作系統(tǒng)。
# 操作系統(tǒng)OPERATING SYSTEM #
計(jì)算機(jī)出現(xiàn)的時(shí)候,還沒有什么花里胡哨的包裝,都是光著身子跑,用技術(shù)的語(yǔ)言說(shuō)就是它只能執(zhí)行一個(gè)任務(wù),執(zhí)行一個(gè)進(jìn)程,也可以叫“裸跑”。
可以拿我們的手機(jī)來(lái)比喻,裸機(jī)的話,我們玩王者榮耀的時(shí)候,有人打電話進(jìn)來(lái)的話,王者榮耀是要被終止的。
后來(lái)就有了操作系統(tǒng),操作系統(tǒng)可以保證多任務(wù)執(zhí)行,同樣的 CPU 芯片,有了操作系統(tǒng),我可以開微信,QQ ,還同時(shí)做其他很多事情。
所以就出來(lái)了很多操作系統(tǒng),操作系統(tǒng)可以分為實(shí)時(shí)操作系統(tǒng)和通用操作系統(tǒng)。
實(shí)時(shí)操作系統(tǒng)(RTOS 全稱Real Time Operating System)可以理解為對(duì)時(shí)間要求非常苛刻,可以用一個(gè)詞“必須”來(lái)理解,就是在某個(gè)時(shí)間段之內(nèi)必須要做某件事情。
而通用操作系統(tǒng)很常見,比如電腦 windows,Android 手機(jī),ios手機(jī)等,Linux 也可以認(rèn)為是通用 OS,因?yàn)樗麄儗?duì)時(shí)間要求不是很嚴(yán)苛。
Linux 可以通過(guò)配置某個(gè)宏定義變成實(shí)時(shí)操作系統(tǒng),但是我們使用Linux 主要是針對(duì)他的通用 OS,多用戶,多任務(wù)等特別突出的性能。
目前這個(gè)階段,可以說(shuō)每個(gè)人都脫離不開Linux,比如你手機(jī)底層是 Linux 內(nèi)核,購(gòu)物的云平臺(tái),淘寶,亞馬遜等都是用 Linux 開發(fā)維護(hù)的,很多股票平臺(tái)也都是基于 Linux 開發(fā)維護(hù)的。
# 什么是驅(qū)動(dòng)?WHAT IS DRIVE #
按照字面意思就是給一個(gè)東西動(dòng)力,讓它動(dòng)起來(lái),至于物體怎么動(dòng)是有一定的邏輯規(guī)律在里面的;對(duì)于電學(xué)中的硬件驅(qū)動(dòng)來(lái)說(shuō),電力提供了動(dòng)力,但是驅(qū)動(dòng)程序提供了操作物體的邏輯方法。
比如我們的LED路燈照明,電讓我們的LED燈亮起來(lái),但是里面的程序檢測(cè)到時(shí)間的變化控制電路的導(dǎo)通和斷開,這里面的驅(qū)動(dòng)程序就叫LED Driver。
# linux驅(qū)動(dòng)LINUX DRIVER #
linux驅(qū)動(dòng)是linux內(nèi)核驅(qū)動(dòng)的全稱,至于什么是linux內(nèi)核,我們將在下面的linux體系結(jié)構(gòu)中進(jìn)行說(shuō)明。
對(duì)于linux驅(qū)動(dòng)的理解可以分為廣義和狹義上兩種。
linux驅(qū)動(dòng)廣義上是指操作硬件,讓硬件工作起來(lái)的程序代碼,這段代碼就叫做硬件的驅(qū)動(dòng)程序。
但是在裸機(jī)開發(fā)中我們也經(jīng)常會(huì)聽到裸機(jī)驅(qū)動(dòng),其實(shí)嚴(yán)格意義上來(lái)說(shuō),沒有操作系統(tǒng)是沒有驅(qū)動(dòng)概念的,如果非要說(shuō)裸機(jī)驅(qū)動(dòng)的話,也是指裸機(jī)中操作硬件的那部分程序。
linux驅(qū)動(dòng)狹義上是指操作系統(tǒng)中用來(lái)控制硬件的邏輯方法的那部分代碼。
對(duì)于這個(gè)定義我們可以從以下兩方面去進(jìn)行理解:
①操作系統(tǒng)有很多種,windows有windows驅(qū)動(dòng),ios有ios驅(qū)動(dòng),android有android驅(qū)動(dòng),而我們學(xué)習(xí)的linux驅(qū)動(dòng)則是針對(duì)linux操作系統(tǒng)平臺(tái)。
②linux驅(qū)動(dòng)只是內(nèi)核中的一部分,除了用來(lái)控制硬件的這部分外,還有文件系統(tǒng),內(nèi)存管理,內(nèi)核調(diào)度等內(nèi)容。
而狹義上的linux驅(qū)動(dòng)是我們課程的研究方向。
# linux體系結(jié)構(gòu)LINUX ARCHITECTURE #
了解linux體系架構(gòu),有助于增強(qiáng)我們對(duì)驅(qū)動(dòng)開發(fā)整個(gè)體系的認(rèn)識(shí),幫助我們更好地投入到linux驅(qū)動(dòng)學(xué)習(xí)中。
①、linux系統(tǒng)是分層的
Linux系統(tǒng)一般有4個(gè)主要部分:內(nèi)核、shell、文件系統(tǒng)和應(yīng)用程序。
內(nèi)核、shell和文件系統(tǒng)一起形成了基本的操作系統(tǒng)結(jié)構(gòu),它們使得用戶可以運(yùn)行程序、管理文件并使用系統(tǒng)。
分層設(shè)計(jì)的思想讓程序間松耦合,有助于適配各種平臺(tái)。
②驅(qū)動(dòng)的上面是系統(tǒng)調(diào)用,下面是硬件。
③驅(qū)動(dòng)本身也是分層
Linux內(nèi)核由如下幾部分組成:內(nèi)存管理、進(jìn)程管理、設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)和網(wǎng)絡(luò)管理等。
彼此之間的系統(tǒng)合作也是一級(jí)調(diào)用一級(jí),系統(tǒng)龐大,這也是它難以學(xué)習(xí)的原因所在。
# linux驅(qū)動(dòng)的分類CLASSIFICATION OF LINUX DRIVERS #
Linux驅(qū)動(dòng)分為三個(gè)基礎(chǔ)大類:字符設(shè)備驅(qū)動(dòng),塊設(shè)備驅(qū)動(dòng),網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)。
①字符設(shè)備
字符設(shè)備提供的就是一種數(shù)據(jù)流。比如當(dāng)你在鍵盤上敲入“yes”這個(gè)字符串的時(shí)候,鍵盤驅(qū)動(dòng)程序會(huì)按照輸入完全相同的順序返回這個(gè)由這三個(gè)字符組成的數(shù)據(jù)流,首先是“y”,然后是“e”,然后是“s”,最終是文件的結(jié)束符(EOF),當(dāng)沒有人敲鍵盤的時(shí)候,鍵盤的字符流就是空的。
所以鼠標(biāo)、鍵盤、顯示器等都是典型的字符設(shè)備。
②塊設(shè)備
而塊設(shè)備的驅(qū)動(dòng)可能要求讀取磁盤上任意塊的內(nèi)容,然后又轉(zhuǎn)去讀別的塊的內(nèi)容,而被讀取的塊在磁盤上位置不一定要連續(xù),所以說(shuō)硬盤是可以被隨機(jī)訪問(wèn)的,而不是以流的方式被訪問(wèn),顯然它就是一個(gè)塊設(shè)備。
典型的塊設(shè)備有:磁盤、U盤等。
③網(wǎng)絡(luò)設(shè)備
網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)是特殊設(shè)備的驅(qū)動(dòng),它負(fù)責(zé)接收和發(fā)送幀數(shù)據(jù),可能是物理幀,也可能是ip數(shù)據(jù)包,這些特性都由網(wǎng)絡(luò)驅(qū)動(dòng)決定。
典型的網(wǎng)絡(luò)設(shè)備有:網(wǎng)卡、wifi、藍(lán)牙等。
而在我們的linux驅(qū)動(dòng)學(xué)習(xí)中,字符設(shè)備驅(qū)動(dòng)占的比例比較大。
因?yàn)樽址O(shè)備應(yīng)用面廣,在以后的開發(fā)中是使用最多的。對(duì)于塊設(shè)備和網(wǎng)絡(luò)設(shè)備要求修改或者定制的很少,一般都是廠家拿過(guò)來(lái)可以直接用的。
# 為什么要學(xué)習(xí)linux驅(qū)動(dòng)? REASONS FOR LEARNING LINUX DRIVER #
1、因?yàn)?/span>90%的程序員不懂Linux內(nèi)核,所以會(huì)linux內(nèi)核驅(qū)動(dòng)的人才,薪資比一般的程序員要高出一倍多。
2、ios安卓開發(fā)環(huán)境中的API經(jīng)常變,如果長(zhǎng)時(shí)間不用,再下手去做時(shí),可能就不會(huì)了,幾年的積累全沒了,而Linux內(nèi)核這種變化不劇烈并且開源的東西可以讓學(xué)習(xí)者長(zhǎng)年累月的學(xué)習(xí)并且能有所積累。
3、作為開發(fā)人員,不管你從事的是驅(qū)動(dòng)開發(fā),應(yīng)用開發(fā),還是后臺(tái)開發(fā),如果不了解進(jìn)程的調(diào)用機(jī)制,不知道進(jìn)程會(huì)阻塞,就緒,執(zhí)行幾個(gè)狀態(tài),你怎么可能編寫好一個(gè)低容錯(cuò)率的代碼呢?
學(xué)習(xí)完 Linux 內(nèi)核你會(huì)對(duì)整個(gè)計(jì)算機(jī)體系有一個(gè)更深刻的認(rèn)知,理解計(jì)算機(jī)操作系統(tǒng)和內(nèi)核的運(yùn)行機(jī)制,才可能更好的編寫你的代碼,出現(xiàn)更少的錯(cuò)誤。
4、Linux 內(nèi)核現(xiàn)在覆蓋的領(lǐng)域非常廣,手機(jī)、平板、路由器等等,就大家非常喜歡的蘋果操作系統(tǒng),底層內(nèi)核也是有 Linux的影子,Linux 的普及毋庸置疑,學(xué)習(xí) Linux 應(yīng)該作為每個(gè)技術(shù)人員的標(biāo)配。
5、在面試時(shí),技術(shù)面試官也非常喜歡問(wèn)linux方面的問(wèn)題,會(huì)linux能夠幫助你快速拿下高薪offer。
# linux驅(qū)動(dòng)如何學(xué)習(xí)?HOW TO LEARN LINUX DRIVER #
linux驅(qū)動(dòng)學(xué)起來(lái)內(nèi)容多,內(nèi)核數(shù)據(jù)結(jié)構(gòu)復(fù)雜,涉及文件龐大,拉來(lái)拉去的,基本功不足根本沒有辦法學(xué)習(xí),走兩步不知道自己在什么地方,找不到自己原來(lái)的位置。這就是大部分學(xué)生學(xué)習(xí)驅(qū)動(dòng)的現(xiàn)狀。
因此在學(xué)習(xí)linux驅(qū)動(dòng)前必須要有很好的裸機(jī)開發(fā)基礎(chǔ),因此我們的嵌入式課程設(shè)計(jì),在linux驅(qū)動(dòng)之前設(shè)置了相應(yīng)的基礎(chǔ)課程,幫助大家做好學(xué)習(xí)linux驅(qū)動(dòng)階段的基礎(chǔ)準(zhǔn)備。
①c語(yǔ)言高級(jí)編程
通過(guò)這個(gè)階段的學(xué)習(xí),提高c語(yǔ)言基本功,鍛煉程序開發(fā)與分析能力。
▲▲▲
掃描二維碼,回復(fù)“c語(yǔ)言”
免費(fèi)獲取C語(yǔ)言學(xué)習(xí)50+項(xiàng)目案例源碼
②裸機(jī)開發(fā)
在本階段會(huì)結(jié)合大量的項(xiàng)目,比如:智能云家居,四軸飛行器等,來(lái)讓大家提升對(duì)soc本身認(rèn)識(shí)。
▲▲▲
掃描二維碼,回復(fù)“云家居”
獲取云家居項(xiàng)目開發(fā)資料包
③系統(tǒng)編程
通過(guò)系統(tǒng)編程,讓大家知道在應(yīng)用層怎么使用、調(diào)用驅(qū)動(dòng),明晰應(yīng)用和驅(qū)動(dòng)之間的協(xié)同合作流程。
④U-Boot
通過(guò)bootloader移植,讓大家學(xué)習(xí)如何搭建開發(fā)板環(huán)境,進(jìn)而逐步接觸到稍微復(fù)雜一點(diǎn)的代碼及其分析。
▲▲▲
掃描二維碼,回復(fù)“uboot”
免費(fèi)獲取u-boot在線學(xué)習(xí)課程
經(jīng)過(guò)四個(gè)階段的學(xué)習(xí)與鋪墊,相信大家都能學(xué)會(huì)驅(qū)動(dòng)的。
# linux驅(qū)動(dòng)課程設(shè)計(jì)COURSE DESIGN OF LINUX DRIVER #
linux驅(qū)動(dòng)是信盈達(dá)的王牌課程,以每年兩次的速度不斷迭代更新,讓學(xué)員掌握最新的潮流技能。
今年linux驅(qū)動(dòng)課程將采用A9+A72雙平臺(tái)教學(xué),通過(guò)3大項(xiàng)目實(shí)戰(zhàn),讓大家掌握linux驅(qū)動(dòng)開發(fā)的精髓,幫助學(xué)員們?cè)诰蜆I(yè)市場(chǎng)能夠脫穎而出。
具體課程設(shè)計(jì)如下:
1、驅(qū)動(dòng)應(yīng)該怎么學(xué)
2、linuxshell應(yīng)用
3、linux文件系統(tǒng)
4、字符設(shè)備驅(qū)動(dòng)基礎(chǔ)
5、字符設(shè)備驅(qū)動(dòng)框架
6、linux設(shè)備驅(qū)動(dòng)模型
7、Linux內(nèi)核設(shè)備樹
8、ARM Linux中使用DTS實(shí)例
9、觸摸屏驅(qū)動(dòng)與多點(diǎn)觸控制協(xié)議
10、塊設(shè)備與網(wǎng)絡(luò)設(shè)備
11、嵌入式視頻監(jiān)控項(xiàng)目
12、嵌入式視頻廣告機(jī)項(xiàng)目
13、嵌入式linux視頻采集項(xiàng)目
想要了解更多課程優(yōu)惠信息或獲取項(xiàng)目課程資料,可以掃描下方二維碼進(jìn)行咨詢。
▲▲▲
免費(fèi)領(lǐng)取試聽卡
申請(qǐng)已經(jīng)提交
老師會(huì)馬上給您安排試聽課程!
申請(qǐng)出錯(cuò)了
您可以加老師QQ:914865590報(bào)名咨詢!