
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、linux字符設(shè)備驅(qū)動(dòng)/*linux字符設(shè)備驅(qū)動(dòng)源代碼sd.c*/ ilude linux/init.h /*模塊頭文件*/ include linux/mole.h include linux/types.h /*dev_t頭文件*/ include linux/kdev_t.h /*major和minor宏頭文件*/ include linux/fs.h /*register_ch_region等函數(shù) _operations結(jié)構(gòu)體*/ include linux/cdev.h /*suct cdev結(jié)構(gòu)體*/ include asm/uaccess.h /*copy_to_user函數(shù)*/
2、 define device_name sc /*定義設(shè)備名*/ define device_major 250 struct cdev my_cdev; int scdd_open(struct inode *inode,structfile *filp) return0; int scdd_close(struct inode *inode,structfile *filp) return0; ssize_t scdd_read(struct file *filp,char_user *buff,size_t size,loff_t *offp) intleft; chardata=1;
3、for(left=size;left left-) /*拷貝數(shù)據(jù)到用戶(hù)空間*/ copy_to_user(buff, data,1); buff returnsize; ssize_t scdd_(struct file *filp,char_user *buff,size_t size,loff_t *offp) return0; /*file_operations結(jié)構(gòu)體*/ struct file_operations scdd_fops= .owner=this_module, .read=scdd_read, .write=scdd_write, .open=scdd_open, .r
4、elease=scdd_close, ; ic int _init scdd_init(vo) /*模塊初始化函數(shù)*/ intsmajor; smajor=device_major; dev_tdev_n=mkdev(smajor,0); /*申請(qǐng)?jiān)O(shè)備號(hào)*/ if(!register_chrdev_region(dev_n,1,device_name) /*靜態(tài)申請(qǐng)*/ printk( registerccessn ee gotoregister_error; /*else /*動(dòng)態(tài)申請(qǐng)*/ /*alloc_chrdev_region( dev_n,0,1,device_name); smaj
5、or=major(dev_n); */ /*初始化cdev結(jié)構(gòu)體*/ cdev_init( my_cdev, scdd_fops); my_cdev.owner=this_module; my_cdev.ops= scdd_fops; /*注冊(cè)字符設(shè)備*/ cdev_add( my_cdev,dev_n,1); return0; register_error: unregister_chrdev_region(mkdev(device_major,0),1); return0; static void _it scdd_exit(void) /*模塊卸載函數(shù)*/ cdev_del( my_cd
6、ev); unregister_chrdev_region(mkdev(device_major,0),1); module_init(scdd_init); module_exit(scdd_exit); module_license( dual bsd/gpl 這個(gè)程序只是容易演示字符注冊(cè)的一個(gè)完整過(guò)程,并不帶有復(fù)雜的操作,調(diào)用read時(shí)向用戶(hù)空間寫(xiě)全1 要點(diǎn): 1.設(shè)備號(hào),主設(shè)備號(hào)用來(lái)標(biāo)識(shí)設(shè)備所對(duì)應(yīng)的驅(qū)動(dòng)程序,同一個(gè)驅(qū)動(dòng)程序可以對(duì)應(yīng)多個(gè)設(shè)備,次設(shè)備號(hào)就是用來(lái)區(qū)別采納同一個(gè)驅(qū)動(dòng)程序的不同設(shè)備文件。 內(nèi)核中采納dev_t來(lái)描述設(shè)備號(hào),其實(shí)dev_t實(shí)質(zhì)為unsign int類(lèi)型,其中高12位
7、為主設(shè)備號(hào),低20位為次設(shè)備號(hào),其定義在linux/types.h中 從dev_t中分解出主設(shè)備號(hào)和次設(shè)備號(hào) major(dev_t dev) minor(dev_t dev) 將主設(shè)備號(hào)和次設(shè)備號(hào)轉(zhuǎn)換成dev_t類(lèi)型 mkdev(intmajor,int minor) 2.申請(qǐng)?jiān)O(shè)備號(hào) 靜態(tài)申請(qǐng),函數(shù)定義在linux/fs.h中 int register_chrdev_region(dev_t from,unsigned count,const char *name) from是申請(qǐng)?jiān)O(shè)備號(hào)起始 ,from次設(shè)備號(hào)常常被置成0,count是所哀求延續(xù)設(shè)備號(hào)個(gè)數(shù),name是該設(shè)備號(hào)范圍關(guān)聯(lián)的名稱(chēng),
8、它將浮現(xiàn)在/proc/device和sysfs中。 分配勝利返回0,錯(cuò)誤狀況下,將返回一個(gè)負(fù)的錯(cuò)誤碼,并且不能用法所哀求的設(shè)備號(hào)。 動(dòng)態(tài)申請(qǐng) int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name) 申請(qǐng)的設(shè)備號(hào)將保存在dev中,baseminor為所申請(qǐng)的第一個(gè)次設(shè)備號(hào) 無(wú)論哪種方式申請(qǐng)?jiān)O(shè)備號(hào),不用法時(shí)要釋放設(shè)備號(hào) void unregister_chrdev_region(dev_t first,unsigned int count) 3.三個(gè)重要的結(jié)構(gòu) struct
9、file_operations struct file struct inode struct file_operations一個(gè)函數(shù)指針集合,定義能在設(shè)備上舉行的操作,常用的有: int (*open)(structinode *inode,stuuct file *filep) void (*release)(structinode *inode,struct file *filep) ssize_t(*read)(struct file *filep,char _user *buff,size_t size,loff_t *offp) ssize_t(*write)(struct fil
10、e *filep,char _user *buff,size_t seze,loff_t * offp) int(*ioctl)(struct inode *inode,struct file *filep,unsigned int cmd,unsigned longarg) off_t(*llseek)(struct file *filp,loff_t,int) struct file表示一個(gè)打開(kāi)的文件,一個(gè)文件被打開(kāi)十次,則有10個(gè)structfile結(jié)構(gòu) struct file結(jié)構(gòu)成員有: mode_t f_mode 文件模式,例如:可讀可寫(xiě) lofft_t f_pos 當(dāng)前讀/寫(xiě)位置
11、struct file_operations *f_op 與文件相關(guān)操作,執(zhí)行open操作時(shí)對(duì)這個(gè)指針賦 void *private_data在open時(shí)置為null,用于跨系統(tǒng)調(diào)用時(shí)保存十分實(shí)用的資源 struct inode用來(lái)記錄文件的物理上的信息,一個(gè)文件被打開(kāi)10次,但惟獨(dú)一個(gè)structinode結(jié)構(gòu),struct inode結(jié)構(gòu)成員如下: dev_t i_rdev 用來(lái)保存設(shè)備號(hào) struct cdev*i_cdev 指向字符設(shè)備結(jié)構(gòu)struct cdev的指針 4.字符設(shè)備的注冊(cè) 內(nèi)核用法struct cdev結(jié)構(gòu)表示字符設(shè)備,定義在linux/cdev.h中。 初始化cdev
12、結(jié)構(gòu)體有兩種方式 靜態(tài): struct cdev my_cdev; cdev_init( my_cdev, fops); my_cdev.owner = this_module; 動(dòng)態(tài)(就是通過(guò)kmalloc去申請(qǐng)cdev結(jié)構(gòu)): struct cdev *my_cdev = cdev_alloc(); my_cdev- ops= my_fops; my_cdev.owner= this_module; 注冊(cè) int cdev_add(struct cdev *dev,dev_t num,unsigned int count) num是設(shè)備號(hào),count常常取1 注銷(xiāo) void cdev_del(struct cd
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 職業(yè)病賠償標(biāo)準(zhǔn)考核試卷
- 全球家電產(chǎn)品認(rèn)證要求考核試卷
- 融資政策精準(zhǔn)對(duì)接考核試卷
- 內(nèi)河運(yùn)輸企業(yè)盈利能力研究考核試卷
- 樂(lè)器批發(fā)商渠道合作效果評(píng)估方法考核試卷
- 2025年中國(guó)PU剎車(chē)腳輪數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)IC一卡通管理系統(tǒng)數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025年中國(guó)49鍵電子琴數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)107膠數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025至2030年中國(guó)高爾夫柄市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 北京化工大學(xué)研究生課程-碳材料工藝學(xué)第一講
- 大學(xué)語(yǔ)文試題及答案河北
- 2025年中式烹調(diào)師(技師)理論考試筆試試題(50題)含答案
- 種植二期手術(shù)護(hù)理配合
- 醫(yī)學(xué)資料 2023版《中國(guó)慢性腎臟病患者高血壓管理指南》解讀學(xué)習(xí)課件
- 數(shù)學(xué)-2025屆安徽省合肥二模試題+答案
- 中小學(xué)生校外托管項(xiàng)目可行性研究報(bào)告
- 體檢中心質(zhì)量控制指南
- 雙重預(yù)防機(jī)制工作實(shí)施方案
- 2025無(wú)錫輔警考試題庫(kù)
- 2025年標(biāo)準(zhǔn)離婚協(xié)議書(shū)范本完整版
評(píng)論
0/150
提交評(píng)論