Linux内核模块字符设备权限

Yer*_*aze 2 linux linux-device-driver linux-kernel

是否可以在linux内核模块中创建一个以mod 666开头的字符设备?现在它总是600(由root拥有),我必须chmod它.我可以创建udev条目来解决它,但我真的更喜欢模块自动完成它.

可能吗?我在cdev_init或cdev_add文档中找不到任何关于此的信息.

Fed*_*ico 9

您可以通过dev_uevent在类结构中设置方法来完成此操作.在此方法中,您必须设置DEVMODEuevent变量.这是一个例子

static int my_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
{
    add_uevent_var(env, "DEVMODE=%#o", 0440);
    return 0;
}

static struct class my_class = {
    .name                = "myname",
    .owner                = THIS_MODULE,
    .dev_uevent        = my_dev_uevent,
    [...]
};
Run Code Online (Sandbox Code Playgroud)

  • `file_operations` 可能从未有过 `dev_uevent` 方法。如果你再次阅读答案,你会发现我在谈论 `struct class`,你可以很容易地验证今天仍然存在 `dev_uevent` 方法 (2认同)