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 ...
随机推荐
- 亲密接触Redis-第三天(Redis的Load Balance)
前言 上两天讲述了Redis的基本搭建和基于HA的集群布署方式以及相关的策略和注意点.今天开始讲述Redis的Cluster功能,而这块目前来说网上资料不是太全,就算有1,2篇也只是单讲服务端的搭建也 ...
- 【SSH系列】Hibernate映射 -- 继承映射
开篇前言 在前面的博文中,小编介绍了hibernate中的映射,一对一,一对多,多对多,单向,双向等,今天这篇博文,小编主要来介绍一下hibernate中的继承映射,小伙伴都知道在C#中,如果想要实现 ...
- J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式
J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式 反向工程又称逆向工程. 开发项目涉及到的表太多,一个一个的写JAVA实体类很是费事.MyEcl ...
- Windows编译ejabberd
Windows编译ejabberd(金庆的专栏)安装 erlang OTP. 添加路径到 PATH, 使 erl 可以运行.git clone ejabberd安装 rebar:git clone g ...
- TCP协议的性能评测工具 — Tcpdive开源啦
Github地址:https://github.com/fastos/tcpdive 为什么要开发Tcpdive 在过去的几年里,随着移动互联网的飞速发展,整个基础网络已经发生了翻天覆地的变化. 用户 ...
- Android必知必会-发布开源 Android 项目注意事项
如果移动端访问不佳,请使用 –> Github版 1. 合理配置 .gitignore 文件 配置 .gitignore 可以排除一些非必要文件和保护保密信息,下面是在项目根目录下 .gitig ...
- 关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题
前段时间做一个项目,而项目中所有的请求都要用jquery 中的ajax请求或者post请求,但是开始处理一些简单操作还好,但是自己写了一些验证就出现问题了,比如表单提交的时候,要验证帐号的唯一性,所以 ...
- [tornado]websocket 最简单demo
想法 前两天想看看django 长轮询或者是websocket的方案,发现都不太好使. tornado很适合做这个工作,于是找了些资料,参照了做了个最简单demo,以便备用. 具体的概念就不说了,to ...
- 多线程并发之java内存模型JMM
多线程概念的引入是人类又一次有效压寨计算机的体现,而且这也是非常有必要的,因为一般运算过程中涉及到数据的读取,例如从磁盘.其他系统.数据库等,CPU的运算速度与数据读取速度有一个严重的不平衡,期间如果 ...
- lucene内存索引库、分词器
内存索引库 特点 在内存中开辟一块空间,专门为索引库存放.这样有以下几个特征: 1) 因为索引库在内存中,所以访问速度更快. 2) 在程序退出时,索引库中的文件也相应的消失了. 3) ...