Linux裝置驅動 字元裝置驅動程式scull

2021-10-14 07:09:09 字數 1439 閱讀 4373

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等。這...