Предположим, file
, в который вы хотите записать, является символьным устройством. Вы можете сделать это программно, переписав dev_uevent
класса, созданного для устройства, как показано ниже.
static struct class *cl;
int my_uevent(struct device *dev, struct kobj_uevent_env *env)
{
add_uevent_var(env, "DEVMODE=%#o", 0666);
return 0;
}
.....
int my_init(void)
{
int ret;
struct device *dev_ret = NULL;
if((ret = alloc_chrdev_region(&dev, FIRST_MINOR, MINOR_CNT, "char_dev")) < 0)
{
return ret;
}
printk("Major Nr: %d\n", MAJOR(dev));
cdev_init(&c_dev, &fops);
if((ret = cdev_add(&c_dev, dev, MINOR_CNT)) < 0)
{
unregister_chrdev_region(dev, MINOR_CNT);
return ret;
}
if(IS_ERR(cl = class_create(THIS_MODULE, "chardrv")))
{
cdev_del(&c_dev);
unregister_chrdev_region(dev, MINOR_CNT);
return PTR_ERR(cl);
}
cl->dev_uevent = my_uevent; // <-- overwrite dev_uevent here
if(IS_ERR(dev_ret = device_create(cl, NULL, dev, NULL, "mychar%d", 0)))
{
class_destroy(cl);
cdev_del(&c_dev);
unregister_chrdev_region(dev, MINOR_CNT);
return PTR_ERR(dev_ret);
}
return 0;
}