udev機(jī)制創(chuàng)建設(shè)備文件實(shí)現(xiàn)過程
1.驅(qū)動(dòng)注冊
通過內(nèi)核提供的驅(qū)動(dòng)注冊api獲取設(shè)備號(hào),為創(chuàng)建設(shè)備文件提供設(shè)備號(hào)
2.創(chuàng)建設(shè)備類
通過內(nèi)核提供的class_create( )創(chuàng)建一個(gè)設(shè)備類,向上提交目錄信息:構(gòu)造struct class 變量并初始化,創(chuàng)建一個(gè)設(shè)備類的目錄:/sys/class/類名文章來源:http://www.zghlxwxcb.cn/news/detail-708170.html
API:
struct class * class_create(struct module *owner,const char *name );
功能:申請一個(gè)設(shè)備類并初始化,向上提交目錄信息
參數(shù):
owner:指向當(dāng)前內(nèi)核模塊自身的一個(gè)模塊指針,填寫THIS_MODULE
name:向上提交的目錄名
返回值:成功返回申請的struct class對象空間首地址,失敗返回錯(cuò)誤碼指針
在內(nèi)核空間最頂層會(huì)預(yù)留4K空間,當(dāng)struct class函數(shù)調(diào)用失敗后函數(shù)會(huì)返回一個(gè)指向這4K空間的指針
bool __must_check IS_ERR(__force const void *ptr)
功能:判斷指針是否指向4K預(yù)留空間
參數(shù):要判斷的指針
返回值:如果指著指向4K預(yù)留空間返回邏輯真,否則返回邏輯假
long __must_check PTR_ERR(__force const void *ptr)
功能:通過錯(cuò)誤碼指針得到錯(cuò)誤碼
3.創(chuàng)建設(shè)備對象
通過內(nèi)核提供的device_create( )以及獲取的設(shè)備號(hào)創(chuàng)建該類設(shè)備中的一個(gè)設(shè)備,向上提交該設(shè)備節(jié)點(diǎn)信息:構(gòu)造struct device 變量并初始化,在設(shè)備類目錄下創(chuàng)建設(shè)備信息文件:/sys/class/類名/設(shè)備信息文件文章來源地址http://www.zghlxwxcb.cn/news/detail-708170.html
API:
struct device *device_create(struct class *class, struct device *parent,dev_t devt, void *drvdata, const char *fmt, ...)
功能:創(chuàng)建一個(gè)設(shè)備對象,向上提交設(shè)備節(jié)點(diǎn)信息
參數(shù):
cls:向上提交目錄時(shí)得到的類對象指針
parent:當(dāng)前申請的對象前一個(gè)節(jié)點(diǎn)的地址,不知道就填 NULL
devt:設(shè)備號(hào) 主設(shè)備號(hào)<<20|次設(shè)備號(hào)
MKDEV(主設(shè)備號(hào),次設(shè)備號(hào)):根據(jù)主設(shè)備號(hào)和次設(shè)備號(hào)得到設(shè)備號(hào)
MAJOR(dev):根據(jù)設(shè)備號(hào)獲取主設(shè)備號(hào)
MINOR(dev):根據(jù)設(shè)備號(hào)獲取次設(shè)備號(hào)
dridata:申請的device對象的私有數(shù)據(jù),填寫NULL
fmt:向上提交的設(shè)備節(jié)點(diǎn)名
...:不定長參數(shù)
返回值:成功返回申請到的device對象首地址,失敗返回錯(cuò)誤碼指針,指向4K預(yù)留空間
4.內(nèi)核自動(dòng)產(chǎn)生hotplug 事件
5.hotplug事件通知udev進(jìn)程
6.udev進(jìn)程在/sys/class/類名/設(shè)備信息文件目錄下查找設(shè)備信息,在/dev下創(chuàng)建設(shè)備文件
到了這里,關(guān)于驅(qū)動(dòng)開發(fā) day3 9/12的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!