Linux 内核:设置通过 create_device() 创建的 /dev 文件的权限

use*_*668 3 linux permissions linux-kernel chardev

我正在制作一个小型 Linux 模块,它是 char 设备的驱动程序。在我的代码中,我创建了设备类,而不是设备本身,因此在我的系统中创建了一个 /dev 文件。问题是/dev文件只有root权限,而用户对该文件既没有读、写也没有执行权限,我想更改/dev文件权限。

我在网上搜索了答案,发现是更改 udev 文件,但此解决方案在我的情况下不起作用,因为我需要在模块加载到内核时动态更改的权限。我正在编写的模块并不总是在我的机器上运行,因此我需要它来“动态”更改权限。

major_number_firewall = register_chrdev(0, device_name_firewall, &my_file_implementation_firewall);

device_class = class_create(THIS_MODULE, class_name_firewall);

log_file_device = device_create(device_class, NULL, MKDEV(major_number_firewall, MINOR_LOG), NULL, device_name_log_file);
Run Code Online (Sandbox Code Playgroud)

有没有修改权限的功能?

ask*_*skb 5

  1. 您可以编写一个小的udev 规则来实现此目的。

  2. 如果您正在实现字符设备驱动程序,请考虑使用misc_register()and misc_unregister()which 是上述调用的包装器 ( device_create()...)。参考结构体miscdevice

    struct miscdevice  {
        int minor;
        const char *name;
        const struct file_operations *fops;
        struct list_head list;
        struct device *parent;
        struct device *this_device;
        const char *nodename;
        umode_t mode;
    };
    
    Run Code Online (Sandbox Code Playgroud)

您可以使用成员(struct miscdevice *)->mode来设置适当的权限(S_IRUGO | S_IRWXUGO | S_IALLUGO | 等等...)

希望这可以帮助。