首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux内核:为通过create_device()创建的/dev文件设置权限

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

Stack Overflow用户
提问于 2014-05-02 17:28:59
回答 4查看 6.9K关注 0票数 3

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

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

代码语言:javascript
运行
复制
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);

有没有修改权限的功能?

EN

回答 4

Stack Overflow用户

发布于 2014-11-05 21:25:46

  1. 你可以写一个小的udev rules来实现这一点。
  2. 如果你正在实现一个字符设备驱动程序,那么考虑使用misc_register()misc_unregister(),它是上述调用的包装器(device_create()...)。请参阅struct miscdevice

结构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模式;};

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

希望这能有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2014-11-05 20:30:25

我认为Rocoder的意思是首先使用以下命令更改设备文件的权限

int chmod(const char *path,mode_t模式);OR int fchmod(int fd,mode_t模式);

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

还请注意:我们不能让程序chmod本身在其内部进入超级用户模式。这是为了确保不会有非法程序控制系统。

票数 1
EN

Stack Overflow用户

发布于 2014-05-02 22:20:30

你可以试试这个

#include <sys/stat.h>

int chmod(const char *path, mode_t mode);int fchmod(int fd, mode_t mode);

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

您可以修改default_mode = "0660"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23424884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档