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

Linux内核:设置通过create_device()创建的/dev文件的权限,linux,permissions,linux-kernel,chardev,Linux,Permissions,Linux Kernel,Chardev,我正在制作一个小的linux模块,它是一个char设备的驱动程序。 在我的代码中,我创建了设备类,而不是设备本身,因此/dev文件是 在我的系统中创建。问题是/dev文件只有根权限和用户权限 没有对该文件的读、写或执行权限,我想更改 /开发人员文件权限 我在网上搜索了答案,发现是修改了udev文件,但是 解决方案在我的情况下不起作用,因为我需要在模块加载到内核时动态更改权限。我正在编写的模块不会总是在我的机器上运行,因此我需要它“动态”更改权限 是否有更改权限的功能?您可以尝试此功能 #包括 i

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

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

是否有更改权限的功能?

您可以尝试此功能

#包括

int chmod(const char*path,mode\u t mode)
intfchmod(intfd,mode\u t mode)

或者在
/etc/udev/udev.conf,


您可以修改
default\u mode=“0660”

我认为Rocoder的意思是首先使用

int chmod(常量字符*路径,模式\u t模式);或int fchmod(int fd,mode_t mode)

在用户空间应用程序中。然后使用open()打开设备文件并执行任何操作

还要注意:我们不能将程序chmod本身设置为超级用户模式。这是为了确保没有非法程序占据系统

  • 您可以编写一个小程序来实现这一点

  • >P>如果您正在执行一个字符设备驱动程序,那么考虑使用<代码> MISC*RealStices()/<代码>和<代码> MISCUNORDESTREST()/<代码>,它是上面调用的包装器(<代码> DEVICEX CREATE())<代码>…指

    您可以使用成员
    (struct miscedevice*)->模式
    设置适当的权限(S_IRUGO | S_IRWXUGO | S|u IALLUGO |等)


    希望这能有所帮助。

    要设置misc设备的权限,您可以使用以下模式字段

    static struct miscdevice somedevice = {
        .minor  = MISC_DYNAMIC_MINOR,
        .name   = DEVICE_NAME,
        .fops   = &some_fops,
        .mode   = 0666,
    };
    
    这将设置所有的读/写访问权限。 要执行读/写操作,您不需要是root


    希望这能有所帮助。

    嘿,谢谢你的回答,但是不可能将文件包含在内核模块中。正如我提到的,更改udev文件不是一个选项。
    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;
    };
    
    static struct miscdevice somedevice = {
        .minor  = MISC_DYNAMIC_MINOR,
        .name   = DEVICE_NAME,
        .fops   = &some_fops,
        .mode   = 0666,
    };