嵌入式Linux驅(qū)動(dòng)開發(fā)課件.ppt

嵌入式Linux驅(qū)動(dòng)開發(fā)課件.ppt

ID:57064618

大?。?.82 MB

頁數(shù):39頁

時(shí)間:2020-07-30

嵌入式Linux驅(qū)動(dòng)開發(fā)課件.ppt_第1頁
嵌入式Linux驅(qū)動(dòng)開發(fā)課件.ppt_第2頁
嵌入式Linux驅(qū)動(dòng)開發(fā)課件.ppt_第3頁
嵌入式Linux驅(qū)動(dòng)開發(fā)課件.ppt_第4頁
嵌入式Linux驅(qū)動(dòng)開發(fā)課件.ppt_第5頁
資源描述:

《嵌入式Linux驅(qū)動(dòng)開發(fā)課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、嵌入式Linux驅(qū)動(dòng)開發(fā)課程安排Linux設(shè)備驅(qū)動(dòng)概念字符設(shè)備驅(qū)動(dòng)開發(fā)設(shè)備驅(qū)動(dòng)硬件操作設(shè)備操作層次Linux系統(tǒng)軟件層次應(yīng)用程序庫內(nèi)核驅(qū)動(dòng)程序的關(guān)系什么是設(shè)備驅(qū)動(dòng)程序1作為操作系統(tǒng)的一部分(OS=Kernel+DeviceDriver)向上為Linux系統(tǒng)提供訪問硬件統(tǒng)一調(diào)用接口向下用于控制硬件:與Arm裸機(jī)程序一樣,通過讀寫硬件寄存器達(dá)到控制硬件的目的2、驅(qū)動(dòng)程序的運(yùn)行是被動(dòng)的驅(qū)動(dòng)只是告訴內(nèi)核”我在這里,我能做這些工作”:向內(nèi)核注冊這些工作何時(shí)開始,取決于應(yīng)用程序:應(yīng)用觸發(fā)驅(qū)動(dòng)設(shè)備驅(qū)動(dòng)分類1、

2、字符設(shè)備驅(qū)動(dòng)設(shè)備以字節(jié)流方式訪問(以字節(jié)為單位讀寫)字符設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)了open、close、read、write等系統(tǒng)調(diào)用應(yīng)用程序通過設(shè)備文件(如/dev/ttySAC0)訪問設(shè)備設(shè)備驅(qū)動(dòng)分類2、塊設(shè)備驅(qū)動(dòng)設(shè)備上的數(shù)據(jù)以塊的方式存放(如NAND上的數(shù)據(jù)以頁為單位)塊設(shè)備驅(qū)動(dòng)程序也向用戶層提供open、close、read、wrtie應(yīng)用通過設(shè)備文件(如/dev/sda1)來訪問設(shè)備塊設(shè)備驅(qū)動(dòng)特別之處:(1)、操作硬件的實(shí)現(xiàn)方式不一樣:先將數(shù)據(jù)組織成塊,再操作設(shè)備(2)、數(shù)據(jù)塊上的數(shù)據(jù)按照一定的格

