Android系统修改硬件设备访问权限
Android系统修改硬件设备访问权限
在硬件抽象层模块文件(so)文件中,提供的函数调用open函数来打开设备文件,比如/dev/gpio,如果不修改设备文件/dev/gpio的访问权限,那么应用程序通过JNI接口来调用硬件抽象层提供的函数接口来调用open函数打开设备文件就会失败,这表示当前用户没有权限打开设备文件/dev/gpio文件。在默认情况下,只有root用户才有权限访问系统的设备文件,由于一般的应用程序没有root权限的。
为了解决上面的问题,需要为用户赋予访问设备文件/dev/gpio的权限。在linux系统中,可通过udev规则在系统启动时修改设备文件的访问权限,但在Android系统中没有实现udev规则,而是提供uevent机制,可以在系统启动时修改设备文件的访问权限。
在system/core/rootdir目录下有一个名为ueventd.rc的配置文件,我们可以再里面增加下面一行内容来修改设备文件/dev/freg的访问权限
/dev/gpio 0666 root root
这表示所有的用户均可以访问设备文件/dev/gpio,修改了ueventd.rc文件后可以重新编译Android源代码工程才能生效,但为了节省时间可通过另一种简单的方式。
在编译Android系统时,文件/system/core/rootdir/uevent.rc会被拷贝到/out/target/product/prj/root目录下,并且最终打包在ramdisk.img镜像文件(最小的文件系统,它包括了初始化android系统所需要的全部核心文件)中。当Android系统启动时,会把ramdisk.img镜像文件中的ueventd.rc文件安装在设备根目录下,并且由init进程来解析它的内容和修改相应的设备访问权限:
图1
所以只要我们能够修改ramdisk.img镜像文件中的ueventd.rc文件的内容,就可以修改设备文件/dev/gpio的访问权限了,下面介绍详细的修改办法。
1. 查看ramdisk.img文件格式
在\mediatek\source\kernel\trace32目录下可以找到hsimobile77_ics2_ramdisk.img文件,在\out\target\product\hsimobile77_ics2下有ramdik.img,我也把
hsimobile77_ics2_ramdisk.img拷贝到此目录下,用file命令来查看着两个文件(大小一样)的类型,却不一样,分别是gzip compressed data,from unix和ramdisk.img,很奇怪为什么不一样。下面以hsimobile77_ics2_ramdisk.img举例。
图2
2. 解压hsimobile77_ics2_ramdisk.img
从图2可知hsimobile77_ics2_ramdisk.img是一个gzip文件,所以我们可以执行gunzip文件来解压。
图3
先将hsimobile77_ics2_ramdisk.img该名为ramdisk.img.gz,然后用gunzip命令对它解压,加压后得到的ramdisk.img文件保存在cw6577目录中。
3. 还原ramdisk.img镜像文件
解压后的ramdisk.img文件是一个cpio格式的文件(包含其他文件盒有关信息的归档文件),因此我们可以执行cpio命令对它解除归档:
图4
解除归档后的内容保存在ramdisk目录下,如下图:
图5
4. 修改ueventd.rc文件
进入图5的目录,修改ueventd.rc文件,增加下面的内容:
/dev/gpio 0666 root root
5. 重新打包ramdisk.img镜像文件
先把ramdisk目录归档成为cpio文件,然后压缩成为gzip文件
图6
Android系统修改硬件设备访问权限的更多相关文章
- [Android] 修改设备访问权限
在硬件抽象层模块中,我们是调用open函数来打开对应的设备文件的.例如,在2.3.2小节中开发的硬件抽象层模块freg中,函数freg_device_open调用open函数来打开设备文件/dev/f ...
- Android之 看“马达”如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
在Android 2.3(Gingerbread) 系统的时候,我写过一篇关于“Android 震动马达系统“的文章,当时的Linux内核还是2.6版本的.写那篇文章的目的,是想彻底的了解从硬件到驱动 ...
- Android中的安全与访问权限控制
Android是一个多进程系统,在这个系统中,应用程序(或者系统的部分)会在自己的进程中运行.系统和应用之间的安全性是通过Linux的facilities(工具,功能)在进程级别来强制实现的,比如会给 ...
- cocos2dx新建android项目lib拷贝、访问权限等问题集
win7上面搭建cocos2dx的android项目,用create-android-project.bat新建一个项目时,出现了访问权限和项目无lib的问题. 解决方案: 1.项目无lib问题. 当 ...
- Android系统修改之Email自动回复功能分析
1. Email添加自动回复功能需要注意事项 Email可能存在多个账户, 因此自动回复功能应该添加在账户设置里面, 自动回复针对一个账户单独处理 在Email账户设置里面, 开启自动回复功能的时, ...
- Linux修改数据库的访问权限
以下方法可以帮助你解决这个问题了,下面的语句功能是,建立一个用户为monitor密码admin权限为和root一样.允许任意主机连接.这样你可以方便进行在本地远程操作数据库了. CREATE USER ...
- Android系统修改之Notification布局修改(一)
源码基于Android4.4 相关布局文件的位置: frameworks/base/core/res目录下: 1. notification_template_base.xml 2. notifica ...
- Android系统修改之展讯平台的Mms不能发送西班牙特殊字符ú的问题
在测试中, 发现在发送短信的时候特殊字符ú不能发送, 但是输入框可以输入并正常显示, 查看代码之后, 发现是展讯在字符转换的时候出现的问题 frameworks/base/telephony/java ...
- Android系统修改之葡萄牙沃达丰One Net服务问题处理
客户反馈的葡萄牙沃达丰的OneNet服务问题 Vodafone Portugal have a service (One Net) for enterprise customers that used ...
随机推荐
- docker 部署cassandra
摘要 本文主要介绍在redhat7 平台,利用docker 部署cassandra 集群,除了介绍基本的部署步骤,另外主要 讨论类似于cassandra 这种分布式集群系统部署 docker如何进行网 ...
- 用类模拟C风格的赋值+返回值
这个方法比较好: class DataHolder: def __init__(self, value=None): self.value = value def set(self, value): ...
- Android的SharedPreferences(首选项)保存键值对
使用共享首选项 如果您有想要保存的相对较小键值集合,您应使用 SharedPreferences API.SharedPreferences 对象指向包含键值对的文件并提供读写这些文件的简单方法. 每 ...
- Java进阶(四十三)线程与进程的区别
Java进阶(四十三)线程与进程的区别 1.线程的基本概念 概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必 ...
- Java之equals和==详解
两者的区别: A:== 基本类型:比较的是值是否相同 引用类型:比较的是地址值是否相同 B:equals() 只能比较引用类型. 默认情况下,比较的是地址值是否相同,因为我们可以看源代码可以看到,在O ...
- 字符编码(ASCII、ANSI、GB2312、UTF-8等)系统梳理
引言 在显示器上看见的文字.图片等信息在电脑里面其实并不是我们看见的样子,即使你知道所有信息都存储在硬盘里,把它拆开也看不见里面有任何东西,只有些盘片.假设,你用显微镜把盘片放大,会看见盘片表面凹凸不 ...
- FORM中读取图片
1.创建ITEM 重要属性如下 item属性:图像 大小样式:调整 数据库项:否 2.读取触发器 在block级别,创建trigger READ_IMAGE_FILE('D:\'||:XX_EMOLY ...
- C/C++的mem函数和strcpy函数的区别和应用
mem系列函数是面试的时候常考的知识点,我们需要熟练掌握这三个函数的原理和代码实现,要能准确无误的写出代码. memcpy.memset和memset三个函数在使用过程中,均需包含以下头文件: //在 ...
- JAVA之旅(三十三)——TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录
JAVA之旅(三十三)--TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录 我们继续网络编程 一.TCP 说完UDP,我们就来说下我们应该重点掌握的TCP了 TCP传输 Soc ...
- antlr v4 使用指南连载4——词法规则入门之黄金定律
词法规则入门 黄金定律一二 若输入串能被多个词法规则匹配,那么声明在词法文件最前面的规则生效. parser parser grammar HelloParser; options { languag ...