歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix教程 >> Unix操作系統之設備驅動程序

Unix操作系統之設備驅動程序

日期:2017/2/27 17:37:55   编辑:Unix教程

由於經常學習Unix操作系統的一些知識,而且很喜歡Unix操作系統,在工作中也很喜歡總結關於Unix操作系統相關的經驗教訓,下面就Unix操作系統下的設備驅動程序問題來詳細說說吧。

Unix操作系統下的設備驅動程序

具體到系統裡,設備驅動程序所提供的這組入口點由一個結構來向系統進行說明,其中,struct inode提供了關於特別設備文件/dev/driver(假設此設備名為driver)的信息,它的定義為:
dev_t i_rdev& /* Device major and minor numbers*/
struct vm_area_struct * i_mmap&
unsigned short i_flags& /* Mount flags see fs.h */

struct file主要用於與Unix操作系統文件系統對應的設備驅動程序使用。當然,其它設備驅動程序也可以使用它。它提供關於被打開的文件的信息,定義為:unsigned short f_flags& /* The flags arg passed to open */

在結構file_operations裡,指出了設備驅動程序所提供的入口點位置,分別是:

1 lseek,移動文件指針的位置,顯然只能用於可以隨機存取的設備。

2 read,Unix操作系統進行讀操作,參數buf為存放讀取結果的緩沖區,count為所要 讀取的數據長度。返回值為負表示讀取操作發生錯誤,否則返回實際讀取 的字節數。對於字符型,要求讀取的字節數和返回的實際讀取字節數都必須是inode- i_blksize的的倍數。

3 write,進行寫操作,與read類似。

4 readdir,取得下一個目錄入口點,只有與Unix操作系統文件系統相關的設備驅動程序 才使用。

5 selec,進行選擇操作,如果驅動程序沒有提供select入口,select操 作將會認為設備已經准備好進行任何的I/O操作。

6 ioctl,進行讀、寫以外的其它操作,參數cmd為自定義的的命令。

7 mmap,用於把設備的內容映射到地址空間,一般只有塊設備驅動程序使 用。

8 open,打開設備准備進行I/O操作。返回0表示打開成功,返回負數表示失敗。如果驅動程序沒有提供open入口,則只要/dev/driver文件存在就認為打開成功。

9 release,即close操作。 設備驅動程序所提供的入口點,在設備驅動程序初始化的時候向系統進行登 記,以便系統在適當的時候調用。LINUX系統裡,通過調用register_chrdev 向系統注冊字符型設備驅動程序。register_chrdev定義為:
int register_chrdevunsigned int major, const char *name,

其中,major是為設備驅動程序向Unix操作系統申請的主設備號,如果為0則Unix操作系統為此 驅動程序動態地分配一個主設備號。name是設備名。fops就是前面所說的對各個 調用的入口點的說明。此函數返回0表示成功。返回-EINVAL表示申請的主設備號 非法,一般來說是主設備號大於系統所允許的最大設備號。返回-EBUSY表示所申 請的主設備號正在被其它設備驅動程序使用。

如果是動態分配主設備號成功,此 函數將返回所分配的主設備號。如果register_chrdev操作成功,設備名就會出 現在/proc/devices文件裡。

初始化部分一般還負責給設備驅動程序申請系統資源,包括內存、中斷、時 鐘、I/O端口等,這些資源也可以在open子程序或別的地方申請。在這些資源不 用的時候,應該釋放它們,以利於資源的共享。 在Unix操作系統裡,對中斷的處理是屬於系統核心的部分,因此如果設備與系

統之間以中斷方式進行數據交換的話,就必須把該設備的驅動程序作為Unix操作系統核心的一部分。設備驅動程序通過調用request_irq函數來申請中斷,通過free_irq 來釋放中斷。

以上,我們就完成了對Unix操作系統下的設備驅動程序介紹。希望對大家對Unix操作系統的學習有所幫助。

Copyright © Linux教程網 All Rights Reserved