【发布时间】:2017-09-22 09:23:44
【问题描述】:
我的声音设备如下所示:
# 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
但在普通的 Linux 内核上应该是这样的(注意组是“音频”):
# 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如何分配组?
PS:我正在使用带有 4.1 版的嵌入式内核。第一个来自它。第二个来自我的 Ubuntu 电脑,我没有看到它使用 udev 规则。我看过一本书说用户/组属性是在创建文件时由进程ID/GID分配的,那么为什么Ubuntu pc有不同的组?
【问题讨论】:
-
SO 不是免费的编码服务。您必须自己尝试解决问题。如果您无法使其正常工作,请发布您尝试过的内容,我们会帮助您解决问题。
-
内核如何知道哪个组是
audio组?这取决于/etc/group文件中的内容。 -
@Barmar 是的,我在 /etc/group 中添加了类似 audio::200: 的行,但它仍然需要在设备上设置一个音频组才能工作。我还修改了驱动程序代码中的结构属性和其他数据,但没有运气。我已经用谷歌搜索了一段时间,但大多数答案都是关于使用 udev。我不需要代码,可能一些关于阅读的内容就足够了。
-
我会做更多的尝试,看看有什么变化。我的下一个尝试可能是 sysfs 或 kobjects。
-
我的意思是内核对特定组一无所知。您必须将数字 200 硬编码到您的设备驱动程序中才能进行此更改,这是一个坏主意。你应该在用户代码中处理这种事情,而不是内核。
标签: linux linux-kernel device-driver