Linux字元裝置驅動 cdev結構體day00

2021-08-30 08:52:44 字數 1391 閱讀 7194

day00

摘要:linux字元裝置驅動cdev結構體

1.cdev結構體:描述乙個字元裝置

**定義:

struct;
(1)dev_t定義裝置號,32位,12位主裝置號,20位次裝置號.

(2)使用巨集major,minor可以獲得裝置主次號:

major(dev_t dev)  /*主裝置號*/

minor(dev_t dev) /*次裝置號*/

(3)巨集mkdev可以通過主裝置號和次裝置號生成dev_t

mkdev(int major,int minor)
(4)成員函式file_operations定義了字元裝置驅動提供給虛擬檔案系統的介面函式.

(5)linux核心提供了一組函式用於操作cdev結構體:

void cdev_init(struct cdev *,struct file_operations *);

/*初始化cdev成員,並建立cdev和file_operations之間的連線.*/

struct cdev *cdev_alloc(void);

/*動態申請乙個cdev記憶體*/

void cdev_put(struct cdev *p);

int cdev_add(struct cdev *,dev_t,unsigned);

/*完成字元裝置註冊(新增乙個cdev),呼叫發生在字元裝置驅動模組載入函式中*/

void cdev_del(struct cdev *);

/*刪除乙個cdev,呼叫發生在模組解除安裝函式中*/

在向系統註冊字元裝置之前,應先呼叫

register_chrdev_region(dev_t from, unsigned count, const char *name)/*用於已知起始裝置號*/

alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)/*用於裝置號未知*/
其中,baseminor是指定的第乙個次裝置號,一般為0,裝置號總數count,name裝置名.呼叫該函式自動儲存請求到的裝置號到dev中

函式向系統申請裝置號.後者的優點在於能自動避開裝置號重複的衝突.

count不能太大,否則會溢位到下乙個主裝置號.

同理,登出字元裝置後,要釋放申請的裝置號,呼叫

unregister_chrdev_region(dev_t from, unsigned count)

Linux 字元裝置驅動cdev

關鍵字 字元裝置檔案建立 device create 字元裝置cdev 與裝置號dev t的聯絡 sys class 目錄下建立類目錄class create linux下面一切皆是檔案,這句是有 的,這個 起因,應該就是vfs 虛擬檔案系統,將soc下面的所有外設,都抽象成乙個個檔案進行管理。外設...

使用靜態裝置節點的cdev字元驅動GPIO

檔案 beep.rar 大小 21kb 儘管在2.6的核心版本已經支援udev,可以很方便的使用,並且使用也很舒服。但是使用udev,在啟動過程中掃瞄 sys class目錄並生成裝置節點的時間稍微有點長,在一些系統中是無法忍受的,所以沒辦法只好放棄udev,回到靜態裝置節點的時代,以加快啟動速度。...

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

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