1. 程式人生 > 其它 >[Linux 驅動] --register_chrdev() 、 class_create()、device_create()、三個函式的說明 (自動建立裝置節點)

[Linux 驅動] --register_chrdev() 、 class_create()、device_create()、三個函式的說明 (自動建立裝置節點)

register_chrdev(MEM_MAJOR,"char0",&fops) 向核心註冊了一個字元裝置(不只是註冊了裝置號,還做了 cdev 的初始化以及 cdev 的註冊)。第一個引數為主裝置號,0代表動態分配,這裡的 MEM_MAJOR 為1;第二個引數是裝置的名字;第三個引數為檔案操作指標,完成註冊後,在 /proc/devices 中第一個字元裝置我們就看到了 :/char0。

static const struct file_operations fops = {
        .read = il3945_sta_dbgfs_stats_table_read,
        .open = simple_open,
        .llseek = default_llseek,
};

自動建立節點
在驅動中加入對 udev 的支援(自動建立裝置節點)的主要做法是:在驅動初始化的程式碼裡呼叫 class_create() 為該裝置建立一個 class,再為每個裝置呼叫 device_create() 建立對應的裝置。

核心中定義的 struct class 結構體,顧名思義,一個 struct class 結構體型別的變數對應一個類,核心同時提供了 class_create() 函式,可以用它來建立一個類(class),這個類(class)存放在 sysfs 下面,一旦建立好了這個類,再呼叫 device_create() 函式來在 /dev 目錄下建立相應的裝置節點。

這樣,載入模組的時候,使用者空間中的 udev 會自動響應 device_create() 函式,去 /sysfs 下尋找對應的類,從而建立裝置節點。


————————————————
版權宣告:本文為CSDN博主「BestW2Y」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/u014674293/article/details/101377823/