字元裝置驅動簡介

2022-03-24 12:03:06 字數 2250 閱讀 1005

通過字元裝置檔案,應用程式可以使用相應的字元裝置驅動程式來控制字元裝置。建立字元裝置檔案的方法:

字元裝置在核心中使用struct cdev來描述。

struct cdev
linux核心中使用dev_t型別來定義裝置號,dev_t這種型別其實質為32位的unsigned int,其中高12位為主裝置號,低20位為次裝置號.

dev_t dev = mkdev

(主裝置號,次裝置號)

主裝置號 = major

(dev_t dev)

次裝置號=minor

(dev_t dev)

通過函式register_chrdev_region向核心申請使用。

缺點:如果申請使用的裝置號已經被核心中的其他驅動使用了,則申請失敗。

使用alloc_chrdev_region由核心分配乙個可用的主裝置號。

優點:因為核心知道哪些號已經被使用了,所以不會導致分配到已經被使用的號。

在驅動退出時,使用unregister_chrdev_region函式釋放裝置號。

struct file_operations ;
這裡面的函式在驅動中不用全部實現,不支援的操作留置為null即可。eg.

struct file_operations dev_fops = ;
cdev變數的定義可以採用靜態和動態兩種辦法

·靜態分配struct cdev mdev;

·動態分配struct cdev *pdev = cdev_alloc();

struct cdev的初始化使用cdev_init函式來完成。

cdev_init(struct cdev *cdev, const struct file_operations *fops)

引數:cdev: 待初始化的cdev結構

fops: 裝置對應的操作函式集

字元裝置的註冊使用cdev_add函式來完成。

cdev_add(struct cdev *p, dev_t dev, unsigned count)

引數:p: 待新增到核心的字元裝置結構

dev: 裝置號

count: 該類裝置的裝置個數

open裝置方法是驅動程式用來為以後的操作,完成初始化準備工作的。在大部分驅動程式中,open完成標明次裝置號、啟動裝置兩個工作。

原型:

int (*open) (struct inode *, struct file *)
裝置方法有時也稱為close

原型:

int (*release) (struct inode *, struct file *)
read裝置方法通常完成2件事情:

ssize_t (*read) (struct file *filp, char __user *buff, size_t count, loff_t *offp)

引數分析:

filp:與字元裝置檔案關聯的file結構指標, 由核心建立。

buff : 從裝置讀取到的資料,需要儲存到的位置。由read系統呼叫提供該引數。

count: 請求傳輸的資料量,由read系統呼叫提供該引數。

offp: 檔案的讀寫位置,由核心從file結構中取出後,傳遞進來。

原型:

ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *)
每乙個存在於檔案系統裡面的檔案都會關聯乙個inode 結構,該結構主要用來記錄檔案物理上的資訊。因此, 它和代表開啟檔案的file結構是不同的。乙個檔案沒有被開啟時不會關聯file結構,但是卻會關聯乙個inode 結構。

重要成員:

dev_t i_rdev:裝置號

從核心中解除安裝驅動程式的時候,需要使用cdev_del函式來完成字元裝置的登出。

原型:

void cdev_del

(struct cdev *)

;

裝置驅動簡介

系統呼叫是作業系統核心和應用程式之間的介面,裝置驅動程式是作業系統核心和機器硬體之間的介面。裝置驅動程式為應用程式遮蔽了硬體的細節,這樣在應用程式看來,硬體只是個裝置檔案,應用程式可以象操作普通檔案一樣對硬體裝置進行操作。裝置驅動與使用者程式的區別 1 應用程式以main 開始 驅動程式沒有main...

驅動開發 字元裝置 塊裝置簡介 sky原創

驅動開發 字元裝置,塊裝置,網路裝置 字元裝置 以位元組流的方式訪問,不能隨機訪問 有例外,顯示卡 eeprom可以隨機訪問 eeprom可以擦寫1億次,是一種字元裝置,可以隨機訪問 讀寫是直接訪問硬體的 flash 擦寫次數有限,一百萬次,容易有壞塊 塊裝置 能隨機訪問 以 塊 為單位進行訪問 塊...

linux字元裝置及其驅動編寫簡介

1.1字元裝置簡介 字元裝置是一種按序列順序來訪問的裝置,如觸控螢幕,磁帶驅動器,滑鼠等。1.2字元裝置驅動 字元裝置驅動負責驅動字元裝置,通常實現由open read write close ioctl 等函式。1.3裝置號 裝置號分為主次裝置號,主裝置號標示裝置與哪個驅動相連,次裝置號標示同乙個...