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