安卓驱动设备节点权限设置

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筛选。

 

最后,希望可以帮到大家,如果有用的就收藏一下,白嫖的就点个赞。

以上是关于安卓驱动设备节点权限设置的主要内容,如果未能解决你的问题,请参考以下文章

不写一行代码:实现安卓基于PWM的LED设备驱动

不写一行代码:实现安卓基于i2c bus的Slaver设备驱动

不写一行代码:实现安卓基于i2c bus的Slaver设备驱动

实现自己的HAL-14 控制led(内核设备节点的访问权限的动态配置),从app 到 hal 到底层内核kernel层的驱动 的实现

实现自己的HAL-14 控制led(内核设备节点的访问权限的动态配置),从app 到 hal 到底层内核kernel层的驱动 的实现

如何通过命令行取得安卓root权限