Kernel-Modules

如何在 /dev/ 子目錄中創建多個設備(核心驅動程序)

  • July 26, 2018

我正在寫一個核心模組。我可以輕鬆地在 /dev/ 中創建一個字元設備,但我希望我的使用者可以使用3 個設備,最好將它們全部放在**/dev/ 子目錄**下。

可能的例子(存在於我的 openSUSE 盒子上):

# ls -l /dev/bsg
total 0
crw-rw---- 1 root root 252, 0 Jul 17 14:28 0:0:0:0
crw-rw---- 1 root root 252, 1 Jul 17 14:28 0:0:1:0
crw-rw---- 1 root root 252, 2 Jul 17 14:28 0:0:2:0
crw-rw---- 1 root root 252, 3 Jul 17 14:28 0:0:3:0
crw-rw---- 1 root root 252, 4 Jul 17 14:28 0:0:4:0
crw-rw---- 1 root root 252, 5 Jul 17 14:28 1:0:0:0

(我查看了 bsg.c 程式碼,但不知道將字元設備添加到什麼“父級”)。

我該怎麼做類似的事情?

我找到了一種適合我的方法,一種不使用 udev 規則的方法(我寧願以程式方式進行)。這比我之前想像的要容易。

  1. alloc_chrdev_region對於設備數量。
  2. 為每個設備創建類(每個具有不同的名稱)
  3. devnode使用您的自定義函式例如設置類的欄位: return kasprintf(GFP_KERNEL, "name/%d", global++);. 這就是命名發生的地方。Udev 應該尊重這個功能。
  4. cdev_init使用&&創建 cdevscdev_add並設置他們的 fops。
  5. device_create使用(parent 為 NULL)創建設備

請注意,這裡沒有設備層次結構,只是碰巧位於同一 /dev/ 目錄中的獨立設備。在步驟 2-5 中指定的名稱將在 /sys/ 中結束。

引用自:https://unix.stackexchange.com/questions/456877