scull裝置是乙個操作記憶體的字元裝置,不是真正的裝置,只是向核心註冊為字元裝置,並使用記憶體來訪問資料。
1. scull的設計
2. 主裝置號和次裝置號
主裝置號用來區分不同種類的裝置,而次裝置號用來區分同一型別的多個裝置。核心由次裝置號確定當前所指向的是哪個裝置。根據所編寫的驅動程式,可以從核心那裡得到乙個直接指向裝置的指標,或者使用次裝置號作為乙個裝置本地陣列的索引。
主裝置號:標識與裝置關聯的驅動程式。
次裝置號:由核心使用,用於確定裝置檔案所指的裝置。
3. 裝置編號的內部表達
在核心中,dev_t型別(
3.1 獲取dev_t的主裝置號或次裝置號:
major
(dev_t dev)
;minor
(dev_t dev)
;
3.2 將主裝置號和次裝置號轉換成dev_t型別:mkdev
(int major,
int minor)
;
4. 分配和釋放裝置編號
在建立乙個字元裝置之前,驅動程式需要獲得乙個或多個裝置編號。
4.1 靜態申請裝置編號
如果提前確定所需要的裝置編號,可以通過register_chrdev_region()函式註冊裝置編號:
#include
intregister_chrdev_region
(dev_t first,
unsigned
int count,
char
*name)
;
4.2 動態申請裝置編號
如果不知道裝置將要使用的裝置編號,可以通過alloc_chrdev_region()函式註冊裝置編號:
#include
intalloc_chrdev_region
(dev_t *dev,
unsigned
int firstminor,
unsigned
int count,
char
*name)
;
5. 釋放裝置編號
在不使用申請的裝置編號時,要釋放這些裝置編號,通常在模組的清除函式中釋放申請的裝置編號;裝置編號的釋放需要使用以下函式實現:
#include
void
unregister_chrdev_region
(dev_t first,
unsigned
int count)
;
在scull驅動中獲取主裝置號的**
if
(scull_major)
else
if(result <0)
驅動 linux裝置驅動 字元裝置驅動開發
preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...
Linux裝置驅動之《字元裝置驅動》
linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...
Linux裝置驅動之字元裝置驅動
一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...