如何在 /dev/ 子目录中创建多个设备(内核驱动程序)

如何在 /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 代码,但不知道字符设备添加到什么“父级”)。

我怎样才能做类似的事情?

答案1

我找到了一种适合我的方法,一种不使用 udev 规则的方法(我宁愿以编程方式执行)。这比我之前想象的要容易。

  1. alloc_chrdev_region对于设备数量。
  2. 为每个设备创建类(每个类具有不同的名称)
  3. 使用自定义函数设置类的devnode字段,例如:return kasprintf(GFP_KERNEL, "name/%d", global++);。这就是命名发生的地方。 Udev 应该尊重这个功能。
  4. 使用cdev_init&&创建 cdevcdev_add并设置它们的 fops。
  5. 创建设备device_create(父级为 NULL)

请注意,这里没有设备层次结构,只是碰巧位于同一 /dev/ 目录中的独立设备。步骤 2-5 中指定的名称最终将位于 /sys/ 中。

相关内容