字符設(shè)備驅(qū)動(dòng)程序

字符設(shè)備驅(qū)動(dòng)程序

ID:41954794

大?。?.65 MB

頁數(shù):44頁

時(shí)間:2019-09-05

字符設(shè)備驅(qū)動(dòng)程序_第1頁
字符設(shè)備驅(qū)動(dòng)程序_第2頁
字符設(shè)備驅(qū)動(dòng)程序_第3頁
字符設(shè)備驅(qū)動(dòng)程序_第4頁
字符設(shè)備驅(qū)動(dòng)程序_第5頁
資源描述:

《字符設(shè)備驅(qū)動(dòng)程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、上章回顧Linux設(shè)備驅(qū)動(dòng)的簡介,以及分類字符設(shè)備塊設(shè)備網(wǎng)絡(luò)接口模塊的應(yīng)用如何編寫模塊模塊相關(guān)的宏模塊和應(yīng)用程序的區(qū)別編譯和裝載內(nèi)核模塊字符設(shè)備驅(qū)動(dòng)程序第2章預(yù)習(xí)檢查什么是主設(shè)備號(hào)和次設(shè)備號(hào)?字符設(shè)備驅(qū)動(dòng)程序的基本成員函數(shù)有哪些?本章目標(biāo)掌握字符設(shè)備驅(qū)動(dòng)程序的基本結(jié)構(gòu)和開發(fā)方法掌握用戶空間調(diào)用設(shè)備驅(qū)動(dòng)程序的方法本章結(jié)構(gòu)字符設(shè)備驅(qū)動(dòng)基本結(jié)構(gòu)字符設(shè)備驅(qū)動(dòng)程序用戶空間調(diào)用設(shè)備驅(qū)動(dòng)程序添加驅(qū)動(dòng)程序到內(nèi)核內(nèi)核配置和編譯方法添加驅(qū)動(dòng)程序到內(nèi)核中主要概念和結(jié)構(gòu)體實(shí)例字符驅(qū)動(dòng)的主要組成2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)字符設(shè)備開發(fā)的基本步驟確定主設(shè)

2、備號(hào)和次設(shè)備號(hào)實(shí)現(xiàn)字符驅(qū)動(dòng)程序?qū)崿F(xiàn)file_operations結(jié)構(gòu)體實(shí)現(xiàn)初始化函數(shù),注冊字符設(shè)備實(shí)現(xiàn)銷毀函數(shù),釋放字符設(shè)備創(chuàng)建設(shè)備文件節(jié)點(diǎn)2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)什么是主設(shè)備號(hào)/次設(shè)備號(hào)主設(shè)備號(hào)是內(nèi)核識(shí)別一個(gè)設(shè)備的標(biāo)識(shí)。整數(shù)(占12bits),范圍從0到4095,通常使用1到255次設(shè)備號(hào)由內(nèi)核使用,用于正確確定設(shè)備文件所指的設(shè)備。整數(shù)(占20bits),范圍從0到1048575,一般使用0到2552-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)設(shè)備編號(hào)的內(nèi)部表達(dá)dev_t類型(32位):用來保存設(shè)備編號(hào)(包括主設(shè)備號(hào)(12位)和次設(shè)備號(hào)

3、(20位))從dev_t獲得主設(shè)備號(hào)和次設(shè)備號(hào):MAJOR(dev_t);MINOR(dev_t);將主設(shè)備號(hào)和次設(shè)備號(hào)轉(zhuǎn)換成dev_t類型:MKDEV(intmajor,intminor);2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)分配主設(shè)備號(hào)手工分配主設(shè)備號(hào):找一個(gè)內(nèi)核沒有使用的主設(shè)備號(hào)來使用。#includeintregister_chrdev_region(dev_tfirst,unsignedintcount,char*name);要分配的設(shè)備編號(hào)范圍的起始值,次設(shè)備號(hào)經(jīng)常為0所請求的連續(xù)設(shè)備編號(hào)的個(gè)數(shù)和該

4、編號(hào)范圍關(guān)聯(lián)的設(shè)備名稱2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)動(dòng)態(tài)分配主設(shè)備號(hào):#includeintalloc_chrdev_resion(dev_t*dev,unsignedintfirstminor,unsignedintcount,char*name);輸出的設(shè)備號(hào)要使用的被請求的第一個(gè)次設(shè)備號(hào)2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)釋放設(shè)備號(hào)voidunregister_chrdev_region(dev_tfirst,unsignedintcount);通常在模塊的清除函數(shù)中調(diào)用。2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)實(shí)

5、現(xiàn)字符驅(qū)動(dòng)程序cdev結(jié)構(gòu)體structcdev{structkobjectkobj;/*內(nèi)嵌的kobject對象*/structmodule*owner;/*所屬模塊*/structfile_operations*ops;/*文件操作結(jié)構(gòu)體*/structlist_headlist;dev_tdev;/*設(shè)備號(hào)*/unsignedintcount;};2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)操作cdev的函數(shù)voidcdev_init(structcdev*,structfile_operations*);structcdev*cdev

6、_alloc(void);intcdev_add(structcdev*,dev_t,unsigned);voidcdev_del(structcdev*);用于初始化cdev的成員,并建立cdev和file_operations之間的連接分別向系統(tǒng)刪除一個(gè)cdev,完成字符設(shè)備的注銷,通常在模塊的卸載函數(shù)中調(diào)用分別向系統(tǒng)添加一個(gè)cdev,完成字符設(shè)備的注冊,通常在模塊加載函數(shù)中調(diào)用函數(shù)用于動(dòng)態(tài)申請一個(gè)cdev內(nèi)存2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)file_operations結(jié)構(gòu)體字符驅(qū)動(dòng)和內(nèi)核的接口:在include/linux

7、/fs.h定義字符驅(qū)動(dòng)只要實(shí)現(xiàn)一個(gè)file_operations結(jié)構(gòu)體并注冊到內(nèi)核中,內(nèi)核就有了操作此設(shè)備的能力。2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)file_operations的主要成員:structmodule*owner:指向模塊自身open:打開設(shè)備release:關(guān)閉設(shè)備read:從設(shè)備上讀數(shù)據(jù)write:向設(shè)備上寫數(shù)據(jù)ioctl:I/O控制函數(shù)llseek:定位讀寫指針mmap:映射設(shè)備空間到進(jìn)程的地址空間2-1字符設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)file結(jié)構(gòu)體file結(jié)構(gòu):file_operations結(jié)構(gòu)相關(guān)的一個(gè)結(jié)構(gòu)體。描述一

8、個(gè)正在打開的設(shè)備文件。成員:loff_tf_pos:當(dāng)前讀/寫位置unsignedintf_flags標(biāo)識(shí)文件打開時(shí),是否可讀或可寫O_RDONLYO_NONBLOCKO_SYNCstructfile_operations*f_op文件相關(guān)的操作,指向所實(shí)現(xiàn)的s

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

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

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(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)系客服處理。