代码之家  ›  专栏  ›  技术社区  ›  Jack

如何在Linux内核中设置设备文件的组id?

  •  0
  • Jack  · 技术社区  · 7 年前

    我的声音设备如下所示:

    # ls -l /dev/snd                                                                                                                    
    crw-rw----    1 root     root      116,   0 Jan  1 00:00 controlC0                                                                  
    crw-rw----    1 root     root      116,  24 Jan  1 00:00 pcmC0D0c                                                                   
    crw-------    1 root     root      116,  33 Jan  1 00:00 timer                                                                      
    

    # ls -l /dev/snd                                                                                                                    
    crw-rw----    1 root     audio      116,   0 Jan  1 00:00 controlC0                                                                  
    crw-rw----    1 root     audio      116,  24 Jan  1 00:00 pcmC0D0c                                                                   
    crw-------    1 root     audio      116,  33 Jan  1 00:00 timer                                                                      
    

    我知道有udev可以在添加设备时应用规则来更改组,但由于我完全控制了内核代码,我想在内核中修改它,可能还有设备驱动程序代码。

    我该怎么做?添加设备时,Linux如何分配组?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Jack    7 年前

    在Linux中,声音设备通常通过ALSA和 ALSA wiki :

    udev是管理/dev目录的标准方法,旨在解决以前的/dev实现中的一些问题,并提供一个健壮的前进路径。

    udev规则灵活且功能强大。编写udev规则应该能够解决常见的Alsa问题,有几个人报告说:

    每当您插入或拔出设备时,为多个音频设备分配相同的hwplug:x、y编号。 使用设备的产品ID或USB总线ID识别两个相同的音频设备。

    根据上述内容,我在Ubuntu pc上运行了以下命令,进行了一些实验:

    sudo udevadm control --stop-exec-queue
    

    我发现这些群变成了根,但不再是音频。

    因此,到目前为止,ALSA通常使用udev处理音频组修改,并且驱动程序中不应该有组修改代码。我将使用udev解决我的问题,谢谢你的帮助:)