允许非根用户 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_createdevice_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创建文件,你可以在那里覆盖文件权限。