Linux字符設(shè)備驅(qū)動程序?qū)嶒?pdf

Linux字符設(shè)備驅(qū)動程序?qū)嶒?pdf

ID:55953374

大?。?4.79 KB

頁數(shù):10頁

時間:2020-06-18

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

《Linux字符設(shè)備驅(qū)動程序?qū)嶒?pdf》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、實驗九:Linux字符設(shè)備驅(qū)動程序?qū)嶒瀸嶒災(zāi)康模?.理解Linux設(shè)備驅(qū)動程序的基本原理;2.掌握Linux字符設(shè)備驅(qū)動程序的框架結(jié)構(gòu);3.學(xué)會編寫字符設(shè)備驅(qū)動程序。實驗設(shè)備:PC機(jī)。實驗原理:Linux函數(shù)(系統(tǒng)調(diào)用)是應(yīng)用程序和操作系統(tǒng)內(nèi)核之間的接口,而設(shè)備驅(qū)動程序是內(nèi)核和硬件設(shè)備之間的接口,設(shè)備驅(qū)動程序屏蔽硬件細(xì)節(jié),且設(shè)備被映射成特殊的文件進(jìn)行處理。每個設(shè)備都對應(yīng)一個文件名,在內(nèi)核中也對應(yīng)一個索引節(jié)點(diǎn),應(yīng)用程序可以通過設(shè)備的文件名來訪問硬件設(shè)備。Linux為文件和設(shè)備提供了一個致性的接口,用戶操作設(shè)備文件與操作普通文件類似。例如,通過open()函數(shù)可打開設(shè)備文件,建立起

2、應(yīng)用程序與目標(biāo)設(shè)備的連接;之后,可以通過read()、write()、ioctl()等常規(guī)文件函數(shù)對目標(biāo)設(shè)備進(jìn)行操作。實驗方法:實現(xiàn)對虛擬設(shè)備(一段內(nèi)在)的打開、關(guān)閉、讀寫的操作,并要通過編寫測試程序來測試虛擬設(shè)備及其驅(qū)動運(yùn)行是否正常。1.實驗源代碼/*test_drv.c*/#include#include#include#include#include#include#include

3、no.h>#include#include#defineTEST_DEVICE_NAME"test_dev"#defineBUFF_SZ1024/*全局變量*/staticstructcdevtest_dev;unsignedintmajor=0;staticchar*data=NULL;/*函數(shù)聲明*/staticssize_ttest_read(structfile*file,char*buf,size_tcount,loff_t*f_pos);staticssize_ttest_write(structfile*f

4、ile,constchar*buffer,size_tcount,loff_t*f_pos);staticinttest_open(structinode*inode,structfile*file);staticinttest_release(structinode*inode,structfile*file);/*讀函數(shù)*/staticssize_ttest_read(structfile*file,char*buf,size_tcount,loff_t*f_pos){intlen;if(count<0){return-EINVAL;}len=strlen(data);co

5、unt=(len>count)?count:len;if(copy_to_user(buf,data,count)){return-EFAULT;}returncount;}/*寫函數(shù)*/staticssize_ttest_write(structfile*file,constchar*buffer,size_tcount,loff_t*f_pos){if(count<0){return-EINVAL;}memset(data,0,BUFF_SZ);count=(BUFF_SZ>count)?count:BUFF_SZ;if(copy_from_user(data,buffer

6、,count)){return-EFAULT;}returncount;}/*打開函數(shù)*/staticinttest_open(structinode*inode,structfile*file){printk("Thisisopenoperation");data=(char*)kmalloc(sizeof(char)*BUFF_SZ,GFP_KERNEL);if(!data){return-ENOMEM;}memset(data,0,BUFF_SZ);return0;}/*關(guān)閉函數(shù)*/staticinttest_release(structinode*inode,str

7、uctfile*file){printk("Thisisreleaseoperation");if(data){kfree(data);data=NULL;}return0;}staticvoidtest_setup_cdev(structcdev*dev,intminor,structfile_operations*fops){interr,devno=MKDEV(major,minor);cdev_init(dev,fops);dev->owner=THIS_MODULE;dev->

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

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

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