我是靠谱客的博主 现实羽毛,最近开发中收集的这篇文章主要介绍android应用与Linux内核驱动数据交互,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.Linux内核驱动层

1. 确定你想进行数据交互的驱动模块, 比如要与驱动名为 serio_module的驱动交互

2. 确定在驱动模块文件中使用的交互变量, 比如需要交互的变量为 static int s_connect_value[3] ={1,2,3};

那么需要在驱动程序中添加

module_param_array(s_connect_value,int NULL,S_IRUGO | S_IWUSR);

接着, 在adb shell中会存在 /sys/module/ serio_module/parameters/s_connect_value这样一个文件. 我们可以通过

echo 1, 2, 3 > /sys/module/serio_module/parameters/s_connect_value

改变其中的值, 在内核中添加打印会发现 终端 echo 完后, s_connect_value数组的值也会发生改变

二.android 应用层

int ConnectValue[3] = {1,2,3};

StringBuilder screenRawData = new StringBuilder();
screenRawData.append(ConnectValue[0]);
screenRawData.append(",");
screenRawData.append(ConnectValue[1]);
screenRawData.append(",");
screenRawData.append(ConnectValue[2]);
screenRawData.append(" ");

 String CMDData= new String( "echo " + screenRawData + " > /sys/module/serio_module/parameters/s_connect_value");

java.lang.Process process = null;
DataOutputStream os = null;
BufferedReader successResult = null;
BufferedReader errorResult = null;
StringBuilder successMsg = null;
StringBuilder errorMsg = null;
        try {
          
            process = Runtime.getRuntime().exec("");
            os = new DataOutputStream(process.getOutputStream());
            //将命令数据写入
            os.write(CMDData.getBytes());
            os.writeBytes("n");
            os.writeBytes("exitn");
            os.flush();
            //执行命令
            process.waitFor();
            //获取返回结果
            successMsg = new StringBuilder();
            errorMsg = new StringBuilder();
            successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
            errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            String s;
            while ((s = successResult.readLine()) != null) {
                successMsg.append(s);
            }
            while ((s = errorResult.readLine()) != null) {
                errorMsg.append(s);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (os != null) {
                    os.close();
                }
                if (process != null) {
                    process.destroy();
                }
                if (successResult != null) {
                    successResult.close();
                }
                if (errorResult != null) {
                    errorResult.close();
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //显示结果
        Log.d(TAG, "命令执行结果:" + successMsg.toString() + ",错误消息: " + errorMsg.toString());

最后

以上就是现实羽毛为你收集整理的android应用与Linux内核驱动数据交互的全部内容,希望文章能够帮你解决android应用与Linux内核驱动数据交互所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部