linux字符設(shè)備驅(qū)動(dòng)程序編寫基本流程

linux字符設(shè)備驅(qū)動(dòng)程序編寫基本流程

ID:19218649

大?。?6.50 KB

頁(yè)數(shù):7頁(yè)

時(shí)間:2018-09-29

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

《linux字符設(shè)備驅(qū)動(dòng)程序編寫基本流程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、Linux字符設(shè)備驅(qū)動(dòng)程序編寫基本流程Linuxdevicedriver的概念  系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核和應(yīng)用程序之間的接口,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口。設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié),這樣在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件,應(yīng)用程序可以象操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,它完成以下的功能:1、對(duì)設(shè)備初始化和釋放;2、把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);3、讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);4、檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤?! ≡贚inux操作系統(tǒng)下有三類主要的設(shè)備文件

2、類型,一是字符設(shè)備,二是塊設(shè)備,三是網(wǎng)絡(luò)設(shè)備。字符設(shè)備和塊設(shè)備的主要區(qū)別是:在對(duì)字符設(shè)備發(fā)出讀/寫請(qǐng)求時(shí),實(shí)際的硬件I/O一般就緊接著發(fā)生了,塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作緩沖區(qū),當(dāng)用戶進(jìn)程對(duì)設(shè)備請(qǐng)求能滿足用戶的要求,就返回請(qǐng)求的數(shù)據(jù),如果不能,就調(diào)用請(qǐng)求函數(shù)來(lái)進(jìn)行實(shí)際的I/O操作。塊設(shè)備是主要針對(duì)磁盤等慢速設(shè)備設(shè)計(jì)的,以免耗費(fèi)過(guò)多的CPU時(shí)間來(lái)等待?! ∫呀?jīng)提到,用戶進(jìn)程是通過(guò)設(shè)備文件來(lái)與實(shí)際的硬件打交道。每個(gè)設(shè)備文件都都有其文件屬性(c/b),表示是字符設(shè)備還是塊設(shè)備?另外每個(gè)文件都有兩個(gè)設(shè)備號(hào),第一個(gè)是主設(shè)備號(hào),標(biāo)識(shí)驅(qū)動(dòng)程序,第二個(gè)是從設(shè)備號(hào),標(biāo)

3、識(shí)使用同一個(gè)設(shè)備驅(qū)動(dòng)程序的不同的硬件設(shè)備,比如有兩個(gè)軟盤,就可以用從設(shè)備號(hào)來(lái)區(qū)分他們。設(shè)備文件的的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的主設(shè)備號(hào)一致,否則用戶進(jìn)程將無(wú)法訪問(wèn)到驅(qū)動(dòng)程序。1.Linux驅(qū)動(dòng)程序編寫基本流程:1.首先是一些版本信息,沒(méi)什么用,但是不能少#define__NO_VERSION__#include#includecharkernel_version[]=UTS_RELEASE;2.為了把系統(tǒng)調(diào)用和驅(qū)動(dòng)程序關(guān)聯(lián)起來(lái),需要一個(gè)非常關(guān)鍵的數(shù)據(jù)結(jié)構(gòu):structfile_

4、operations。file_operations結(jié)構(gòu)的每一個(gè)成員的名字都對(duì)應(yīng)著一個(gè)系統(tǒng)調(diào)用。用戶進(jìn)程利用系統(tǒng)調(diào)用在對(duì)設(shè)備文件進(jìn)行諸如read/write操作時(shí),系統(tǒng)調(diào)用通過(guò)設(shè)備文件的主設(shè)備號(hào)找到相應(yīng)的設(shè)備驅(qū)動(dòng)程序,然后讀取這個(gè)數(shù)據(jù)結(jié)構(gòu)相應(yīng)的函數(shù)指針,接著把控制權(quán)交給該函數(shù)。這是linux的設(shè)備驅(qū)動(dòng)程序工作的基本原理。編寫設(shè)備驅(qū)動(dòng)程序的主要工作就是編寫子函數(shù),并填充file_operations的各個(gè)域3.簡(jiǎn)單驅(qū)動(dòng)程序的編寫(test.c):a.包含一些基本的頭文件。b.編寫一些功能函數(shù),比如read(),write()等。這些函數(shù)被調(diào)用時(shí)系統(tǒng)進(jìn)入和心態(tài)

5、。c.定義structfile_operations結(jié)構(gòu)的對(duì)象,填充結(jié)構(gòu)體。結(jié)構(gòu)體中功能的順序不能改變,若一些功能沒(méi)有實(shí)現(xiàn)就用NULL填充,已經(jīng)實(shí)現(xiàn)的功能如read()、write()分別添加到對(duì)應(yīng)的位置。這步實(shí)現(xiàn)的是函數(shù)的注冊(cè)。到這里驅(qū)動(dòng)程序的主體可以說(shuō)是寫好了?,F(xiàn)在需要把驅(qū)動(dòng)程序嵌入內(nèi)核。d.注冊(cè)設(shè)備驅(qū)動(dòng)程序,使用register_chrdev注冊(cè)字符型設(shè)備。函數(shù)原型為:intregister_chrdev(0,“test_name”,&test_file_operations)函數(shù)返回主設(shè)備號(hào),若注冊(cè)成功返回值大于0。第一個(gè)參數(shù):主設(shè)備號(hào)。第二個(gè)參數(shù)

6、:注冊(cè)的設(shè)備名。第三個(gè)參數(shù):結(jié)構(gòu)體名(設(shè)備相關(guān)操作方式,驅(qū)動(dòng)程序?qū)嶋H執(zhí)行操作的函數(shù)的指針)。這個(gè)函數(shù)由intinit_module(void)函數(shù)調(diào)用,這個(gè)函數(shù)在系統(tǒng)啟動(dòng)時(shí)注冊(cè)到內(nèi)核時(shí)調(diào)用。e.在用rmmod卸載模塊時(shí),cleanup_module函數(shù)被調(diào)用,它釋放字符設(shè)備test在系統(tǒng)字符設(shè)備表中占有的表項(xiàng)。voidcleanup_module(void){unregister_chrdev(test_major,“test”);}到這里test.c基本就編寫完成了。一個(gè)簡(jiǎn)單的字符設(shè)備可以說(shuō)寫好了。4.編譯$gcc-O2-DMODULE-D__KERNE

7、L__-ctest.otest.c得到文件test.o就是一個(gè)設(shè)備驅(qū)動(dòng)程序。如果設(shè)備驅(qū)動(dòng)程序有多個(gè)文件,把每個(gè)文件按上面的命令行編譯,然后ld-rfile1.ofile2.o-omodulename驅(qū)動(dòng)程序已經(jīng)編譯好了,現(xiàn)在把它安裝到系統(tǒng)中去。$insmod-ftest.o安裝成功在/proc/devices文件中就可以看到設(shè)備test,并可以看到主設(shè)備號(hào)。要卸載運(yùn)行:$rmmodtest5.創(chuàng)建設(shè)備節(jié)點(diǎn)mkmod/dev/testcmajorminorc是指字符設(shè)備,major是主設(shè)備號(hào),minor是從設(shè)備號(hào),一般可以設(shè)置為0以上就是Linux驅(qū)動(dòng)編寫的

8、基本過(guò)程了,可能有遺漏的地方,這個(gè)我只是按我理解的整理的。具體問(wèn)題

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

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

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