android - 如何设置字符设备驱动的默认权限?
问题描述
我创建了一个字符设备驱动程序,我想将设备驱动程序文件(/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, 0, 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, id, 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 board,我加载的是android。而且我在 Juno 板上找不到 /etc/udev/rules.d。因此,更改 rules.d 对我没有帮助。
我用内置的(obj-y += cnunsr.o in /linux/driver/Makefile)编译了我的字符设备驱动程序。
来人帮帮我 :(
解决方案
推荐阅读
- java - Hibernate 4.3 通过嵌入 ID 的多个列表进行级联合并
- php - 正则表达式:Laravel 中的模式验证
- c# - InputSimulator 在重新激活 WPF 窗口后将密钥发送到错误的进程
- docker - 如何解决 Manjaro 上的 Docker 错误代码 139?
- sql-server - 如何在 SQL Server 的 where 子句中使用别名
- javascript - 如何使用代理在电子 webview 中加载 JQuery
- linux - 将 .BSS 与堆访问区分开来
- go - 在 go worker/event 系统中,worker 是否应该访问相同的结构(通过指针)来完成工作?
- javascript - react js 和 redux 在每条路由之前发送一个 api 调用
- uibutton - UIButton 同时点击动作取决于计数