版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第6章嵌入式Linux驅(qū)動程序開發(fā)嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例1971.嵌入式Linux的設(shè)備管理設(shè)備管理概述設(shè)備類型設(shè)備號Linux驅(qū)動程序概念驅(qū)動程序結(jié)構(gòu)用戶訪問接口Linux對中斷的處理設(shè)備驅(qū)動的初始化設(shè)備驅(qū)動初始化函數(shù)主要功能1981.1設(shè)備管理概述linux將所有的設(shè)備看作具體的文件,通過文件系統(tǒng)層對設(shè)備進(jìn)行訪問。這樣可以很好的做到“設(shè)備無關(guān)性〞。可以把Linux對設(shè)備的管理劃分成四個層次:用戶進(jìn)程文件系統(tǒng)層設(shè)備驅(qū)動層硬件層它們之間的關(guān)系如右圖所示:第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例1991.1設(shè)備管理概述用戶進(jìn)程用戶進(jìn)程一般位于內(nèi)核之外,當(dāng)它需要操作設(shè)備時,可以就像訪問普通文件一樣,通過調(diào)用read(),write()等文件操作系統(tǒng)調(diào)用來完成對設(shè)備文件的訪問和控制。文件系統(tǒng)層:向用戶提供一組統(tǒng)一的用戶接口。它位于用戶進(jìn)程層下面,屬于內(nèi)核空間,根本功能是執(zhí)行適合于所有設(shè)備的輸入輸出功能,使用戶透明的訪問文件。在用戶進(jìn)程發(fā)出系統(tǒng)調(diào)用要求輸入輸出操作時,由文件系統(tǒng)層就處理請求的權(quán)限。設(shè)備驅(qū)動層:用于屏蔽具體設(shè)備的細(xì)節(jié),設(shè)備驅(qū)動程序位于內(nèi)核中,它根據(jù)文件系統(tǒng)層的輸入輸出請求來操作硬件上的設(shè)備控制器,完成設(shè)備的初始化、翻開釋放設(shè)備以及數(shù)據(jù)在內(nèi)核和設(shè)備間的傳遞等操作。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2001.2設(shè)備類型Linux中的設(shè)備可以分為三類:字符設(shè)備:數(shù)據(jù)的處理是以字節(jié)為單位按順序進(jìn)行的,沒有數(shù)據(jù)緩沖區(qū),也不支持隨機(jī)讀寫。嵌入式系統(tǒng)中簡單的按鍵、觸摸屏、手寫板都屬于字符設(shè)備。塊設(shè)備:是指那些在輸入/輸出時數(shù)據(jù)處理以塊為單位的設(shè)備,它一般都采用了緩存技術(shù),支持?jǐn)?shù)據(jù)的隨機(jī)讀寫。典型的塊設(shè)備有硬盤、cd-rom等。對用戶來說塊設(shè)備和字符設(shè)備的訪問接口都是一樣的,區(qū)別僅在內(nèi)核和驅(qū)動程序的軟件接口上。網(wǎng)絡(luò)設(shè)備:實(shí)現(xiàn)方法不同于以上兩種設(shè)備,它面向的上一層不是文件系統(tǒng)層而是網(wǎng)絡(luò)協(xié)議層,內(nèi)核和網(wǎng)絡(luò)設(shè)備驅(qū)動程序間的通信,與字符設(shè)備和塊設(shè)備也完全不同。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2011.3設(shè)備號傳統(tǒng)的設(shè)備管理上,除了設(shè)備類型外,linux內(nèi)核還需要一對被稱作為主設(shè)備號、次設(shè)備號的參數(shù),才能唯一的標(biāo)識設(shè)備。主設(shè)備號:標(biāo)識設(shè)備對應(yīng)的驅(qū)動程序。系統(tǒng)中不同的設(shè)備可以有相同的主設(shè)備號,主設(shè)備號相同的設(shè)備使用相同的驅(qū)動程序,內(nèi)核利用主設(shè)備號將設(shè)備與相應(yīng)的驅(qū)動程序?qū)?yīng)起來。次設(shè)備號:用來區(qū)分具體驅(qū)動程序的實(shí)例。從上面可以知道,一個主設(shè)備號可能有多個設(shè)備與之對應(yīng),這多個設(shè)備正是在驅(qū)動程序內(nèi)通過次設(shè)備號來進(jìn)一步區(qū)分的。次設(shè)備號只能由設(shè)備驅(qū)動程序使用,內(nèi)核的其他局部僅將它作為參數(shù)傳遞給驅(qū)動程序。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2021.4Linux驅(qū)動程序概念設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核與機(jī)器硬件之間的接口,設(shè)備驅(qū)動程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié),從應(yīng)用程序來看,硬件設(shè)備只是一個設(shè)備文件,應(yīng)用程序可以向操作普通文件一樣對硬件設(shè)備進(jìn)行操作,設(shè)備驅(qū)動程序?qū)儆趦?nèi)核,主要功能有:對設(shè)備初始化和釋放。把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)。傳送應(yīng)用程序和設(shè)備文件之間的數(shù)據(jù)檢測和處理設(shè)備出現(xiàn)的錯誤。設(shè)備驅(qū)動程序的開發(fā)方式主要有兩種:基于內(nèi)核的方式和基于模塊的方式。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2031.5驅(qū)動程序結(jié)構(gòu)Linux的設(shè)備驅(qū)動程序分為三個主要局部:自動配置和初始化子程序:負(fù)責(zé)監(jiān)測所要驅(qū)動的硬件設(shè)備是否存在和能否正常工作。僅在初始化時被調(diào)用一次。效勞于I/O請求的子程序:也稱為驅(qū)動程序的上半局部。這局部程序由系統(tǒng)調(diào)用執(zhí)行,和調(diào)用進(jìn)程屬于同一個進(jìn)程,具有調(diào)用進(jìn)程的運(yùn)行環(huán)境,只是由用戶態(tài)變成了核心態(tài)。中斷效勞子程序:也稱為驅(qū)動程序的下半局部。由Linux系統(tǒng)接收,再由系統(tǒng)調(diào)用中斷效勞子程序。中斷可以在任何一個進(jìn)程運(yùn)行時產(chǎn)生,因而中斷應(yīng)該獨(dú)立于任何進(jìn)程。同一個中斷可以效勞于多個設(shè)備,因而應(yīng)該為中斷程序提供請求效勞設(shè)備的標(biāo)示參數(shù)。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2041.5用戶訪問接口對用戶程序而言,設(shè)備驅(qū)動程序隱藏了設(shè)備的具體細(xì)節(jié),對各種不同設(shè)備提供了一致的接口,I/O設(shè)備的存取可以通過一組固定的入口點(diǎn)來進(jìn)行,這組入口點(diǎn)是由每個設(shè)備的設(shè)備驅(qū)動程序提供的。主要包括:open入口點(diǎn):翻開設(shè)備準(zhǔn)備I/O操作。release入口點(diǎn):關(guān)閉由open()函數(shù)翻開的文件read入口點(diǎn):從設(shè)備上讀數(shù)據(jù)。對于有緩沖區(qū)的I/O操作,一般是從緩沖區(qū)里讀數(shù)據(jù)。write入口點(diǎn):往設(shè)備上寫數(shù)據(jù),對于有緩沖區(qū)的I/O操作,一般是把數(shù)據(jù)寫入緩沖區(qū)里。ioctl入口點(diǎn):執(zhí)行讀、寫之外的操作,主要是一些自定義的命令。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2051.5用戶訪問接口Lseek入口點(diǎn):移動文件指針的位置,用于隨機(jī)存取的設(shè)備。Readdir入口點(diǎn):取得下一個目錄入口點(diǎn),只有與文件系統(tǒng)相關(guān)的設(shè)備驅(qū)動程序才使用。Select入口點(diǎn):進(jìn)行選擇操作。如果驅(qū)動程序沒有提供select入口,select操作將會認(rèn)為設(shè)備已經(jīng)準(zhǔn)備好進(jìn)行任何的I/O操作。這些入口點(diǎn)由用戶驅(qū)動程序提供,在Linux系統(tǒng)中,使用file_operations結(jié)構(gòu)組織入口點(diǎn),其中的成員全部是函數(shù)指針,所以實(shí)質(zhì)上就是函數(shù)跳轉(zhuǎn)表,每個進(jìn)程對設(shè)備的操作,都會根據(jù)主次設(shè)備號,轉(zhuǎn)換成對該結(jié)構(gòu)的訪問。file_operations的結(jié)構(gòu)如下:第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2061.5用戶訪問接口structfile_operations{int(*lseek)(structinode*,structfile*,off_t,int);int(*read)(structinode*,structfile*,char*,int);int(*write)(structinode*,structfile*,constchar*,int);int(*readdir)(structinode*,structfile*,void*,filldir_t);int(*select)(structinode*,structfile*,int,select_table*);int(*ioctl)(structinode*,structfile*,unsignedint,unsignedlong);int(*open)(structinode*,structfile*);void(*release)(structinode*,structfile*);…………};第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2071.6Linux對中斷的處理中斷是發(fā)揮硬件尤其是cpu性能的一個重要方面,在linux中為中斷的管理提供了很好的接口,從應(yīng)用編程角度來看編寫一個中斷處理程序主要做兩件事,根據(jù)具體應(yīng)用實(shí)現(xiàn)中斷效勞子程序。利用一系列LinuxAPI函數(shù)向內(nèi)核注冊該效勞子程序,而具體的中斷調(diào)度處理由linux內(nèi)部實(shí)現(xiàn)。注冊中斷處理程序向內(nèi)核注冊中斷處理程序主要實(shí)現(xiàn)兩個功能,一是注冊中斷號,二是注冊中斷處理函數(shù)。注冊函數(shù)為:intrequest_irq(unsignedintirq,void(*handler)(int,void*,structpt_regs*),…..)釋放函數(shù)為:voidfree_irq(unsignedintirq,…)第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2081.7設(shè)備驅(qū)動的初始化設(shè)備驅(qū)動程序所提供的入口點(diǎn),必須向系統(tǒng)進(jìn)行登記,以便系統(tǒng)在適當(dāng)?shù)臅r候調(diào)用,這個過程稱為設(shè)備驅(qū)動的初始化,在Linux系統(tǒng)中對字符型設(shè)備提供了兩個相關(guān)函數(shù):externintregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);用來注冊驅(qū)動程序,它根據(jù)提供的主設(shè)備號、設(shè)備名及相關(guān)的入口點(diǎn)結(jié)構(gòu)向系統(tǒng)注冊該設(shè)備驅(qū)動程序并完成相關(guān)的初始化工作。externintunregister_chrdev(unsignedintmajor,constchar*name);用來卸載設(shè)備驅(qū)動程序。它根據(jù)主設(shè)備號和設(shè)備名,對該設(shè)備的驅(qū)動程序進(jìn)行卸載操作。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2091.8設(shè)備驅(qū)動初始化函數(shù)主要功能對驅(qū)動程序管理的硬件進(jìn)行必要的初始化:對硬件存放器進(jìn)行設(shè)置,如設(shè)置串口的工作方式、并口的數(shù)據(jù)方向等。初始化設(shè)備驅(qū)動相關(guān)的參數(shù):每個設(shè)備都有用于保存設(shè)備相關(guān)參數(shù)的變量,必須初始化。在內(nèi)核中注冊設(shè)備:每個驅(qū)動程序都有唯一的主設(shè)備號,內(nèi)核必須記錄設(shè)備的主設(shè)備號及其驅(qū)動程序以便于調(diào)用。在Linux文件系統(tǒng)的/proc下的devices文件保存著主設(shè)備號及其設(shè)備名。注冊中斷:如果設(shè)備需要IRQ支持,那么要注冊中斷。其他初始化工作:比方給設(shè)備分配I/O、申請DMA通道等。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2102.設(shè)備驅(qū)動程序開發(fā)過程設(shè)備驅(qū)動程序開發(fā)流程模塊化驅(qū)動程序設(shè)計字符設(shè)備驅(qū)動程序舉例2112.1設(shè)備驅(qū)動程序開發(fā)流程定義主、次設(shè)備號,也可以動態(tài)獲取。實(shí)現(xiàn)驅(qū)動初始化和去除函數(shù)。如果驅(qū)動程序采用模塊方式,那么要實(shí)現(xiàn)模塊初始化和去除函數(shù)。設(shè)計所要實(shí)現(xiàn)的文件操作,定義file_operations結(jié)構(gòu)。實(shí)現(xiàn)所需要的文件調(diào)用,如read、write等實(shí)現(xiàn)中斷效勞函數(shù)并向內(nèi)核注冊。將驅(qū)動編譯到內(nèi)核或編譯成模塊并加載。生成設(shè)備節(jié)點(diǎn)文件。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2122.2模塊化驅(qū)動程序設(shè)計在linux系統(tǒng)中提供了一種模塊化機(jī)制“module〞。利用這種機(jī)制,可以根據(jù)需要在不重新編譯內(nèi)核的情況下,將編譯好的模塊動態(tài)的插入運(yùn)行中的內(nèi)核,或者將內(nèi)核中已經(jīng)存在的一個模塊移走。這種機(jī)制為驅(qū)動程序開發(fā)調(diào)試提供了很大的方便。在運(yùn)行的系統(tǒng)中可以通過lsmod觀察內(nèi)核中已經(jīng)動態(tài)加載的模塊。模塊的安裝和從內(nèi)核中卸載可以通過以下命令實(shí)現(xiàn),它們操作的對象是經(jīng)過編譯但沒有連接的.o文件。insmodxxxxrmmodxxxx第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2132.2模塊化驅(qū)動程序設(shè)計對應(yīng)的模塊化編程,源程序中必須至少提供兩個函數(shù):init_module():初始化模塊函數(shù),在模塊載入時調(diào)用,為以后調(diào)用模塊的函數(shù)做準(zhǔn)備。cleanup_module():卸載。在模塊卸載時調(diào)用。一個簡單的模塊化程序/*------------mdemo.c------------*/#defineMODULE#include<linux/module.h>intinit_module(void){printk("\nhello,world!\n\n〞);return0;}第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2142.2模塊化驅(qū)動程序設(shè)計voidcleanup_module(void){printk("\nByeBye\n\n");}mdemo.c可以通過下面命令來編譯:gcc-c-D__KERNEL__-DMODULE
-omdemomdemo.c在得到了mdemo后,用insmod命令把它動態(tài)參加內(nèi)核:#insmodmdemo#helloworld!#rmmodmdemo#ByeBye第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2152.3字符設(shè)備驅(qū)動程序舉例教材P291第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2163.應(yīng)用實(shí)例鍵盤驅(qū)動Sitsang板的觸摸屏驅(qū)動2173.1鍵盤及其工作原理
鍵盤在計算機(jī)應(yīng)用系統(tǒng)中是一個很關(guān)鍵的部件,它能實(shí)現(xiàn)向計算機(jī)輸入數(shù)據(jù)、傳達(dá)命令等功能,是人工干預(yù)的主要手段。這種部件可分為獨(dú)立式按鍵和行列式鍵盤兩種下面僅對行列式鍵盤予以討論。218一、行列式〔矩陣式〕鍵盤結(jié)構(gòu)特點(diǎn)矩陣式鍵盤適用于按鍵數(shù)量較多的場合,它由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上。如圖6.3-1所示,一個3×3的行、列結(jié)構(gòu)可以構(gòu)成一個有9個按鍵的鍵盤。同理一個4×4的行、列結(jié)構(gòu)可以構(gòu)成一個含有16個按鍵的鍵盤等等。很明顯,在按鍵數(shù)量較多的場合,矩陣鍵盤與獨(dú)立式按鍵盤相比,要節(jié)省很多的I/O口。219行列式〔矩陣式〕鍵盤示意圖220二、行列式鍵盤工作原理
4×4的鍵盤結(jié)構(gòu)如圖6.3-2所示,圖中行線通過電阻接+5V,當(dāng)鍵盤上沒有鍵閉合時,所有的行線和列線斷開,行線X0~X3都呈高電平。221二、行列式鍵盤工作原理當(dāng)鍵盤上某一個鍵閉合時,那么該鍵所對應(yīng)的行線與列線短路。例如,6號鍵按下閉合時,行線X1和列線Y2短路,此時X1的電平由Y2的電平所決定.如果把行線接到CPU的輸入口,列線接到CPU的輸出口,那么在CPU的控制下,使列線Y0為低電平(0),其余三根列線Y1、Y2、Y3都為高電平。然后CPU通過輸入口讀行線的狀態(tài),如果X0X1X2X3都為高電平,那么Y0這一列上沒有鍵閉合,如果讀出的列線狀態(tài)不全為高電平,那么為低電平的行線和Y0相交的鍵處于閉合狀態(tài);222
如果Y0這一列上沒有鍵閉合,接著使列線Y1為低電平,其余列線為高電平,用同樣的方法檢查Y1這一列鍵上有無鍵閉合。以此類推,最后使列線Y3為低電平,其余的列線為高電平,檢查Y3這一列上是否有鍵閉合。
223
這種逐行逐列地檢查鍵盤狀態(tài)的過程稱為對鍵盤的一次掃描。
CPU對鍵掃描要以采取程序控制的隨機(jī)方式,CPU空閑時掃描鍵盤,也可以采取定時控制方式,每隔一定時間,CPU對鍵盤掃描一次,CPU可隨時響應(yīng)鍵盤輸入請求,對鍵盤掃描,以識別哪一鍵處于閉合狀態(tài),并對鍵輸入信息作出相應(yīng)處理。
224CPU對鍵盤上閉合鍵鍵號確實(shí)定,可以根據(jù)行線和列線的狀態(tài)計算求得,也可以根據(jù)行線和列線狀態(tài)查表求得。為了保證CPU對鍵的閉合作一次且僅作一次處理,必須去除抖動,在鍵的穩(wěn)定閉合或斷開時讀鍵的狀態(tài),并判別出鍵由閉合到釋放時,再作鍵輸入處理。
225三、鍵盤行列式鍵盤按鍵的識別方法行列式鍵盤鍵的識別方法有二種:掃描法和反轉(zhuǎn)法。這里只介紹掃描法。根據(jù)上面的分析,很容易得出矩陣鍵盤按鍵的識別方法,此方法分兩步進(jìn)行:第一步,識別鍵盤有無鍵被按下;第二步,如果有鍵被按下,識別出具體的按鍵。分述如下:識別具體按鍵的方法是〔亦稱之為掃描法〕:逐列置零電平,其余各列置為高電乎,檢查各行線電平的變化,如果某行電平由高電平變?yōu)榱汶娖?,那么可確定此行與列交叉點(diǎn)處的按鍵被按下。226鍵盤的控制方式
鍵盤掃描只是CPU的工作內(nèi)容之一。CPU在忙于各項工作任務(wù)時,如何兼顧鍵盤的輸入,取決于鍵盤的工作方式。鍵盤的工作方式的選取應(yīng)根據(jù)實(shí)際應(yīng)用系統(tǒng)中CPU工作的忙、閑情況而定。其原那么是既要保證能及時響應(yīng)按鍵操作,又要不過多占用CPU的工作時間。通常,鍵盤工作方式有三種,即:編程掃描、定時掃描和中斷掃描。227一、編程掃描方式
CPU對鍵盤的掃描采取程序控制方式,一旦進(jìn)入鍵掃描狀態(tài),那么反復(fù)地掃描鍵盤,等待用戶從鍵盤上輸入命令或數(shù)據(jù)。而在執(zhí)行鍵入命令或處理鍵入數(shù)據(jù)過程中,CPU將不再響應(yīng)鍵入要求,直到CPU返回重新掃描鍵盤為止。228鍵盤掃描子程序編程要點(diǎn)〔1〕判斷鍵盤上有無鍵按下——其方法為列輸出全0,讀行輸入狀態(tài),假設(shè)狀態(tài)為全1,那么說明鍵盤無鍵按下;假設(shè)不全為1,那么說明鍵盤有按下。〔2〕消除按鍵抖動的影響——其方法為,在判斷有鍵按下后,用軟件延時的方法〔延時10ms〕,再判斷鍵盤狀態(tài),如果仍為有鍵按下狀態(tài),那么認(rèn)為有一個確定的鍵按下,否那么當(dāng)作按鍵抖動處理。〔3〕求按鍵位置——用掃描的方法識別閉合鍵N所在的行號X和列號Y,并根據(jù):以下公式計算閉合鍵的鍵號N=X行首鍵號+列號Y?!?〕鍵閉合一次僅進(jìn)行一次按鍵處理——方法是等待按鍵釋放之后,再進(jìn)行按鍵功能的處理操作。229二、定時掃描工作方式定時掃描工作方式是利用內(nèi)部定時器產(chǎn)生定時中斷〔例如10ms〕,CPU響應(yīng)中斷后對鍵盤進(jìn)行掃描,并在有鍵按下時識別出該鍵并執(zhí)行相應(yīng)鍵功能程序。定時掃描工作方式的鍵盤硬件電路。與編程掃描工作方式相同,軟件框圖如圖6.3-3所示。230三、中斷工作方式鍵盤工作于編程掃描狀態(tài)時,CPU要不間斷地對鍵盤進(jìn)行掃描工作,以監(jiān)視鍵盤的輸入情況,直到有鍵按下為止。其間CPU不能干任何其它工作,如果CPU工作量較大,這種方式將不能適應(yīng)。定時掃描進(jìn)了一大步,除了定時監(jiān)視一下鍵盤輸入情況外,其余時間可進(jìn)行其它任務(wù)的處理,因此CPU效率提高了。為了進(jìn)一步提高CPU工作效率,可采用只有在鍵盤有鍵按下時,才執(zhí)行鍵盤掃描并執(zhí)行該按鍵功能程序,如果無鍵按下,CPU將不理睬鍵盤。2313.2鍵盤驅(qū)動簡單起見,我們以一個按鍵的實(shí)現(xiàn)為例來講述驅(qū)動的編寫。如以下圖所示:平臺上的一個按鍵和外部中斷IRQ6相連,當(dāng)按鍵按下時,引腳輸入低電平觸發(fā)中斷。下面我們來看驅(qū)動程序的設(shè)計。第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2323.2.1設(shè)備初始化驅(qū)動程序在init_keyboard()中實(shí)現(xiàn)向系統(tǒng)注冊主次設(shè)備號,設(shè)備名,并初始化存放器,如下:voidinit_dev_set(void){ICR=0x00;//低電平觸發(fā)中斷PDDIR=0x80;//設(shè)置PD7為輸入PDSEL=0x80;//PD7作為I/O與外部連接PDKBEN=0x00;//鍵盤中斷使能………..}第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2333.2.1設(shè)備初始化intinit_keyboard(void){#definekeyboard_major50//主設(shè)備號為50#definekeyboard_minor0//次設(shè)備號為0intrc;rc=register_chrdev(keyboard_major,"keyboard",&keyboard_fops);if(rc<0)//返回值小于零,注冊失敗printk("registerkeyboard-Drivererror\n");elseinit_dev_set();returnrc;};第六章
1
2
3嵌入式Linux的設(shè)備管理設(shè)備驅(qū)動程序開發(fā)過程應(yīng)用實(shí)例2343.2.2注冊中斷和中斷處理程序在open函數(shù)中向內(nèi)核注冊中斷,如下:staticintkeyboard_open(structinode*inode,structfile*file){rc=request_irq(IRQ_MACHSPEC|IRQ6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中暑假計劃作文怎么寫
- 禁毒培訓(xùn)課件
- 2024年版:虛擬現(xiàn)實(shí)教育平臺建設(shè)與推廣合同
- 中藥在治療免疫介導(dǎo)性視網(wǎng)膜病變中的應(yīng)用探索
- 廣西北海市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版競賽題((上下)學(xué)期)試卷及答案
- 2024年跨國銷售合同具體條款和條件
- 2024員工車輛租賃專項合同及風(fēng)險管理協(xié)議2篇
- 2024年跨國軟件開發(fā)與銷售合同
- 2024月子中心產(chǎn)后瑜伽與健身課程服務(wù)合同2篇
- 2024年股權(quán)質(zhì)押反擔(dān)保權(quán)益具體合同版
- 2024春節(jié)前安全培訓(xùn)
- 物業(yè)管理基礎(chǔ)培訓(xùn)
- 完整液壓系統(tǒng)課件
- 2024-2030年中國通信工程行業(yè)發(fā)展分析及發(fā)展前景與趨勢預(yù)測研究報告
- 2024四川省專業(yè)技術(shù)人員繼續(xù)教育考試題及答案
- 2024年安全員A證試題庫(附答案)
- 全球傳播導(dǎo)論 課件 第六章 全球傳播與公共外交
- 2022-2023學(xué)年廣東省廣州市天河區(qū)六年級(上)期末數(shù)學(xué)試卷(含答案)
- 北京市《配電室安全管理規(guī)范》(DB11T 527-2021)地方標(biāo)準(zhǔn)
- 國家開放大學(xué)2024春《1472藥劑學(xué)(本)》期末考試真題及答案-開放本科
- 妊娠合并泌尿系結(jié)石診斷治療中國專家共識解讀課件
評論
0/150
提交評論