如何解决如何设置字符设备驱动的默认权限?
我已经创建了一个字符设备驱动程序,我想将设备驱动程序文件(/dev/cnunsr)权限更改为 crw-rw-rw-(0666)。 但是默认权限是 crw------- (0600),所以它不会改变。
我的字符驱动代码是...
static int cnunsr_dev_uevent(struct device *dev,struct kobj_uevent_env *env)
{
add_uevent_var(env,"DEVMODE=%#o",0666);
return 0;
}
static char *cnunsr_dev_devnode(struct device *dev,umode_t *mode)
{
printk("\n\n****%s: %d\n\n",__func__,__LINE__);
if (mode != NULL)
*mode = 0666;
return kasprintf(GFP_KERNEL,"%s",dev_name(dev));;
}
int cnunsr_dev_init(void)
{
int ret;
ret = alloc_chrdev_region( &id,1,DEVICE_NAME );
if ( ret ){
printk( "alloc_chrdev_region error %d\n",ret );
return ret;
}
else printk( "cnunsr alloc_chrdev_region");
cdev_init( &cdev,&simple_fops );
cdev.owner = THIS_MODULE;
ret = cdev_add( &cdev,id,1 );
if (ret){
printk( "cdev_add error %d\n",ret );
unregister_chrdev_region( id,1 );
return ret;
}
else printk( "cnunsr cdev_add");
class = class_create( THIS_MODULE,DEVICE_NAME );
if ( IS_ERR(class)){
ret = PTR_ERR( class );
printk( "class_create error %d\n",ret );
cdev_del( &cdev );
unregister_chrdev_region( id,1 );
return ret;
}
else printk( "cnunsr class_create");
class->dev_uevent = cnunsr_dev_uevent;
class->devnode = cnunsr_dev_devnode;
dev = device_create( class,NULL,DEVICE_NAME );
if ( IS_ERR(dev) ){
ret = PTR_ERR(dev);
printk( "device_create error %d\n",ret );
class_destroy(class);
cdev_del( &cdev );
unregister_chrdev_region( id,1 );
return ret;
}
else printk( "cnunsr device_create");
return 0;
}
如您所见,即使您设置了类的 dev_uevent 或 devnode 也是 0600。
我也尝试修改system/core/rootdir/init.rc中的代码,结果是一样的。
...
chmod 0666 /dev/cnunsr
我的开发板是juno板,我装的是android。我在 Juno 板上找不到 /etc/udev/rules.d。因此,更改 rules.d 对我没有帮助。
我使用内置(obj-y += cnunsr.o in /linux/driver/Makefile)编译了我的字符设备驱动程序。
有人帮我:(
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。