0

我正在尝试修复v4l2loopback驱动程序以与 udev 一起使用(让 udev 自动分配稳定的设备名称)。

问题似乎是,设备驱动程序没有公开一些 udev 似乎需要正确使用标准的字段60-persistent-v4l.rules,即:

  • ID_BUS
  • ID_SERIAL
  • ID_PATH

此外,udevadm test-builtin path_id在设备上运行不会返回任何内容(退出代码为1)。

现在我在网上找到的任何示例都假定我想编写一个 USB 设备驱动程序。v4l2loopback不幸的是,对于作为设备的设备而言,情况并非如此virtual

所以问题是:

如何将PATH,SERIALBUS属性添加到虚拟设备驱动程序,以便udev查看它们?

注意:这个问题的真正目标是修复设备驱动程序,以便它与现有的 udev 规则很好地配合(而不是调整 udev 以便正确识别设备)。

4

1 回答 1

1

运行这个命令来查看从 linux 内核发送到用户空间 udev 的所有内容:

$ udevadm monitor --environment --udev

如果这显示了您需要的内容,则在规则文件中使用它,否则创建一个 shell 脚本,从 udev 规则文件中调用该脚本,然后从 shell 脚本解析 sysfs 以获取您正在寻找的参数。这是典型的标准方式。

环境变量是使用 add_uevent_var() 函数从内核发送的。在内核中,主要是内核、类和总线驱动程序调用函数来创建和发送 uevent。查看此链接以注意总线 anc 类驱动程序。此链接也有助于探索更多相关信息。

虚拟设备和真实设备之间需要注意的一个重要区别是我们何时可以访问可以调用函数的 kobject。

于 2017-12-07T06:14:10.980 回答