Linux字元裝置驅動

2021-09-06 10:56:51 字數 2321 閱讀 7681

裝置驅動分層結構示意圖:

字元裝置驅動程式示意圖:

分配和釋放裝置編號

必須先在中宣告:

1、int register_chrdev_region(dev_t first, unsigned int count, char *name);

這裡, first 是你要分配的起始裝置編號. first 的次編號部分常常是 0, 但是沒有要求是那個效果.

count 是你請求的連續裝置編號的總數.最後, name 是應當連線到這個編號範圍的裝置的名字; 它會出現在 /proc/devices 和 sysfs 中.

如同大部分核心函式, 如果分配成功進行, register_chrdev_region 的返回值是 0. 出錯的情況下, 返回乙個負的錯誤碼, 你不能訪問請求的區域.

2、int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name);

使用這個函式, dev 是乙個只輸出的引數, 它在函式成功完成時持有你的分配範圍的第乙個數。

fisetminor 應當是請求的第乙個要用的次編號; 它常常是 0。count 和 name 引數如同給 request_chrdev_region 的一樣.

3、void unregister_chrdev_region(dev_t first, unsigned int count);

呼叫 unregister_chrdev_region 的地方常常是你的模組的 cleanup 函式.

一些重要的資料結構

file_operations 結構:

struct file_operations scull_fops = ;

file 結構

struct file, 定義於 , 是裝置驅動中第二個最重要的資料結構.注意,file 與使用者空間程式的 file 指標沒有任何關係.

乙個 file 定義在 c庫中, 從不出現在核心**中. 乙個 struct file, 另一方面, 是乙個核心結構, 從不出現在使用者程式中.

在核心原始碼中, struct file 的指標常常稱為 file 或者 filp("file pointer"). 我們將一直稱這個指標為 filp 以避免和結構自身混淆。因此,file 指的是結構, 而 filp 是結構指標。

inode 結構

字元裝置驅動的讀寫:

open 方法

int (*open)(struct inode *inode, struct file *filp);

巨集container_of(pointer, container_type, container_field);

scull_open 的**(稍微簡化過)是:

int scull_open(struct inode *inode, struct file *filp)

return 0; /* success */

}release 方法

int scull_release(struct inode *inode, struct file *filp)

讀和寫(read and write)

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

ssize_t write(struct file *filp, const char __user *buff, size_t count, loff_t *offp);

unsigned long copy_to_user(void __user *to,const void *from,unsigned long count);

unsigned long copy_from_user(void *to,const void __user *from,unsigned long count);

例項**:

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...

Linux裝置驅動之《字元裝置驅動》

linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...

Linux裝置驅動之字元裝置驅動

一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...