3、式組織:存放文件系統(tǒng),實(shí)現(xiàn)mount設(shè)備驅(qū)動(dòng)分類3、網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)設(shè)備上的數(shù)據(jù)以不固定大小的幀輸入與輸出沒有/dev上對(duì)應(yīng)的設(shè)備文件,不通過open、read、write操作系統(tǒng)為網(wǎng)絡(luò)設(shè)備訪問分配唯一接口(如eth0)為應(yīng)用層提供一套數(shù)據(jù)包傳輸函數(shù)訪問接口(SOCKET)設(shè)備驅(qū)動(dòng)架構(gòu)設(shè)備驅(qū)動(dòng)開發(fā)步驟1、查看原理圖、數(shù)據(jù)手冊,了解設(shè)備的操作方法2、在內(nèi)核中找到相近的驅(qū)動(dòng)程序,以它為模板開發(fā)3、實(shí)現(xiàn)驅(qū)動(dòng)程序的初始化,并向內(nèi)核注冊4、按照內(nèi)核規(guī)定的驅(qū)動(dòng)框架,實(shí)現(xiàn)相關(guān)操作函數(shù)(如open、read、wri

4、te)5、編譯驅(qū)動(dòng)程序到內(nèi)核中,或者編譯成模塊并掛載(insmod)到內(nèi)核直接編譯進(jìn)內(nèi)核將驅(qū)動(dòng)模塊源碼合入內(nèi)核源碼設(shè)備驅(qū)動(dòng)程序應(yīng)包含在drivers子目錄首先確認(rèn)是否存在于設(shè)備驅(qū)動(dòng)程序特性相似的目錄名存在則插入相應(yīng)目錄,否則字符類型插入char目錄,塊類型插入block目錄,網(wǎng)絡(luò)類型插入net目錄直接編譯進(jìn)內(nèi)核修改內(nèi)核編譯選項(xiàng)文件Linux內(nèi)核支持使用內(nèi)核編譯選項(xiàng)包含到內(nèi)核中的功能makemenuconfig讀入這些內(nèi)核編譯選項(xiàng)文件來配置內(nèi)核2.6內(nèi)核編譯選項(xiàng)文件為KConfig進(jìn)入合入了驅(qū)動(dòng)模

5、塊的目錄,修改改目錄下的KConfig,使得合入的驅(qū)動(dòng)能在配置項(xiàng)中顯示直接編譯進(jìn)內(nèi)核Kconfig選項(xiàng)文件語法configHELLO_WORLDbool“helloworld”helpThisisademomakemenuconfig選中“helloworld”,配置完成后在.config中加入CONFIG_HELLO_WORLD=y選項(xiàng)直接編譯進(jìn)內(nèi)核修改內(nèi)核源代碼中的MakefileMakefile指定了驅(qū)動(dòng)程序的編譯規(guī)則,使得驅(qū)動(dòng)程序能包含到內(nèi)核image中Makefile根據(jù)makemen

6、uconfig配置設(shè)定的編譯條件變量,決定是要把特定源代碼編譯成模塊還是包含到內(nèi)核中,或者是清除。進(jìn)入合入了驅(qū)動(dòng)模塊的目錄,修改改目錄下的Makefile,使得合入的驅(qū)動(dòng)源碼能編譯進(jìn)內(nèi)核直接編譯進(jìn)內(nèi)核Makefile文件語法Obj-$(CONFIG_HELLO_WORLD)+=hello_world.o根據(jù)配置,CONFIG_HELLO_WORLD可以設(shè)置為“y”、“m”、“n”或者“”根據(jù)內(nèi)核編譯選項(xiàng)的符號(hào)決定包含到內(nèi)核中或者編譯為模塊,或者不編譯。直接編譯進(jìn)內(nèi)核確認(rèn)合入內(nèi)核的驅(qū)動(dòng)在內(nèi)核啟動(dòng)時(shí)

7、自動(dòng)運(yùn)行重新編譯并啟動(dòng)新內(nèi)核,dmesg=>確認(rèn)“helloworld”已打印出來帶__int標(biāo)志的函數(shù)被放入初始化代碼段,內(nèi)核會(huì)依次調(diào)用初始化代碼段的函數(shù)模塊范例由HelloWrold開始#include#includestaticinthello_init(void){printk(KERN_WARNING"Hello,world!");return0;}staticvoidhello_exit(void){printk(KER

8、N_INFO"Goodbye,world");}module_init(hello_init);module_exit(hello_exit);與應(yīng)用程序的區(qū)別?(main函數(shù)?printk?)模塊范例1、模塊加載函數(shù)(必需)安裝模塊時(shí)被系統(tǒng)自動(dòng)調(diào)用的函數(shù),通過module_init宏來指定2、模塊卸載函數(shù)(必需)卸載模塊時(shí)被系統(tǒng)自動(dòng)調(diào)用的函數(shù),通過module_exit宏來指定模塊范例3、使用Makefile編譯內(nèi)核模塊模塊范例加載insmod(insmodhello.ko)卸載rmmod

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。