我正在制作一个小的linux模块,它是char设备的驱动程序。在我的代码中,我创建了设备类,然后设备本身,因此在我的系统中创建了一个/dev文件。问题是,/dev文件只有根权限,而用户对该文件既没有读权限,也没有写权限,也没有执行权限,所以我想更改/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);
有没有修改权限的功能?
发布于 2014-11-05 21:25:46
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...)
希望这能有所帮助。
发布于 2014-11-05 20:30:25
我认为Rocoder的意思是首先使用以下命令更改设备文件的权限
int chmod(const char *path,mode_t模式);OR int fchmod(int fd,mode_t模式);
在您的用户空间应用程序中。然后使用open()打开设备文件并执行任何操作。
还请注意:我们不能让程序chmod本身在其内部进入超级用户模式。这是为了确保不会有非法程序控制系统。
发布于 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"
https://stackoverflow.com/questions/23424884
复制相似问题