安卓驱动设备节点权限设置
Posted 我爱一次性
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓驱动设备节点权限设置相关的知识,希望对你有一定的参考价值。
本文所在的平台是安卓10
前言:
因为安卓本身有自己的一套框架,对于驱动的设备节点而言,开机后会读取一个.rc脚本去改变设备节点的权限。有些刚接触安卓的小白,认为像linux一样用c语言或者java去改写设备权限,一套操作下来发现没用。其实安卓有自己的一套简单的方法提供大家使用。
本人在写应用的时候,需要直接改设备节点的值,但是api是改不了的。
1.设备节点
安卓设备节点,通常是只root用户去读写,其他用户是不可写的。
ls -l
这就导致,我们应用层是无法执行一些cat 或者是echo的操作。
网上有很多介绍一些应用层如何去读写设备节点的方法,在比较新的安卓版本,比如本平台android10是用不了这些的了。所以还得源码修改。
2.修改方法
办法一:
简单的,可以用adb修改,但是不用永久,关机重启就没了。
adb root
adb shell
chmod 777 /sys/class/...
ps:如果root不了的话,一样是改不了的。
方法二:
在.rc脚本增加权限 本平台路径:/devices/xxx(机子平台,如高通晓龙)/common/rootdir/etc/init.xxx.rc
会发现,有很多这样的改变设备节点的语句。我们把想要修改的节点也照猫画虎的添加上去就行了。
在linux里,也有类似的操作。例如:/etc/profile .bashrc等。
然后我们重新编译源码就可以了。
3.应用修改设备节点
最后,再提供一个apk在有权限后,修改设备节点的一个例子,方法有很多。
package com.retrostation.devicemanager;
import android.util.Log;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
public class CmdUtils {
public static void echoCmd(String cmdPath ,int value){
String TAG = "CmdUtils";
Log.e(TAG, "onCheckedChanged: oncethings:"+ value);
try {
Process process = Runtime.getRuntime().exec("sh");
DataOutputStream dos = new DataOutputStream(process.getOutputStream());
dos.writeBytes("echo "+value+" > "+cmdPath+" \\n");
dos.flush();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String catCmd(String cmdPath){
try {
String result = "";
String con = "";
Process process = Runtime.getRuntime().exec("cat "+cmdPath);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((result=br.readLine())!=null){
con = result + con;
}
return con;
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
}
简单写的一个工具类,本人主要用来cat和echo操作。大家可复制使用。
ps:oncethings是本人的英文名,用作logcat筛选。
最后,希望可以帮到大家,如果有用的就收藏一下,白嫖的就点个赞。
以上是关于安卓驱动设备节点权限设置的主要内容,如果未能解决你的问题,请参考以下文章
不写一行代码:实现安卓基于i2c bus的Slaver设备驱动
不写一行代码:实现安卓基于i2c bus的Slaver设备驱动
实现自己的HAL-14 控制led(内核设备节点的访问权限的动态配置),从app 到 hal 到底层内核kernel层的驱动 的实现
实现自己的HAL-14 控制led(内核设备节点的访问权限的动态配置),从app 到 hal 到底层内核kernel层的驱动 的实现