linux字元裝置註冊相關函式

2021-06-05 20:15:58 字數 1154 閱讀 7506

本文介紹linux字元裝置註冊相關的四個函式:cdev_alloc、cdev_init、cdev_add和cdev_del。這四個函式在檔案:fs/char_dev.c中定義,在標頭檔案include/linux/cdev.h中宣告。其中cdev_alloc和cdev_init是一對「互斥」函式,以不同的方式完成「相同」的功能:為函式cdev_add做前期準備。

cdev_alloc

509 struct cdev *cdev_alloc(void)

510

517     return p;

518 }

從函式名稱和第511行的**可以看出:這個函式動態申請結構體struct cdev,並對其進行初始化,最後將其指標返回。下面結合cdev_init進行進一步說明。

cdev_init

528 void cdev_init(struct cdev *cdev, const struct file_operations *fops)

529

cdev_alloc和cdev_init的主要區別是:前者動態申請結構體struct cdev並對其進行初始化,後者將通過引數傳進來的結構體struct cdev進行初始化。

另乙個主要區別是:cdev_alloc函式中沒有對struct cdev的ops域進行初始化,需要在cdev_alloc函式呼叫之後有專門的**對struct cdev的ops域進行初始化,而cdev_init函式中使用通過引數傳進來的struct file_operations結構體指針對struct cdev的ops域進行初始化,所以在函式cdev_init呼叫之後不需要再對struct cdev的ops域進行初始化。

cdev_add

457 int cdev_add(struct cdev *p, dev_t dev, unsigned count)

458

函式cdev_alloc和cdev_init只是(申請)並初始化了(部分)結構體struct cdev,此時,struct cdev和核心還沒有任何關係。

函式cdev_add就是將函式cdev_alloc和cdev_init初始化後的struct cdev結構體註冊到核心中(第461行),自此核心就可以訪問裝置了。

cdev_del

本函式和函式cdev_add功能相反,從核心中刪除裝置。

Linux 驅動之字元裝置註冊

目的 給空模組新增驅動殼子 核心工作量 file operations及其元素填充 註冊驅動。腦海裡先有框架,知道自己要幹嘛 細節 不需要乙個字乙個字敲,可以到核心中去尋找參考 複製過來改 寫下的所有 必須心裡清楚明白,不能似懂非懂。先定義file operations結構體變數 自定義乙個file...

linux 動態靜態字元裝置註冊

雜項裝置的主裝置號是固定的 是10,當不想固定時,需要自己去申請是靜態裝置註冊,動態的是系統分配 首先來說靜態註冊 include 包含初始化巨集定義的標頭檔案,中的module init和module exit在此檔案中 include 包含初始化載入模組的標頭檔案,中的module licens...

字元裝置註冊例項

實驗平台 s5pv210開發板 kernel2.6 功能 驅動三顆led,led1 led2,共用乙個fops,led3單獨使用乙個fops。當open led1 led2 時,led1 和 led2 同時亮,open led3 時,led3亮 release 對應熄滅。include includ...