允许非根用户 ioctl 访问 linux 模块中的 /dev/mytest 文件
Allow non-root users ioctl access to /dev/mytest file in linux module
我的项目包含两个东西:内核模块和应用程序,它们通过 ioctl
使用 /dev/mytest
文件进行通信。
目前,应用程序需要 运行 作为根用户才能访问 /dev/mytest
文件。是否可以允许非用户在没有 sudo 的情况下与此文件交互?
据我了解,file_operations 结构 属性 .owner = THIS_MODULE
与 /dev/mytest
文件无关,仅与驱动程序文件关联。
我在内核模块中使用 class_create
和 device_create
函数创建了 /dev/mytest
。那么,也许我应该指定一些特殊的 device_create
参数?或者我该如何实现?
在现代内核中,你可以做类似
的事情
myclass = class_create(THIS_MODULE, "my_class_name");
/* error handling if class_create fails */
myclass->devnode = mydevnode;
你的 devnode
函数类似于
static char *mydevnode(struct device *dev, umode_t *mode)
{
if (mode)
*mode = 0666; /* or whatever permissions you want */
return NULL; /* could override /dev name here too */
}
那么如果你使用device_create
创建你的驱动程序专用文件,内核会调用mydevnode
创建文件,你可以在那里覆盖文件权限。
我的项目包含两个东西:内核模块和应用程序,它们通过 ioctl
使用 /dev/mytest
文件进行通信。
目前,应用程序需要 运行 作为根用户才能访问 /dev/mytest
文件。是否可以允许非用户在没有 sudo 的情况下与此文件交互?
据我了解,file_operations 结构 属性 .owner = THIS_MODULE
与 /dev/mytest
文件无关,仅与驱动程序文件关联。
我在内核模块中使用 class_create
和 device_create
函数创建了 /dev/mytest
。那么,也许我应该指定一些特殊的 device_create
参数?或者我该如何实现?
在现代内核中,你可以做类似
的事情 myclass = class_create(THIS_MODULE, "my_class_name");
/* error handling if class_create fails */
myclass->devnode = mydevnode;
你的 devnode
函数类似于
static char *mydevnode(struct device *dev, umode_t *mode)
{
if (mode)
*mode = 0666; /* or whatever permissions you want */
return NULL; /* could override /dev name here too */
}
那么如果你使用device_create
创建你的驱动程序专用文件,内核会调用mydevnode
创建文件,你可以在那里覆盖文件权限。