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系统修改硬件设备访问权限相关推荐

  1. 处理硬件设备访问权限问题

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

  2. 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

    文章目录 一.Android 逆向中使用的 android.permission 权限 二.Android 系统中的 Linux 用户权限 一.Android 逆向中使用的 android.permi ...

  3. linux cpu降频怎么设置,Android系统修改CPU降频温度阈值、修改CPU关内核温度阈值的方法...

    1.关闭CPU降频温度: 目录:MSM8916.LA.1.1-PostCS-CT-CMCC-r113500.1srcLINUXandroidvendorqcomproprietarythermal-e ...

  4. Linux嵌入外部程序窗口,μClinux嵌入系统外部硬件设备快速调试||μClinux|

    μClinux嵌入系统外部硬件设备快速调试 摘要:为 了加快开发调试μClinux嵌入式系统的外部硬件设备,采用直接物理地址的设备访问方法,在μClinux嵌入式系统中实现了外部硬件设备的快速访问. ...

  5. Android系统插入USB设备自动授权不弹出对话框

    Android系统插入USB设备时,系统会弹出询问权限的对话框,现在需要不弹对话框而直接授权. 修改/frameworks/base/packages/SystemUI/src/com/android ...

  6. win7访问不了服务器共享文件夹权限设置,win7系统开启共享文件夹访问权限的操作方法...

    很多小伙伴都遇到过对win7系统开启共享文件夹访问权限进行设置的困惑吧,一些朋友看过网上对win7系统开启共享文件夹访问权限设置的零散处理方法,并没有完完全全明白win7系统开启共享文件夹访问权限是如 ...

  7. win10服务器权限修改时间,win10系统修改时间显示没权限的解决方案

    有关win10系统修改时间显示没权限的操作方法想必大家有所耳闻.但是能够对win10系统修改时间显示没权限进行实际操作的人却不多.其实解决win10系统修改时间显示没权限的问题也不是难事,小编这里提示 ...

  8. win10用什么软件测试硬件,Win10系统下硬件设备检测工具的使用方法

    在win10系统中,自带有硬件设备检测工具,当电脑遇到故障的时候就可以用这个工具来检测并处理,可是许多win10系统用户并不知道要怎么使用硬件设备检测工具,接下来小编就给大家分享一下Win10系统下硬 ...

  9. android修改默认遥控器键值,RK3128平台android系统修改添加遥控器键值码值

    本帖最后由 微笑,一路向前 于 2017-1-4 15:34 编辑 最近帮客户定制RK3128平台的固件,涉及到定制新的遥控器,需要添加或修改遥控码值.RK3128平台Android系统修改遥控器码值 ...

最新文章

  1. 云笔记积累个人知识体系
  2. bug带来的兄弟感情
  3. jQuery 7 节点遍历
  4. Download Excel
  5. c语言case后面多字符,多SWITCH-CASE结构时的C语言对象方式化解
  6. resource.arsc二进制内容解析 之 Dynamic package reference
  7. python抽象工厂模式_Python设计模式之抽象工厂模式
  8. Java 程序员必须掌握的 5 个注解
  9. 解决eclipse中tomcat无法识别maven web项目问题
  10. 使用Maven运行Solr
  11. Springboot源码——应用程序上下文分析
  12. 在ASP.NET 3.5中使用新的ListView控件(6)
  13. 小米再添猛将!原中兴手机CEO曾学忠加盟
  14. 设计灵感|网页建议页面(联系页面)版式案例
  15. 同步 Visual Studio Code 设置
  16. 面向失败的设计之播控系统!
  17. python封装函数入门_python基础之封装
  18. [Android] 任意时刻从子线程切换到主线程的实现原理及加强版
  19. 51单片机c语言烧录软件,51单片机烧写程序的方法
  20. Grasshopper学习手册第二版资源

热门文章

  1. php 配置域名与端口号,lnmp 配置不同端口号的域名
  2. eclipse连接mysql8报错_Eclipse连接MySQL8.0.13 win10 64位
  3. knight tour java_The Knight’s tour problem
  4. Eclipse Memory Analyzer 的使用
  5. 用html通过python调用mysql_HTTP协议与使用Python获取数据并写入MySQL
  6. coordinatorlayout 设置不可滑动_滑动关闭App损害iPhone电池寿命,我们需要“改掉强迫症”吗?...
  7. web访问hive速度怎么样_使用Hive的web界面:HWI
  8. 调整表格的行高_Word表格无法调整行高?尽然是这个原因,90%的人都可能遇到...
  9. python登录系统的实现方法_python实现用户登录系统
  10. mybatis 自定义函数_JDK动态代理一定要有代理对象吗?请你结合Mybatis回答