Kernel-Modules
如何在 /dev/ 子目錄中創建多個設備(核心驅動程序)
我正在寫一個核心模組。我可以輕鬆地在 /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 規則的方法(我寧願以程式方式進行)。這比我之前想像的要容易。
alloc_chrdev_region
對於設備數量。- 為每個設備創建類(每個具有不同的名稱)
devnode
使用您的自定義函式例如設置類的欄位:return kasprintf(GFP_KERNEL, "name/%d", global++);
. 這就是命名發生的地方。Udev 應該尊重這個功能。cdev_init
使用&&創建 cdevscdev_add
並設置他們的 fops。device_create
使用(parent 為 NULL)創建設備請注意,這裡沒有設備層次結構,只是碰巧位於同一 /dev/ 目錄中的獨立設備。在步驟 2-5 中指定的名稱將在 /sys/ 中結束。