Linux字符設(shè)備驅(qū)動程序設(shè)計.ppt

Linux字符設(shè)備驅(qū)動程序設(shè)計.ppt

ID:55597078

大小:267.00 KB

頁數(shù):45頁

時間:2020-05-20

Linux字符設(shè)備驅(qū)動程序設(shè)計.ppt_第1頁
Linux字符設(shè)備驅(qū)動程序設(shè)計.ppt_第2頁
Linux字符設(shè)備驅(qū)動程序設(shè)計.ppt_第3頁
Linux字符設(shè)備驅(qū)動程序設(shè)計.ppt_第4頁
Linux字符設(shè)備驅(qū)動程序設(shè)計.ppt_第5頁
資源描述:

《Linux字符設(shè)備驅(qū)動程序設(shè)計.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在PPT專區(qū)-天天文庫。

1、Linux字符設(shè)備驅(qū)動程序設(shè)計劉淼threewater@up-tech.com2006.3.21linux的驅(qū)動程序Linux下對外設(shè)的訪問只能通過驅(qū)動程序Linux對于驅(qū)動程序有統(tǒng)一的接口,以文件的形式定義系統(tǒng)的驅(qū)動程序:Open、Release、read、write、ioctl…驅(qū)動程序是內(nèi)核的一部分,可以使用中斷、DMA等操作驅(qū)動程序需要在用戶態(tài)和內(nèi)核態(tài)之間傳遞數(shù)據(jù)uClinux下可以在應(yīng)用層直接訪問外設(shè),操作寄存器口,但是無法處理中斷——不推薦使用對于復(fù)雜的應(yīng)用可以考慮是用mmap內(nèi)核功能的劃分進程管理(進程之間的通訊與同步)內(nèi)存

2、管理(malloc/free)文件系統(tǒng)設(shè)備控制網(wǎng)絡(luò)功能(網(wǎng)絡(luò)通訊協(xié)議等)Linux下設(shè)備和模塊的分類按照上述系統(tǒng)內(nèi)核的功能,Linux中把系統(tǒng)的設(shè)備定義成如下三類:字符設(shè)備塊設(shè)備網(wǎng)絡(luò)設(shè)備Linux下的設(shè)備Linux的設(shè)備以文件的形式存在于/dev目錄下設(shè)備文件是特殊文件,使用ls/dev-l命令可以看到:crw-------1rootroot10,7Aug312002amigamouse1crw-------1rootroot10,134Aug312002apm_biosbrw-rw----1rootdisk29,0Aug312002az

3、tcd主設(shè)備號和次設(shè)備號主設(shè)備號標識設(shè)備對應(yīng)的驅(qū)動程序一個驅(qū)動程序可以控制若干個設(shè)備,次設(shè)備號提供了一種區(qū)分它們的方法系統(tǒng)增加一個驅(qū)動程序就要賦予它一個主設(shè)備號。這一賦值過程在驅(qū)動程序的初始化過程中intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);創(chuàng)建設(shè)備節(jié)點設(shè)備已經(jīng)注冊到內(nèi)核表中,對于設(shè)備的訪問通過設(shè)備文件(設(shè)備文件與設(shè)備驅(qū)動程序的主設(shè)備號匹配),內(nèi)核會調(diào)用驅(qū)動程序中的正確函數(shù)給程序一個它們可以請求設(shè)備驅(qū)動程序的名字。這個名字必須

4、插入到/dev目錄中,并與驅(qū)動程序的主設(shè)備號和次設(shè)備號相連使用mknod在文件系統(tǒng)上創(chuàng)建一個設(shè)備節(jié)點mknod/dev/mydevicec2540動態(tài)分配設(shè)備號在Documentation/device.txt文件中可以找到已經(jīng)靜態(tài)分配給大部分設(shè)備的列表由于許多數(shù)字已經(jīng)分配了,為新設(shè)備選擇一個唯一的號碼是很困難的如果調(diào)用register_chrdev時的major為零,函數(shù)就會選擇一個空閑號碼并做為返回值返回動態(tài)分配的問題動態(tài)分配的主設(shè)備號不能保證總是一樣的,無法事先創(chuàng)建設(shè)備節(jié)點可以從/proc/devices讀取cat/proc/dev

5、ices利用腳本動態(tài)創(chuàng)建設(shè)備文件節(jié)點設(shè)備管理的問題如今,Linux支持很多不同種類的硬件。這意味著/dev中都有數(shù)百個特殊文件來表示所有這些設(shè)備。而且,這些特殊文件中大多數(shù)甚至不會映射到系統(tǒng)中存在的設(shè)備上使用devfs在Linux2.4的內(nèi)核里引入了devfs來解決 linux下設(shè)備文件管理的問題在驅(qū)動程序中通過devfs_register()函數(shù)創(chuàng)建設(shè)備文件系統(tǒng)的節(jié)點系統(tǒng)啟動的時候mount設(shè)備文件系統(tǒng)所有需要的設(shè)備節(jié)點都由內(nèi)核自動管理。 /dev目錄下只有掛載的設(shè)備Linux2.6內(nèi)核與devfsLinux2.6內(nèi)核引入了sysfs文

6、件系統(tǒng)為每個系統(tǒng)的硬件樹進行分級處理Devfs在Linux2.6中被標記為舍棄的特性(在Linux2.6.15及以后的版本則取消了對它的支持),而使用udev。維護動態(tài)設(shè)備從sysfs獲得的信息,可以提供對特定設(shè)備的固定設(shè)備名。對于熱插拔的設(shè)備,這尤其重要udev是在用戶空間的腳本文件,這很容易被編輯和修改為了保證舊應(yīng)用程序的兼容性,在嵌入式系統(tǒng)中,是用devfs還是一個好方法。即使在Linux2.6.15內(nèi)核以后,也可以通過ndevfs(nanodevfs)補丁提供對devfs特性的兼容。Linux內(nèi)核硬件驅(qū)動標準模板#include<

7、linux/module.h>#include#includestaticint__initname_of_initialization_routine(void){/*codehere*/}staticvoid__exitname_of_cleanup_routine(void){/*codehere*/}module_init(name_of_initialization_routine);module_exit(name_of_cleanup_routine);module

8、_init(1)include/linux/init.h中#definemodule_init(x)__initcall(x);#define__initcall(fn)staticinit

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

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

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