裝置驅動分層結構示意圖:
字元裝置驅動程式示意圖:
分配和釋放裝置編號
必須先在中宣告:
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等。這...