首页 > 解决方案 > 为什么这个 udev 规则没有在启动时应用,而是使用 udevadm test /sys/module/printk 应用?

问题描述

上下文
我需要禁用串行控制台作为唤醒源,以便在通过 PC 上的串行按键连接时不会将设备从待机/休眠状态唤醒。我发现 /sys/module/printk/parameters/console_suspend 属性文件的值可以设置为 'N' 来实现。我有一个设置此值的 API 函数,但该函数由非 root 用户调用。这里的问题是 /sys/module/printk/parameters/console_suspend 归 root 所有,因此在调用 API 函数时会引发权限被拒绝错误。我发现可以设置udev规则来更改文件组,以便非root用户可以修改属性文件。

我尝试了什么我尝试
在 /etc/udev/rules.d/extra.rules 中添加以下规则

SUBSYSTEM=="module", DEVPATH=="/module/printk", PROGRAM="/bin/sh -c 'chown root:groupA /sys/module/printk/parameters/console_suspend'"

然后是重新加载规则的命令

udevadm control --reload-rules

但在系统启动期间或尝试时

udevadm trigger

此规则不适用。但是,它在运行测试时应用

udevadm test /sys/module/printk

尝试使用调试udevadm 触发器调用

udevadm monitor 

但没有与 /sys/module/printk 相关的输出

问题
1. 是否可以使用 udev 更改此文件的所有权?
2. 除了 udev 之外,还有其他改变所有权的选择吗?
3. 任何其他禁用串行控制台作为唤醒源的选项(例如一些 /sys/.../wakeup 文件)?

标签: kernel-moduleudevsysfs

解决方案


推荐阅读