【问题标题】:making linux virtual device driver work with udev使 linux 虚拟设备驱动程序与 udev 一起工作
【发布时间】:2017-12-06 10:10:09
【问题描述】:

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

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

  • ID_BUS
  • ID_SERIAL
  • ID_PATH

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

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

所以问题是:

如何将PATHSERIALBUS 属性添加到虚拟 设备驱动程序,以使udev 看到它们?

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

【问题讨论】:

    标签: linux-device-driver virtual udev v4l2loopback


    【解决方案1】:

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

    $ udevadm monitor --environment --udev
    

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

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

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

    【讨论】:

    • 谢谢;这个问题实际上更倾向于调整设备驱动程序以与现有的 udev 规则很好地配合。我想Q需要一些澄清......
    猜你喜欢
    • 2015-09-18
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多