[Android 基础] -- 修改设备访问权限

一、背景

在硬件抽象层模块中,我们是调用 open 函数来打开对应的设备文件的。例如,在 2.3.2 小节中开发的硬件抽象层模块 freq 中,函数 freg_device_open 调用 open 函数来打开设备 /dev/freg。

if((dev->fd = open(DEVICE_NAME, O_RDWR)) == -1)
{
    LOGE("Failed to open device file /dev/freg -- %s.", strerror(errno));
    free(dev);
    return -EFAULT;
}

如果不修改设备文件 /dev/freg 的访问权限,那么应用程序调用 freg_device_open 函数打开设备文件 /dev/freg 就会失败,从日志输出可以看到下面的内容:

Failed to open /dev/freg -- Permission denied.

这表示当前用户没有权限打开设备文件 /dev/freg。在默认情况下,只有 root 用户才有权限访问系统的设备文件。由于一般的应用程序是没有 root 用户权限的,因此,这里就会提示没有权限打开设备文件 /dev/freg。

解决这个问题的办法是,赋予 root 之外的其他用户访问设备文件 /dev/freg 的权限。我们知道,在 Linux 系统中,可以通过 udev 规则在系统启动时修改设备文件的访问权限。然而,Android 系统并没有实现 udev 机制,因此,我们就不可以通过定义 udev 规则来赋予 root 之外的其他用户访问设备文件 /dev/freg 的权限。不过,Android 提供了另外的一个 uevent 机制,可以在系统启动时修改设备文件的访问权限。

在 system/core/rootdir 目录下有一个名为 ueventd.rc 的配置文件,我们可以在里面增加以下一行内容来修改设备文件 /dev/freg 的访问权限。

/dev/freg        0666  root  root

这表示所有的用户均可以访问设备文件 /dev/freg,即可以打开设备文件 /dev/freg,以及读写它的内容。这样,除了 root 用户之外,系统中的其他用户也可以调用 freg_device_open 函数来打开设备文件 /dev/freg。

修改了 ueventd.rc 文件后,需要重新编译 Android 源代码工程,这样新修改的设备文件 /dev/freg 的访问权限才能生效。

扩展:

udev 是 Linux 2.6 内核新增的一个功能,用来替代原来的 devfs,是 Linux 系统默认的设备管理工具。udev 机制以守护进程的形式运行,通过帧听内核发出来的 uevent 来管理 /dev 目录下的设备文件,包括添加或者删除设备文件、修改设备文件的访问权限等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值