招生熱線
0755-86191118 0755-86191118
我的位置: 首頁 > 學(xué)習(xí)專區(qū) > 網(wǎng)絡(luò)工程 > Linux設(shè)備驅(qū)動:如何寫字符設(shè)備驅(qū)動(1)

Linux設(shè)備驅(qū)動:如何寫字符設(shè)備驅(qū)動(1)

2016-03-04 16:25:48
來源:
[導(dǎo)讀] 如何寫Linux字符設(shè)備驅(qū)動?首先我們來分解一下字符設(shè)備驅(qū)動都有那些結(jié)構(gòu)或者方法組成,也就是說實現(xiàn)一個可以使用的字符設(shè)備驅(qū)動我們必須做些什么工作。1、主設(shè)備號和次設(shè)備號對于字符設(shè)備的訪問是通過文件系統(tǒng)中的設(shè)備名稱進(jìn)行的。他們通常位于 dev目錄下。如下:其中b代表塊設(shè)備,c
如何寫Linux字符設(shè)備驅(qū)動?首先我們來分解一下字符設(shè)備驅(qū)動都有那些結(jié)構(gòu)或者方法組成,也就是說實現(xiàn)一個可以使用的字符設(shè)備驅(qū)動我們必須做些什么工作。
1、主設(shè)備號和次設(shè)備號
對于字符設(shè)備的訪問是通過文件系統(tǒng)中的設(shè)備名稱進(jìn)行的。他們通常位于/dev目錄下。如下:
其中b代表塊設(shè)備,c代表字符設(shè)備。對于普通文件來說,ls -l會列出文件的長度,而對于設(shè)備文件來說,上面的7,5,4等代表的是對應(yīng)設(shè)備的主設(shè)備號,而后面的0,1,2,10等則是對應(yīng)設(shè)備的次設(shè)備號。那么主設(shè)備號和次設(shè)備號分別代表什么意義呢?一般情況下,可以這樣理解,主設(shè)備號標(biāo)識設(shè)備對應(yīng)的驅(qū)動程序,也就是說1個主設(shè)備號對應(yīng)一個驅(qū)動程序。當(dāng)然,現(xiàn)在也有多個驅(qū)動程序共享主設(shè)備號的情況。而次設(shè)備號有內(nèi)核使用,用于確定/dev下的設(shè)備文件對應(yīng)的具體設(shè)備。舉一個例子,虛擬控制臺和串口終端有驅(qū)動程序4管理,而不同的終端分別有不同的次設(shè)備號。
1.1、設(shè)備編號的表達(dá)
在內(nèi)核中,dev_t用來保存設(shè)備編號,包括主設(shè)備號和次設(shè)備號。在2.6的內(nèi)核版本種,dev_t是一個32位的數(shù),其中12位用來表示主設(shè)備號,其余20位用來標(biāo)識次設(shè)備號。
通過dev_t獲取主設(shè)備號和次設(shè)備號使用下面的宏:
MAJOR(dev_t dev);
MINOR(dev_t dev);
相反,通過主設(shè)備號和次設(shè)備號轉(zhuǎn)換為dev_t類型使用:
MKDEV(int major, int minor);
1.2、分配和釋放設(shè)備編號
在構(gòu)建一個字符設(shè)備之前,驅(qū)動程序首先要獲得一個或者多個設(shè)備編號,這類似一個營業(yè)執(zhí)照,有了營業(yè)執(zhí)照才在內(nèi)核中正常工作營業(yè)。完成此工作的函數(shù)是:
int register_chrdev_region(dev_t first, unsigned int count, const char *name);
first是要分配的設(shè)備編號范圍的起始值。count是連續(xù)設(shè)備的編號的個數(shù)。name是和該設(shè)備編號范圍關(guān)聯(lián)的設(shè)備名稱,他將出現(xiàn)在/proc/devices和sysfs中。此函數(shù)成功返回0,失敗返回負(fù)的錯誤碼。此函數(shù)是在已知主設(shè)備號的情況下使用,在未知主設(shè)備號的情況下,我們使用下面的函數(shù):
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, const char* name);
dev用于輸出申請到的設(shè)備編號,firstminor要使用的第一個此設(shè)備編號。
在不使用時需要釋放這些設(shè)備編號,已提供其他設(shè)備程序使用:
void unregister_chrdev_region(dev_t dev, unsigned int count);
此函數(shù)多在模塊的清除函數(shù)中調(diào)用。
分配到設(shè)備編號之后,我們只是拿到了營業(yè)執(zhí)照,雖說現(xiàn)在已經(jīng)準(zhǔn)備的差不多了,但是我們只是從內(nèi)核中申請到了設(shè)備號,應(yīng)用程序還是不能對此設(shè)備作任何事情,我們需要一個簡單的函數(shù)來把設(shè)備編號和此設(shè)備能實現(xiàn)的功能連接起來,這樣我們的模塊才能提供具體的功能.這個操作很簡單,稍后就會提到,下一篇我們再來介紹幾個重要的數(shù)據(jù)結(jié)構(gòu)。
評論
相關(guān)文章
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
孕妇动漫精品国产一区二区三区 | 日韩艳情国产在线观看 | 午夜福利免费区在线观看 | 亚洲日韩一区精品 | 午夜福利理论片中文字幕 | 亚洲日韩欧美国产高清αv 亚洲欧美高清在线观 |