版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 第第4 4章章 嵌入式嵌入式LinuxLinux接口設計與驅動開發(fā)接口設計與驅動開發(fā)(第(第1 1部分部分 DEVFSDEVFS) 理解設備驅動程序的概念、分類、處理器與理解設備驅動程序的概念、分類、處理器與設備間數(shù)據(jù)交換方法設備間數(shù)據(jù)交換方法 熟悉驅動程序結構熟悉驅動程序結構 熟悉驅動程序開發(fā)方法熟悉驅動程序開發(fā)方法 4.1.1 設備驅動程序概述設備驅動程序概述 1. 驅動程序定義及功能驅動程序定義及功能 設備驅動程序實際是處理和操作硬件控制器設備驅動程序實際是處理和操作硬件控制器的軟件,從本質上講,是內核中具有最高特權的軟件,從本質上講,是內核中具有最高特權級的、駐留內存的、可共享的底層
2、硬件處理例級的、駐留內存的、可共享的底層硬件處理例程。驅動程序是內核的一部分,是操作系統(tǒng)內程。驅動程序是內核的一部分,是操作系統(tǒng)內核與硬件設備的直接接口,驅動程序屏蔽了硬核與硬件設備的直接接口,驅動程序屏蔽了硬件的細節(jié)件的細節(jié). 4.1 4.1 設備驅動程序基礎設備驅動程序基礎 完成以下功能:完成以下功能:(1) 對設備初始化和釋放;對設備初始化和釋放;(2) 對設備進行管理,包括實時參數(shù)設置,對設備進行管理,包括實時參數(shù)設置,以及提供對設備的操作接口;以及提供對設備的操作接口;(3) 讀取應用程序傳送給設備文件的數(shù)據(jù)或讀取應用程序傳送給設備文件的數(shù)據(jù)或者回送應用程序請求的數(shù)據(jù);者回送應用程序
3、請求的數(shù)據(jù);(4) 檢測和處理設備出現(xiàn)的錯誤。檢測和處理設備出現(xiàn)的錯誤。 簡單來說可以概括為:管理簡單來說可以概括為:管理I/O設備設備,上上層軟件的抽象操作與設備操作的轉換。層軟件的抽象操作與設備操作的轉換。2. 設備驅動程序的概念設備驅動程序的概念 Linux操作系統(tǒng)將所有的設備全部看成文操作系統(tǒng)將所有的設備全部看成文件,并通過文件的操作界面進行操作。對用戶件,并通過文件的操作界面進行操作。對用戶程序而言,設備驅動程序隱藏了設備的具體細程序而言,設備驅動程序隱藏了設備的具體細節(jié),對各種不同設備提供了一致的接口,一般節(jié),對各種不同設備提供了一致的接口,一般來說,是把設備映射為一個特殊的設備文
4、件,來說,是把設備映射為一個特殊的設備文件,用戶程序可以像對其他文件一樣對此設備文件用戶程序可以像對其他文件一樣對此設備文件進行操作。進行操作。 由于每一個設備至少由文件系統(tǒng)的一個文由于每一個設備至少由文件系統(tǒng)的一個文件代表,因而都有一個件代表,因而都有一個“文件名文件名”。 應用程序通??梢酝ㄟ^系統(tǒng)調用應用程序通??梢酝ㄟ^系統(tǒng)調用open()打開打開設備文件,建立起與目標設備的連接。設備文件,建立起與目標設備的連接。 打開了代表著目標設備的文件,即建立起與打開了代表著目標設備的文件,即建立起與設備的連接后,可以通過設備的連接后,可以通過read()、write()、ioctl()等常規(guī)的文件
5、操作對目標設備進行操作。等常規(guī)的文件操作對目標設備進行操作。 設備文件的屬性由三部分信息組成:設備文件的屬性由三部分信息組成: 第一部分是文件的類型第一部分是文件的類型 第二部分是一個主設備號第二部分是一個主設備號 第三部分是一個次設備號。第三部分是一個次設備號。 其中類型和主設備號結合在一起惟一地確定了其中類型和主設備號結合在一起惟一地確定了設備文件驅動程序及其界面,而次設備號則說明設備文件驅動程序及其界面,而次設備號則說明目標設備是同類設備中的第幾個。目標設備是同類設備中的第幾個。 由于由于Linux 中將設備當做文件處理,所以中將設備當做文件處理,所以對設備進行操作的調用格式與對文件的操
6、作對設備進行操作的調用格式與對文件的操作類似,主要包括類似,主要包括open()、read()、write()、ioctl()、close()等。應用程序發(fā)出系統(tǒng)調用等。應用程序發(fā)出系統(tǒng)調用命令后,會從用戶態(tài)轉到核心態(tài),通過內核命令后,會從用戶態(tài)轉到核心態(tài),通過內核將將open()這樣的系統(tǒng)調用轉換成對物理設備這樣的系統(tǒng)調用轉換成對物理設備的操作。的操作。 3. 驅動層次結構驅動層次結構 Linux 下的設備驅動程序是內核的一部分,下的設備驅動程序是內核的一部分,運行在內核模式,也就是說設備驅動程序為內運行在內核模式,也就是說設備驅動程序為內核提供了一個核提供了一個 I/O 接口,用戶使用這個
7、接口實接口,用戶使用這個接口實現(xiàn)對設備的操作?,F(xiàn)對設備的操作。 下圖所示,顯示了典型的下圖所示,顯示了典型的Linux 輸入輸入/輸出輸出系統(tǒng)中各層次結構和功能。系統(tǒng)中各層次結構和功能。 Linux 設備驅動程序包含中斷處理程序和設設備驅動程序包含中斷處理程序和設備服務子程序兩部分。備服務子程序兩部分。 設備服務子程序包含了所有與設備操作相關設備服務子程序包含了所有與設備操作相關的處理代碼。它從面向用戶進程的設備文件系統(tǒng)的處理代碼。它從面向用戶進程的設備文件系統(tǒng)中接受用戶命令,并對設備控制器執(zhí)行操作。這中接受用戶命令,并對設備控制器執(zhí)行操作。這樣,設備驅動程序屏蔽了設備的特殊性,使用戶樣,設備
8、驅動程序屏蔽了設備的特殊性,使用戶可以像對待文件一樣操作設備。可以像對待文件一樣操作設備。 設備控制器需要獲得系統(tǒng)服務時有兩種方設備控制器需要獲得系統(tǒng)服務時有兩種方式:式: 查詢查詢 中斷中斷 因為因為 Linux 下的設備驅動程序是內核的一下的設備驅動程序是內核的一部分,在設備查詢期間系統(tǒng)不能運行其他代碼部分,在設備查詢期間系統(tǒng)不能運行其他代碼,查詢方式的工作效率比較低,所以只有少數(shù)設查詢方式的工作效率比較低,所以只有少數(shù)設備如軟盤驅動程序采取這種方式,大多設備以備如軟盤驅動程序采取這種方式,大多設備以中斷方式向設備驅動程序發(fā)出輸入中斷方式向設備驅動程序發(fā)出輸入/輸出請求。輸出請求。4. 設
9、備驅動程序與外界的接口設備驅動程序與外界的接口 每種類型的驅動程序,不管是字符設備還是每種類型的驅動程序,不管是字符設備還是塊設備都為內核提供相同的調用接口,因此內核塊設備都為內核提供相同的調用接口,因此內核能以相同的方式處理不同的設備。能以相同的方式處理不同的設備。Linux 為每種為每種不同類型的設備驅動程序維護相應的數(shù)據(jù)結構,不同類型的設備驅動程序維護相應的數(shù)據(jù)結構,以便定義統(tǒng)一的接口并實現(xiàn)驅動程序的可裝載性以便定義統(tǒng)一的接口并實現(xiàn)驅動程序的可裝載性和動態(tài)性。和動態(tài)性。Linux 設備驅動程序與外界的接口可設備驅動程序與外界的接口可以分為如下三個部分。以分為如下三個部分。 驅動程序與操作
10、系統(tǒng)內核的接口:驅動程序與操作系統(tǒng)內核的接口: 這是通過數(shù)據(jù)結構這是通過數(shù)據(jù)結構 file_operations來完成的。來完成的。 驅動程序與系統(tǒng)引導的接口:驅動程序與系統(tǒng)引導的接口: 這部分利用驅動程序對設備進行初始化。這部分利用驅動程序對設備進行初始化。 驅動程序與設備的接口:驅動程序與設備的接口: 這部分描述了驅動程序如何與設備進行交互,這部分描述了驅動程序如何與設備進行交互,這與具體設備密切相關。這與具體設備密切相關。 它們之間的相互關系如下圖所示。它們之間的相互關系如下圖所示。 5.設備驅動程序的特點設備驅動程序的特點 綜上所述,綜上所述,Linux 中的設備驅動程序有如下特中的設
11、備驅動程序有如下特點。點。 (1)內核代碼:)內核代碼:設備驅動程序是內核的一部設備驅動程序是內核的一部分,如果驅動程序出錯,則可能導致系統(tǒng)崩潰。分,如果驅動程序出錯,則可能導致系統(tǒng)崩潰。 (2)內核接口:)內核接口:設備驅動程序必須為內核或設備驅動程序必須為內核或者其子系統(tǒng)者其子系統(tǒng)提供一個標準接口提供一個標準接口。比如,一個終端。比如,一個終端驅動程序必須為內核提供一個文件驅動程序必須為內核提供一個文件 I/O 接口;一接口;一個個 SCSI設備驅動程序應該為設備驅動程序應該為 SCSI子系統(tǒng)提供子系統(tǒng)提供一個一個SCSI設備接口,同時設備接口,同時SCSI子系統(tǒng)也必須為子系統(tǒng)也必須為內核
12、提供文件的內核提供文件的 I/O 接口及緩沖區(qū)。接口及緩沖區(qū)。 (3)內核機制和服務:)內核機制和服務:設備驅動程序使用一設備驅動程序使用一些標準的內核服務,如內存分配等。些標準的內核服務,如內存分配等。 (4)可裝載:)可裝載:大多數(shù)的大多數(shù)的 Linux 操作系統(tǒng)設備操作系統(tǒng)設備驅動程序都可以在需要時裝載進內核,在不需驅動程序都可以在需要時裝載進內核,在不需要時從內核中卸載。要時從內核中卸載。 (5)可設置:)可設置:Linux 操作系統(tǒng)設備驅動程序操作系統(tǒng)設備驅動程序可以集成為內核的一部分,并可以根據(jù)需要把可以集成為內核的一部分,并可以根據(jù)需要把其中的某一部分集成到內核中,這只需要在系其
13、中的某一部分集成到內核中,這只需要在系統(tǒng)編譯時進行相應的設置即可。統(tǒng)編譯時進行相應的設置即可。 (6)動態(tài)性:)動態(tài)性:在系統(tǒng)啟動且各個設備驅動程在系統(tǒng)啟動且各個設備驅動程序初始化后,驅動程序將維護其控制的設備。序初始化后,驅動程序將維護其控制的設備。如果該設備驅動程序控制的設備不存在,也不如果該設備驅動程序控制的設備不存在,也不影響系統(tǒng)的運行,只是多占用一點系統(tǒng)內存。影響系統(tǒng)的運行,只是多占用一點系統(tǒng)內存。 每個可以增加到內核中的代碼稱為一個每個可以增加到內核中的代碼稱為一個模塊模塊。Linux內核支持相當多的模塊的類型(或內核支持相當多的模塊的類型(或“類類”),),但不僅僅只局限于設備驅
14、動程序。每個模塊由目但不僅僅只局限于設備驅動程序。每個模塊由目標代碼組成(沒有連接成完整的可執(zhí)行文件),標代碼組成(沒有連接成完整的可執(zhí)行文件),通過通過insmod程序它們可以動態(tài)連接到運行著的內程序它們可以動態(tài)連接到運行著的內核中,而通過核中,而通過rmmod程序就可以去除這些模塊。程序就可以去除這些模塊。4.1.2 設備驅動程序的分類設備驅動程序的分類1. 分類分類 Linux將設備分成如下類型:將設備分成如下類型: 一類是一類是塊設備塊設備,類似磁盤以記錄塊或扇區(qū)為,類似磁盤以記錄塊或扇區(qū)為單位,成塊進行輸入單位,成塊進行輸入/輸出的設備;輸出的設備; 另一類是另一類是字符設備字符設備
15、,類似鍵盤以字符為單位,類似鍵盤以字符為單位,逐個進行輸入逐個進行輸入/輸出的設備。輸出的設備。 網絡設備網絡設備是介于塊設備和字符設備之間的一是介于塊設備和字符設備之間的一種特殊設備。種特殊設備。 1)字符設備)字符設備 字符設備以字節(jié)為單位逐個進行字符設備以字節(jié)為單位逐個進行I/O操作,字符設操作,字符設備中的緩存是可有可無,它不支持隨機訪問。備中的緩存是可有可無,它不支持隨機訪問。 如:如:串口設備串口設備/dev/cua0和和/dev/cua1。 ls -l /dev/ttyS0 crw-rw-rw- 1 root uucp 4, 64 4月月 1 19:56 /dev/ttyS02)
16、塊設備)塊設備 塊設備的存取是通過塊設備的存取是通過buffer、cache來進行,來進行, 可以進行隨機訪問可以進行隨機訪問. 例如:例如:IDE硬盤設備硬盤設備/dev/hda ,可以支持可,可以支持可安裝文件系統(tǒng)。安裝文件系統(tǒng)。 ls -l /dev/mtdblock3 brw-r-r- 1 505 505 31, 3 Feb 19 2005 /dev/mtdblock33)網絡設備)網絡設備 網絡設備是一類比較特別的設備,它不網絡設備是一類比較特別的設備,它不像字符或塊設備那樣通過對應的設備文件節(jié)像字符或塊設備那樣通過對應的設備文件節(jié)點訪問,內核也不再通過點訪問,內核也不再通過read
17、或或write等調等調用去訪問網絡設備。通過用去訪問網絡設備。通過BSD套接口訪問。套接口訪問。2.設備文件與設備號設備文件與設備號 用戶通過設備文件訪問設備,每個設備用一用戶通過設備文件訪問設備,每個設備用一個主設備號和次設備號標。塊設備接口僅支持面?zhèn)€主設備號和次設備號標。塊設備接口僅支持面向塊的向塊的I/O操作,所有操作,所有I/O操作都通過在內核地址操作都通過在內核地址空間中的空間中的I/O緩沖區(qū)進行,它可以支持隨機存取緩沖區(qū)進行,它可以支持隨機存取的功能。的功能。 文件系統(tǒng)通常都建立在塊設備上。文件系統(tǒng)通常都建立在塊設備上。 主設備號主設備號表示設備對應的驅動程序;表示設備對應的驅動程
18、序; 次設備號次設備號由內核使用,用于正確確定設備文件所指由內核使用,用于正確確定設備文件所指的設備。的設備。 內核用內核用dev_t類型(類型()來保存設)來保存設備編號,備編號,dev_t是一個是一個32位的數(shù),位的數(shù),12位表示主設備位表示主設備號,號,20為表示次設備號。為表示次設備號。 在實際使用中,是通過在實際使用中,是通過中定義中定義的宏來轉換格式。的宏來轉換格式。 4.1.3 處理器與設備間數(shù)據(jù)交換處理器與設備間數(shù)據(jù)交換 處理器與外設之間傳輸數(shù)據(jù)的控制方式通常有處理器與外設之間傳輸數(shù)據(jù)的控制方式通常有3種:查詢方式、中斷方式和直接內存存?。ǚN:查詢方式、中斷方式和直接內存存?。?/p>
19、DMA)方式。方式。 1查詢方式查詢方式 設備驅動程序通過設備的設備驅動程序通過設備的I/O端口空間,以端口空間,以及存儲器空間完成數(shù)據(jù)的交換。及存儲器空間完成數(shù)據(jù)的交換。 利用這些地址空間,驅動程序可以向外設發(fā)利用這些地址空間,驅動程序可以向外設發(fā)送指定的操作指令。送指定的操作指令。 通常來講,由于外設的操作耗時較長,因通常來講,由于外設的操作耗時較長,因此,當處理器實際執(zhí)行了操作指令之后,驅動此,當處理器實際執(zhí)行了操作指令之后,驅動程序可采用查詢方式等待外設完成操作。程序可采用查詢方式等待外設完成操作。 驅動程序在提交命令之后,開始查詢設備的狀驅動程序在提交命令之后,開始查詢設備的狀態(tài)寄存
20、器,當狀態(tài)寄存器表明操作完成時,驅動程態(tài)寄存器,當狀態(tài)寄存器表明操作完成時,驅動程序可繼續(xù)后續(xù)處理。序可繼續(xù)后續(xù)處理。 查詢方式的優(yōu)點是硬件開銷小,使用起來比較查詢方式的優(yōu)點是硬件開銷小,使用起來比較簡單。簡單。 在此方式下,在此方式下,CPU要不斷地查詢外設的狀態(tài),要不斷地查詢外設的狀態(tài),當外設未準備好時,就只能循環(huán)等待,不能執(zhí)行其當外設未準備好時,就只能循環(huán)等待,不能執(zhí)行其他程序,這樣就浪費了他程序,這樣就浪費了CPU的大量時間,降低了的大量時間,降低了處理器的利用率。處理器的利用率。 2中斷方式中斷方式 查詢方式白白浪費了大量的處理器時間,而查詢方式白白浪費了大量的處理器時間,而中斷方式
21、才是多任務操作系統(tǒng)中最有效利用處理中斷方式才是多任務操作系統(tǒng)中最有效利用處理器的方式。當器的方式。當CPU進行主程序操作時,外設的數(shù)進行主程序操作時,外設的數(shù)據(jù)已存入端口的數(shù)據(jù)輸入寄存器,或端口的數(shù)據(jù)據(jù)已存入端口的數(shù)據(jù)輸入寄存器,或端口的數(shù)據(jù)輸出寄存器已空,此時由外設通過接口電路向輸出寄存器已空,此時由外設通過接口電路向CPU發(fā)出中斷請求信號。發(fā)出中斷請求信號。 CPU在滿足一定條件下,暫停執(zhí)行當前正在在滿足一定條件下,暫停執(zhí)行當前正在執(zhí)行的主程序,轉入執(zhí)行相應能夠進行輸入執(zhí)行的主程序,轉入執(zhí)行相應能夠進行輸入/輸出輸出操作的子程序,待輸入操作的子程序,待輸入/輸出操作執(zhí)行完畢之后,輸出操作執(zhí)
22、行完畢之后,CPU再返回并繼續(xù)執(zhí)行原來被中斷的主程序。再返回并繼續(xù)執(zhí)行原來被中斷的主程序。 系統(tǒng)引入中斷機制后,系統(tǒng)引入中斷機制后,CPU與外設處于與外設處于“并行并行”工作狀態(tài),便于實現(xiàn)信息的實時處理和系統(tǒng)的故工作狀態(tài),便于實現(xiàn)信息的實時處理和系統(tǒng)的故障處理。障處理。 3直接訪問內存(直接訪問內存(DMA)方式)方式 利用中斷,系統(tǒng)和設備之間可以通過設備驅動利用中斷,系統(tǒng)和設備之間可以通過設備驅動程序傳送數(shù)據(jù),但是,當傳送的數(shù)據(jù)量很大時,程序傳送數(shù)據(jù),但是,當傳送的數(shù)據(jù)量很大時,因為中斷處理上的延遲,利用中斷方式的效率會因為中斷處理上的延遲,利用中斷方式的效率會大大降低。而直接內存訪問(大大
23、降低。而直接內存訪問(DMA)可以解決)可以解決這一問題。這一問題。 DMA可允許設備和系統(tǒng)內存間在沒有處理器可允許設備和系統(tǒng)內存間在沒有處理器參與的情況下傳輸大量數(shù)據(jù)。參與的情況下傳輸大量數(shù)據(jù)。 設備驅動程序在利用設備驅動程序在利用DMA之前,需要選擇之前,需要選擇DMA通道并定義相關寄存器,以及數(shù)據(jù)的傳輸通道并定義相關寄存器,以及數(shù)據(jù)的傳輸方向,即讀取或寫入,然后將設備設定為利用該方向,即讀取或寫入,然后將設備設定為利用該DMA通道傳輸數(shù)據(jù)。通道傳輸數(shù)據(jù)。 設備完成設置之后,可以立即利用該設備完成設置之后,可以立即利用該DMA通通道在設備和系統(tǒng)的內存之間傳輸數(shù)據(jù),傳輸完畢道在設備和系統(tǒng)的內
24、存之間傳輸數(shù)據(jù),傳輸完畢后產生中斷以便通知驅動程序進行后續(xù)處理。后產生中斷以便通知驅動程序進行后續(xù)處理。 在利用在利用DMA進行數(shù)據(jù)傳輸?shù)耐瑫r,處理器仍進行數(shù)據(jù)傳輸?shù)耐瑫r,處理器仍然可以繼續(xù)執(zhí)行指令。然可以繼續(xù)執(zhí)行指令。4 .驅動程序結構驅動程序結構 Linux設備驅動程序的代碼結構大致可以設備驅動程序的代碼結構大致可以分為如下幾個部分:分為如下幾個部分: 1)驅動程序的注冊與注銷)驅動程序的注冊與注銷 2)設備的打開與釋放)設備的打開與釋放 3)設備的讀寫操作)設備的讀寫操作 4)設備的控制操作)設備的控制操作 5)設備的中斷和輪詢處理。)設備的中斷和輪詢處理。 1)驅動程序的注冊與注銷)驅
25、動程序的注冊與注銷 注冊:注冊:register_chrdev( );/在在fs/devices.c 注銷:注銷:unregister_chrdev( )2)打開、釋放、讀、寫、控制等)打開、釋放、讀、寫、控制等 Linux內核將通過內核將通過file_operations結構訪問驅結構訪問驅動程序提供的函數(shù),字符設備的讀寫直接使用函動程序提供的函數(shù),字符設備的讀寫直接使用函數(shù)數(shù)read( )和和write( ); 塊設備需要調用函數(shù)塊設備需要調用函數(shù)block_read( )、block_write( ); ioctl( )的用法與具體設備密切關聯(lián),因此需的用法與具體設備密切關聯(lián),因此需要根
26、據(jù)設備的實際情況進行具體分析。要根據(jù)設備的實際情況進行具體分析。 struct file_operations struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t);
27、 unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode
28、*, struct file *); int (*fsync) (struct file *, struct dentry *, int datasync); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *); ssize_t (*writev) (struct file *, const stru
29、ct iovec *, unsigned long, loff_t *); ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); ; 打開設備的接口函數(shù)是打開設備的接口函數(shù)是open,根據(jù)設備的不同,根據(jù)設備的不同,open函數(shù)完成的功能也有所不同,但通常情況下在函數(shù)完成
30、的功能也有所不同,但通常情況下在open函數(shù)中要完成如下工作:函數(shù)中要完成如下工作: 1)遞增計數(shù)器;)遞增計數(shù)器; 2)檢查特定設備的特殊情況;)檢查特定設備的特殊情況; 3) 初始化設備;初始化設備; 4) 識別次設備號。識別次設備號。 其中遞增計數(shù)器是用于設備計數(shù)的。由于其中遞增計數(shù)器是用于設備計數(shù)的。由于設備在使用時通常會打開較多次數(shù),也可以設備在使用時通常會打開較多次數(shù),也可以由不同的進程所使用,所以若有一進程想要由不同的進程所使用,所以若有一進程想要關閉該設備,則必須保證其他設備沒有使用關閉該設備,則必須保證其他設備沒有使用該設備。因此使用計數(shù)器就可以很好地完成該設備。因此使用計數(shù)
31、器就可以很好地完成這項功能。這項功能。這里,實現(xiàn)計數(shù)器操作的是用在這里,實現(xiàn)計數(shù)器操作的是用在中定義的中定義的3 個宏如下。個宏如下。MOD_INC_USE_COUNT:計數(shù)器加一。:計數(shù)器加一。MOD_DEC_USE_COUNT:計數(shù)器減一。:計數(shù)器減一。MOD_IN_USE:計數(shù)器非零時返回真。:計數(shù)器非零時返回真。 另外,當有多個物理設備時,就需要識別另外,當有多個物理設備時,就需要識別次設備號來對各個不同的設備進行不同的操作,次設備號來對各個不同的設備進行不同的操作,在有些驅動程序中并不需要用到。在有些驅動程序中并不需要用到。 釋放設備的接口函數(shù)是釋放設備的接口函數(shù)是release。要
32、注意釋放設備。要注意釋放設備和關閉設備是完全不同的。當一個進程釋放設備和關閉設備是完全不同的。當一個進程釋放設備時,其他進程還能繼續(xù)使用該設備,只是該進程時,其他進程還能繼續(xù)使用該設備,只是該進程暫時停止對該設備的使用;而當一個進程關閉設暫時停止對該設備的使用;而當一個進程關閉設備時,其他進程必須重新打開此設備才能使用。備時,其他進程必須重新打開此設備才能使用。釋放設備時要完成的工作如下:釋放設備時要完成的工作如下: 1)遞減計數(shù)器)遞減計數(shù)器MOD_DEC_USE_COUNT; 2)在最后一次釋放設備操作時關閉設備;)在最后一次釋放設備操作時關閉設備; 3)讀寫設備)讀寫設備read()和和write() 讀寫設備的主
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年農行個人貸款合同模板2篇
- 二零二五年度體育場館租賃與賽事場地標識系統(tǒng)建設合同
- 2025年度綠色生態(tài)農業(yè)園建設與管理合同4篇
- 二零二五年度個性化廚具安裝與整體廚房設計合同3篇
- 二零二五年度溫泉度假村大理石地暖鋪設合同4篇
- 二零二五年度存量房買賣合同合同糾紛處理流程與期限(2024版)4篇
- 2025年度農業(yè)耕地租賃合同環(huán)境保護與修復規(guī)范4篇
- 2025年度臨時用工勞動關系解除合同3篇
- 2025年度個人旅游服務合同標準范本3篇
- 二零二五版木材廠土地租賃合同與林業(yè)科技創(chuàng)新合作4篇
- 2025年度部隊食堂食材采購與質量追溯服務合同3篇
- 消防產品目錄(2025年修訂本)
- 地方性分異規(guī)律下的植被演替課件高三地理二輪專題復習
- 繪本 課件教學課件
- 光伏項目風險控制與安全方案
- 9.2提高防護能力教學設計 2024-2025學年統(tǒng)編版道德與法治七年級上冊
- 催收培訓制度
- 牧場物語-礦石鎮(zhèn)的伙伴們-完全攻略
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理體系 審核與認證機構要求》中文版(機翻)
- 人教版六年級上冊解方程練習300道及答案
- 2024年廣東省高考地理真題(解析版)
評論
0/150
提交評論