Изменение разрешений по умолчанию для IOctl cdev
Я добавляю вызов IOctl из собственной платформы OpenGL на устройстве Android, чтобы я мог регистрировать информацию о кадре в ядре через модуль ядра трассировки. В моем модуле ядра я создаюcdev
для вызовов IOctl, но у меня проблема с тем, что права моего разработчика по умолчанию - 6000, и поскольку вызовы IOctl на уровне пользователя поступают из некорневого процесса, open
вызов не может открыть декриптор файла, необходимый для ioctl
вызов.
Мой подход cdev очень стандартный и выглядит следующим образом (примечание devnode
это попытка исправить разрешения, см. это).
static dev_t dev;
static struct cdev c_dev;
static struct class *cl;
static char *device_node(struct device *dev, umode_t *mode)
{
if(!mode)
return NULL;
*mode=0666;
return kasprintf(GFP_KERNEL, "%s", dev_name(dev));
}
static int IOctlInit(void)
{
int ret;
struct device *dev_ret;
if((ret = alloc_chrdev_region(&dev, FIRST_MINOR, MINOR_CNT, EGL_SYSLOGGER_NAME)))
return ret;
cdev_init(&c_dev, &syslog_EGL_fops);
if((ret = cdev_add(&c_dev, dev, MINOR_CNT)) < 0)
return ret;
if(IS_ERR( cl = class_create(THIS_MODULE, EGL_SYSLOGGER_NAME "char")))
{
cdev_del(&c_dev);
unregister_chrdev_region(dev, MINOR_CNT);
return PTR_ERR(cl);
}
cl->devnode = device_node;
if(IS_ERR(dev_ret = device_create(cl, NULL, dev, NULL, EGL_SYSLOGGER_NAME)))
{
class_destroy(cl);
cdev_del(&c_dev);
unregister_chrdev_region(dev, MINOR_CNT);
return PTR_ERR(cl);
}
return 0;
}
И аналогично, используя misc dev с .mode=0666
У меня такая же проблема
static struct miscdevice misc_dev = {
.minor = MISC_DYNAMIC_MINOR,
.name = EGL_SYSLOGGER_NAME,
.fops = &syslog_EGL_fops,
/** .mode = S_IRWXUGO, */
.mode = 0666,
};
static `enter code here`int IOctlInit(void)
{
int ret;
ret = misc_register(&misc_dev);
if(ret)
printk("Unable to register EGL IOctl misc dev\n");
printk("Misc dev registered\n");
return 0;
}
Оба подхода работают один раз chmod 666 /dev/$EGL_SYSLOGGER_NAME
но я надеюсь найти решение, которое не требует этого вмешательства. Согласно этому сообщению, подход misc dev должен решить мою проблему, но я не добился успеха.
Я не уверен, что я пропустил, и был бы очень признателен за несколько советов.
Ура