系統(tǒng)編程--->驅(qū)動 ... 自學嵌入式拉低偏差丨4412開發(fā)板學習指引+為學習后面內(nèi)容打下基礎(chǔ) " />
總領(lǐng)及學習指引 結(jié)合入門視頻介紹了開發(fā)板組裝,Ubuntu 環(huán)境搭建,以及 Linux 常用命令等內(nèi)容,為學習后面的內(nèi)容打下基礎(chǔ)。 推薦學習步驟:入門視頻--->系統(tǒng)編程--->驅(qū)動--->Qt 或 Android。 配套視頻資源:“ITOP-4412 開發(fā)板視頻教程\01-迅為電子開發(fā)板入門視頻”。 01 框架學習法 嵌入式系統(tǒng)的學習方法很多人都講過,相信大家在網(wǎng)上或者其他渠道接觸過一些思路和方法,在這里講一下個人的體會。 首先來說,學習有沒有捷徑呢?一種說法是可以速成,幾天就可以學會,我們認為這種速成的說法太夸張了,那是不可能的。 有些人認為學習沒有捷徑,你必須經(jīng)過長期的努力,所謂功到自然成。但是學習嵌入式技術(shù),如果說沒有好的方法那也是不對的,學習一門新的知識體系肯定是要下工夫,但是也需要有好的指引,也就是捷徑,實際上這里是講的就是學習方法。 方法很重要,如果沒有方法,閉著眼亂學亂撞,肯定是不行的。就像我們?nèi)フ乙粋沒有去過的地方,自己跟著感覺去找,找到的希望就很小,如果手頭有張地圖,并且還有指南針,那就要快很多;如果我們有導航,自然是更快更方便了。實際上,這就是方法的重要性。那么在這里,我們來介紹一種學習方法,這種方法也是迅為公司多年培訓和產(chǎn)品開發(fā)經(jīng)驗所總結(jié)出來的。 大家可能會問了,迅為也做過嵌入式培訓?實際上我們有很豐富的培訓經(jīng)驗。 我們覺得,‘框架學習法’是最適合初學者的一種方法,這里面包含了快速原型的思想; 也就是框架學習,快速原型。這里面的主導思想,即從一開始就要看到嵌入式系統(tǒng)知識領(lǐng)域的全貌,然后逐漸深入! 比如說,我們想了解北京這座城市,如果在胡同里轉(zhuǎn)來轉(zhuǎn)去,可能幾年都搞不清楚這個城市是什么情況,如果我們先通過北京地圖學習一下,了解下天安門在什么地方,鳥巢在什么地方,香山八達嶺在哪里。再加上我們到這些地方去看一看,可能很快就掌握了這座城市的全貌。 在這里需要注意的是,即便是有了地圖,也需要有一些基礎(chǔ),比如我們需要知道什么是天安門,知道鳥巢的來歷,明白八達嶺是怎么回事,實際上這些就是基礎(chǔ)知識。也就是說我們在學習系統(tǒng)框架之前要具備一定的基礎(chǔ),否則這張地圖也是看不懂的。 學習嵌入式技術(shù)也是需要一定的基礎(chǔ)的,關(guān)于基礎(chǔ)方面,下一節(jié)會專門討論。接下來如果我們想進一步的了解這座城市,就要去研究這座城市的歷史,甚至是中國的歷史。更細一步呢,還可以進一步研究故宮本身的地圖。 這樣一環(huán)套一環(huán),經(jīng)過不斷的研究,逐漸就會掌握這座城市的地理、文化、政治經(jīng)濟等特點。 通過了解北京城這個簡要的例子,運用框架學習法,在對不同層次的框架的學習過程中, 逐漸了解和掌握整個系統(tǒng)。 如果我們不注意方法,每天在胡同里面來回轉(zhuǎn)悠,肯定是事倍功半,很長時間將不得要領(lǐng)。 02 嵌入式系統(tǒng)學習的框架 學習嵌入式也是這樣。必須掌握一定的方法,才能比較快速有效的學習。 這個方法就是框架學習法,如前所述,首先在了解這個基礎(chǔ)框架之前我們要有一定的基 礎(chǔ),那么這個基礎(chǔ)就是單片機和 C 語言,不需要掌握的有多好,但一定要具備一定的 C 語言編程能力。像其他有些課程,比如計算機專業(yè)課程中的編譯原理、數(shù)據(jù)結(jié)構(gòu),計算機系統(tǒng)體系結(jié)構(gòu),這些知識實際上還不太需要,了解一下就可以了。 有了 C 語言編程基礎(chǔ),并且學過單片機,這個時候就可以學習一下嵌入式 Linux 的基本框架了,很簡單,那就是首先要搞清楚什么是 BootLoader、Linux 內(nèi)核(kernel)、和文件系統(tǒng),接下來簡單介紹一下。 什么是 BootLoader 呢? 實際上它是個引導程序,也就是硬件復位以后第一個要執(zhí)行的程序,它主要工作就是初始化操作系統(tǒng)運行的環(huán)境,比如說內(nèi)存、定時器、緩沖器等,當這個工作做完以后,再把操作系統(tǒng)的代碼加載到內(nèi)存,然后操作系統(tǒng)就可以啟動并執(zhí)行,到此為止,bootloader 的任務就完成了。 那么有人問了,沒有 bootloader 行不行呢,可以!但是因為操作系統(tǒng)本身一般是個通用的軟件,它要在不同的平臺上運行,比如 X86,ARM,POWERPC 等等,而不同的處理器的初始化操作是不同的,如果操作系統(tǒng)的軟硬要考慮在啟動時候各種平臺的差異性,那就顯得過于復雜。除此之外,也有其他方面的原因,比如燒寫系統(tǒng)的便捷性考慮等等,這里暫不做深入的探討。 常用的 bootloder 有很多種,比如 U-BOOT、REDBOOT、LILO 等等,我們開發(fā)板用的是 Uboot。 什么是 Kernel 呢? Kernel 就是 Linux 的內(nèi)核,也就是說 Linux 操作系統(tǒng)本身的代碼。那么 U-BOOT 啟動到最后,就是把它加載到內(nèi)存,并且跳轉(zhuǎn)到 Kernel 來執(zhí)行。 什么是文件系統(tǒng)呢? 現(xiàn)在我們來介紹一下文件系統(tǒng),這里需要了解一個事實,就是說 Linux 啟動到最后一定要掛載一個文件系統(tǒng)。這個是 Linux 的一個特點,它不像其他操作系統(tǒng),比如像 VxWorks,是不需要文件系統(tǒng)的,VxWORKS沒有文件系統(tǒng)也可以運行。 而且還需要了解一點,像 QT 系統(tǒng)、Android、以及 Ubuntu 系統(tǒng)它們的底層都是 Linux 內(nèi)核,不同的是它們的文件系統(tǒng)不一樣,也就是說,Android 系統(tǒng)相關(guān)的一些代碼,比如說圖形界面系統(tǒng)、Android 的虛擬機, Android 的框架代碼都在 Linux 最后掛的文件系統(tǒng)里面。 如果大家理解了這點,那么這幾個系統(tǒng)的基本架構(gòu)也就清楚了。 搞清楚了這幾個概念,實際我們就了解了 Linux 系統(tǒng)最基本的框架,然后我們根據(jù)開發(fā)板配套的資料,去學習如何編譯這幾個文件,因為像 Uboot、Kernel、文件系統(tǒng),最后編譯生成出來分別是一個獨立的文件,就是說會生成三個文件,最后我們要學會把這幾個文件燒寫到板子上。學會了編譯和燒寫,接下來呢,我們在這個框架的基礎(chǔ)上,去學習如何做 Linux 上面的應用程序。什么是應用程序(APP)呢?它是運行在操作系統(tǒng)上面,通過調(diào)用操作系統(tǒng)的資源去工作,是最終的業(yè)務邏輯,比如我們 Windows 上面有很多的應用程序,像 QQ、暴風影音、WORD、EXEL 等,各種各樣 APP有很多。 根據(jù)我們后期的視頻教程,大家應該很快就能學會,比如說串口程序、網(wǎng)絡程序等等,這些都是應用程序,我們不需要做太多,學習幾個加深一下對框架的認識就可以了。再接下來,我們就需要學習 Linux 驅(qū)動方面的一些知識了,這也是在基礎(chǔ)框架里面的,驅(qū)動程序可以看成是操作系統(tǒng)的一部分,它在底層專門和硬件打交道。那么大家稍微了解一下, 就會知道 Linux 的驅(qū)動包括有三種:字符設(shè)備、塊設(shè)備以及網(wǎng)絡設(shè)備。 這個時候呢,大家要注意,只需要學習字符類設(shè)備驅(qū)動,其他兩種先不要去花時間研究。一定要記住,最初學習嵌入式技術(shù)的時候不要去研究塊設(shè)備和網(wǎng)絡設(shè)備。也就是說,把字符類設(shè)備搞明白就可以了。因為一般的公司開發(fā)嵌入式的產(chǎn)品僅限于字符設(shè)備的開發(fā),掌握字符設(shè)備的框架思想和開發(fā)步驟就能夠勝任了。至于塊設(shè)備和網(wǎng)絡設(shè)備,直接用開發(fā)板或者某個開發(fā)平臺本身提供的驅(qū)動就足夠了,這些是一線處理 器廠家做的事情,一般情況下不需要我們?nèi)ネ瓿,這些處理器研發(fā)的廠家在為處理器開發(fā)配套 BSP 的時候才會涉及這些工作。 當然了,有的同學可能會說,某某公司就是在做塊設(shè)備驅(qū)動,我的意思是講,從嵌入式這個行業(yè)總體上來講,大多數(shù)公司都不需要那么做,很多技術(shù)往往是直接拿來用的。我們掌握了字符設(shè)備驅(qū)動的開發(fā)方法,已經(jīng)能夠應付大多數(shù)公司的開發(fā)要求,對于一個還沒有入門的學生來講,一定要按照我說的辦法來學習。 等將來熟練掌握基本技能以后,可以根據(jù)框架學習的方法,再去研究更深入的編程。這個時候,那些計算機專業(yè)的課程,比如數(shù)據(jù)結(jié)構(gòu)、計算機系統(tǒng)體系結(jié)構(gòu)、各種算法等等就可以派上用場了,自己的水平也會在學習的過程中再次升華。 學習字符類設(shè)備驅(qū)動,請跟著迅為的視頻去學習 LED 的驅(qū)動編寫方法,以及蜂鳴器、AD 轉(zhuǎn)換等這些跟 GPIO 相關(guān)的驅(qū)動開發(fā)技巧。 掌握了這些,可以講,我們已經(jīng)成為了一個比較合格的嵌入式驅(qū)動工程師! 這個時候我進一步介紹一下什么是快速原型,如果學過軟件工程的話,那么大家會聽說過一種自頂向下的產(chǎn)品開發(fā)方法,這個方法很有效,多數(shù)產(chǎn)品的開發(fā)方法都是遵循這個思想,大概就是從最初的可行性分析,然后概要設(shè)計、詳細設(shè)計、編碼、測試等等。 除此之外呢,還有一種開發(fā)方法就是‘快速原型’,這個是微軟采用的一種方法,簡而言之呢,快速原型是個逐漸迭代的方法,就是說讓產(chǎn)品盡快把雛形開發(fā)出來,然后逐漸清晰,一步步走向成熟。 在這里我們把快速原型法用到學習上,它原來是種開發(fā)方法,我們這里借鑒過來,借鑒到框架學習的思想上。 也就是說,我們掌握一定的基礎(chǔ)以后,就要去學習框架,當這個基礎(chǔ)框架清晰以后,再去學習更新更深入的框架知識,這樣一環(huán)套一環(huán),環(huán)環(huán)相扣,最終研究越來越深入,進而成為這個行業(yè)的專家。 那么在嵌入式行業(yè)的工程師的職位其實也是這個樣子的,大家看一下: 基本數(shù)字電路 + C 語言 + 基礎(chǔ)框架知識 -----> 嵌入式驅(qū)動工程師數(shù)據(jù)結(jié)構(gòu)+編譯原理 ------> 高級嵌入式驅(qū)動工程師計算機系統(tǒng)體系結(jié)構(gòu) + 操作系統(tǒng)(從抽象到具體)-------> 系統(tǒng)架構(gòu)工程師 因為在第一個階段,你會發(fā)現(xiàn),只要熟練掌握 C 語言,有良好的編程功底就夠了,在工作的時候很少涉及到編譯原理、數(shù)據(jù)結(jié)構(gòu)這些方面的知識,那么很多其他專業(yè)的畢業(yè)生,甚至原來學機械設(shè)計的同學都可以成為嵌入式驅(qū)動工程師。 實際也是這樣,在大多數(shù)嵌入式技術(shù)公司,尤其是應用產(chǎn)品開發(fā)的公司,只要了解基本的 Linux 架構(gòu)的知識,并且能夠編寫字符類的驅(qū)動程序就夠了。因為像網(wǎng)絡設(shè)備驅(qū)動以及塊設(shè)備驅(qū)動,基本都有個 DEMO設(shè)計,只要參考這個 DEMO 做就可以,根本不需要我們做什么,如果說需要做的話,那也是改一下 GPIO 的設(shè)置,修改一下中斷的引腳,僅此而已。 那么深入學習的話,分析操作系統(tǒng)源碼的時候就會發(fā)現(xiàn),數(shù)據(jù)結(jié)構(gòu)的知識逐漸排上用場, 尤其是在某些專業(yè)公司,負責某個專用領(lǐng)域的時候,工作中可能會改寫操作系統(tǒng)的某部分代 碼,來適應他們自己硬件的各種情況,將會深入分析某方面的技術(shù),比如文件系統(tǒng)、網(wǎng)絡協(xié)議等,這個時候數(shù)據(jù)結(jié)構(gòu)等方面知識就顯得很重要了。 有了基礎(chǔ)的原型以后,通過繼續(xù)學習新的知識,逐漸使自己的認識提高一個層次,更精深的了解嵌入式技術(shù),同時知識體系更加完備,可以做更高層次的工作了。 應用這樣的學習方法,在學習過程中,也會使學習過程始終有目標,而不會感覺枯燥,每天都會有成就感,從一開始就能抓住嵌入式系統(tǒng)的脈絡,只要付諸努力,持久學習下去,就能成為嵌入式行業(yè)的專家。 最后我們總結(jié)下,要想比較快的掌握嵌入式技術(shù),要應用框架學習的方法,在一定的知識基礎(chǔ)上就開始學習基礎(chǔ)的框架知識,這樣就很容易入門,隨著開發(fā)經(jīng)驗的積累,再去學更深入的基礎(chǔ)知識,以及更深層次的框架知識。這樣相互迭代,直到能夠精通嵌入式技術(shù)。 這個方法也充分說明計算機科學是門實驗科學。 那么在學習過程中,要注意,不用學習過多的基礎(chǔ)知識,也就是說有了 C 語言和單片機的基礎(chǔ)就可以學習嵌入式的基本框架,然后就能夠成為一個合格的嵌入式工程師; 以后可以繼續(xù)深造,學習數(shù)據(jù)結(jié)構(gòu)編譯原理操作系統(tǒng)等方面的知識,并深入學習算法,從而再去學習 Linux 更深層次的框架結(jié)構(gòu),使得整體水平得到進一步的升華。 現(xiàn)在我們總結(jié)一下,把學習嵌入式技術(shù)的路線圖跟大家澄清一下,那就是: 單片機 + C 語言 -----> 學習基礎(chǔ)框架知識(包括 bootloader,Linux 內(nèi)核、文件系統(tǒng)的編譯和燒寫 -----> 再去學習 Linux 上層應用的編程,以及字符設(shè)備的驅(qū)動,學完以后就會覺得入門了,能做一些事情了----->最后深入學習計算機系統(tǒng)結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)原理等等一些知識,通過分析 Linux 系統(tǒng)源碼,直到熟練掌握嵌入式編程技術(shù)。 大家按照這個學習方法,基于 iTOP-4412 開發(fā)板提供的資料和視頻,就一定能夠?qū)W好這門技術(shù)。 03 關(guān)于裸機程序和仿真 有些用戶希望通過 ARM 開發(fā)板來學裸機程序,其實我們不建議這樣做,在 ARM 上做一些裸機程序,不是不可以,而是沒有太多價值,因為裸機程序根本發(fā)揮不了 ARM 處理器的性能,只有運行了操作系統(tǒng)才能夠充分挖掘 ARM 處理器的優(yōu)勢,更能夠保證系統(tǒng)運行的安全和穩(wěn)定性。 如果真的想學習裸機程序,單片機就夠了。從架構(gòu)上來講,單片機和 ARM 是一樣的,都是 CPU,而且編程思想也沒有多少區(qū)別,只不過 ARM 速度太快了,只有在上面跑操作系統(tǒng), 并使用多任務的編程方法才能最大化的發(fā)揮 ARM 處理器的優(yōu)勢。 在實際產(chǎn)品開發(fā)時也是這樣,幾乎沒有拿 ARM 跑裸機的方式來開發(fā)產(chǎn)品的。如果用裸機方式來編程,推薦使用單片機,這樣整體成本也會小很多,事實上也是這樣的。 早期的時候,我們在 ARM 上也做過很多裸機程序,并且用仿真器來調(diào)試;很多人,尤其從單片機轉(zhuǎn)過來的工程師,都希望學習下這種技術(shù),因為他們感覺裸機程序更親切,而直接用操作系統(tǒng)覺得很不踏實,不能夠完全掌握系統(tǒng)的運行情況;其實這種想法是不對的。我們必須在抽象的層次上來開發(fā)產(chǎn)品,逐漸轉(zhuǎn)變觀念,不能說開發(fā)一款產(chǎn)品,就一定要對每個程序的細節(jié)都非常清楚,應該學會在操作系統(tǒng)這個抽象的 軟件上來開發(fā)產(chǎn)品,這樣做才符合潮流,也是產(chǎn)品發(fā)展以及個人發(fā)展必須轉(zhuǎn)變的思路和觀念。 我們看到很多原來做單片機開發(fā)的工程師,在轉(zhuǎn)型嵌入式產(chǎn)品開發(fā)的時候面臨很多困難, 實際上觀念的轉(zhuǎn)變應該說是最大的障礙,希望引起大家的注意。 04 基于 4412 開發(fā)板的學習步驟 本節(jié)結(jié)合迅為的 iTOP-4412 開發(fā)板來介紹一下嵌入式技術(shù)的學習步驟。 大家都知道,嵌入式技術(shù)的知識面非常廣,學起來往往不知道如何下手,我們通過這一小節(jié)給大家闡述一下嵌入式技術(shù)應該從哪里開始學起,以及按照什么樣的步驟深入下去,最后順利入門,成為一個合格的嵌入式工程師。 這節(jié)的教程很重要,希望通過這次的講解能起到提綱挈領(lǐng)的作用,讓大家能夠在大量的學習資料中有一個比較清晰的學習脈絡。 前面已經(jīng)介紹過,嵌入式系統(tǒng)的學習方法,首先要掌握架構(gòu),那么什么是架構(gòu)呢,這里再強調(diào)一遍,那就是要搞清楚幾個概念:弄明白什么是 BootLoadre 引導程序,什么是 Linux 操作系統(tǒng)內(nèi)核 Kernel,什么是文件系統(tǒng)。這個很重要,如果搞不明白,直接去學其他的內(nèi)容,學起來就比較迷糊,實際上是在走彎路,這里推薦大家首先要看一篇文章,也就是迅為用戶 QQ 群的一個聊天記錄:《澄清幾個基本概念-迅為QQ 群聊天記錄》,這個文件在迅為 QQ 群的共享里有,在網(wǎng)盤里也有提供,大家可以去研讀一下。 相信大家看了這個對話以后,就應該明白 u-boot、Kernel 和文件系統(tǒng)這幾個文件的作用和意義。接下來大多數(shù)工作都是圍繞這幾個文件展開的,比如編譯環(huán)境的搭建,源代碼的編譯和燒寫, 應用程序和驅(qū)動程序的編程等等,就是說這幾個文件是貫穿我們整個嵌入式學習的始終的。把這幾個文件搞明白了,后面的學習也就有了目標,所以說搞明白這幾個文件的含義非常重要。 接下來需要我們做的是搭建編譯環(huán)境,在教程里建議大家安裝 64 位的 WIN7 系統(tǒng),并且在 WIN7 或者 WIN10 系統(tǒng)上安裝虛擬機,然后在虛擬機上再安裝 ubuntu。這里需要說明的是,大家在初學的時候要盡量按照教程里的方法一步步的來,這樣學習的效率比較高,如果你使用 XP 系統(tǒng)或者 WIN8 系統(tǒng)不是說不行,但是在安裝和編譯過程可能遇到很多別人沒有遇到的問題,解決起來就比較麻煩,所以在可能的情況下一定要按照手冊的要求來做,尤其是初學者;當然大家熟練以后可以去做下創(chuàng)新,做不同的嘗試。 安裝編譯環(huán)境是個很費事的過程,雖然說沒有太多的技術(shù)含量,但是在這個過程中也要客服很多困難,開源系統(tǒng)就是這樣,時常會遇到一些這樣那樣的問題,很多時候是不可預測的, 或許大家會覺得安裝系統(tǒng)是浪費時間很困惑,其實這個過程也是很重要的,中間要學習很多的知識,只要大家不怕折騰,這些過程當中的困難都是可以克服的,迅為公司為了讓大家少走彎路,已經(jīng)把安裝步驟做了很大程度的簡化,比如已經(jīng)做好了虛擬機的 ubuntu 鏡像,直接拷貝進去就可以使用了。 開發(fā)環(huán)境搭建起來以后,這個時候可以學習一下對源碼進行編譯,同時也可以學習一下燒寫,一步步按照教程去做就可以了。再次強調(diào)一下,所有這些工作都是圍繞我們前面所講的那三個文件進行的,也就是 Uboot, Kernel 和文件系統(tǒng)。 系統(tǒng)的編譯和燒寫都是依賴于這個開發(fā)環(huán)境的,也就是必須在虛擬機上安裝好 ubuntu, 并且把源代碼從光盤中拷貝到 ubuntu 的環(huán)境下面,只要按照教程的提示往下做就可以了。 在熟練掌握系統(tǒng)的編譯和燒寫以后,就可以進一步開始嵌入式開發(fā)了,那么這個時候建議先學習一下Linux 應用程序的設(shè)計,也就是按照教程開始逐步深入。 這個時候要按照網(wǎng)盤里的‘iTOP-4412 開發(fā)板視頻教程及其相關(guān)’里的‘嵌入式 linux 視頻’進行學習。大家在初學的時候,還是要按照這個實驗的順序來走一遍,這里強調(diào)兩個方面,來幫助大家理解: 一、第一個實驗也就是第 0 個,是制作 linux 的最小系統(tǒng),那么什么是最小系統(tǒng)呢,就是 Linux 運行的時候能跑的起來的最小系統(tǒng),也就是說我們在文件系統(tǒng)當中把圖形系統(tǒng)的內(nèi)容從這個文件系統(tǒng)里面砍掉了;在很多設(shè)備里面,比如說路由器,或者一些通訊類或者控制類的產(chǎn)品中是不需要圖形界面的,這樣我們就可以做一個簡化的 Linux 文件系統(tǒng),這時候最小系統(tǒng)的設(shè)計就排上用場了。 二、這些實驗都是通過燒寫文件系統(tǒng)的方式來測試的,其實有一種比較簡單和實用的方 法,那就是通過網(wǎng)絡文件系統(tǒng)來進行(NFS),至于什么是 NFS,以及如何搭建,大家一定要學習一下,具體可以參考第 12個試驗,就是‘實驗 12’,因為將來我們調(diào)試應用程序或者驅(qū)動都是要通過這個手段來進行的,它是公認的比較好用的調(diào)試辦法。也就是說我們這些實驗回過頭來,都是可以通過 NFS 來進行調(diào)試的,這時候就不用每次燒寫,整個調(diào)試工作變得更容易,在實際的 Linux 調(diào)試中,多數(shù)是通過這種方式來進行的。所以說大家一定要學會 NFS 的調(diào)試方法。 學完 Linux 的應用程序設(shè)計,接著應該學習一下 Linux 驅(qū)動方面的編程了。Linux 驅(qū)動程序全部掌握是非常困難的,但是要明確我們的目標是能利用 Linux 這個操作系統(tǒng)來開發(fā)產(chǎn)品。 大家都知道,Linux 的驅(qū)動分為網(wǎng)絡設(shè)備驅(qū)動、塊設(shè)備驅(qū)動以及字符類設(shè)備驅(qū)動,如前面所述,我們只需要把字符類設(shè)備的驅(qū)動掌握好就可以了。 因為在開發(fā)產(chǎn)品的時候,網(wǎng)絡設(shè)備以及塊設(shè)備驅(qū)動在開發(fā)套件里都是做好的,直接用就可以了,幾乎沒有人從頭去做,就算開發(fā)不同的網(wǎng)絡接口驅(qū)動,也是直接把現(xiàn)成寫好的驅(qū)動拿來直接調(diào)試一下。所以說塊設(shè)備和網(wǎng)絡設(shè)備不需要我們?nèi)ヌ嚓P(guān)注,但是對于字符類設(shè)備驅(qū)動就需要我們仔細研究并且完全掌握了,那么最基本的字符類驅(qū)動就是針對 GPIO 的驅(qū)動設(shè)計,這個是一定要掌握的。比如我們的產(chǎn)品增加一個步 進電機,驅(qū)動幾個開關(guān)、繼電器、采集電流電壓模擬量、擴展并對外部 RAM 內(nèi)存數(shù)據(jù)的讀取等等,都是基本的字符類的驅(qū)動,至于 RFID、GPS 模塊、GPRS 模塊、CAN 總線等等實際都是利用 Linux 本身已經(jīng)做好的驅(qū)動,歸根到底是使用串口、I2C 以及 SPI 等來實現(xiàn)的,很多開發(fā)并不需要我們做什么。對于網(wǎng)絡設(shè)備,只需要在上層做個應用程序,用 SOCKET 來實現(xiàn)數(shù)據(jù)通訊就可以了。 那么在學習這部分內(nèi)容之前呢,建議大家讀一下另一個聊天記錄:‘Linux 驅(qū)動初探_精英版 QQ 群聊天記錄.doc’,這個文檔會對大家理解驅(qū)動的架構(gòu)很有好處。 那么我們前面說到了,應用程序的調(diào)試要通過 NFS 來進行,驅(qū)動也是這樣的,而且要學會用模塊的方法來調(diào)試驅(qū)動。 我們在 Android 的視頻中比較詳細的介紹了 Linux 的底層如何構(gòu)建 LED 的驅(qū)動程序。除此之外呢,我們會在補充文檔里面跟大家說明如何使用模塊,也就是 module 的方法來調(diào)試驅(qū)動程序。掌握這些方法是很重要的。也就是說大家一定要掌握通過 module 的方法動態(tài)加載和卸載驅(qū)動來調(diào)試驅(qū)動程序。 當大家熟練學會了以上強調(diào)的 Linux 系統(tǒng)的開發(fā)技術(shù),我想大家對 Linux 的體系有了基本的了解,這個時候其實已經(jīng)算是入門了,也就是說可以嘗試去做一些產(chǎn)品,并不是說我們對 Linux 的源碼分析一遍才能真正做事情,不是那樣的,我們的目標是做產(chǎn)品,學會利用 Linux 這個操作系統(tǒng),開發(fā)出目標產(chǎn)品! |