rk3288中apk串口打开失败,selinux权限问题

news2024/9/21 20:53:16

apk打开串口失败

报错信息:

07-03 17:05:27.030  4582  4582 W jw.ComAssistant: type=1400 audit(0.0:56): avc: denied { read } for name="ttyS2" dev="tmpfs" ino=7704 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:ttyS2_device:s0 tclass=chr_file permissive=0
07-03 17:05:27.035  4582  4582 W System.err: java.io.IOException: Cannot run program "/system/bin/su": error=2, No such file or directory
07-03 17:05:27.036  4582  4582 W System.err:    at java.lang.ProcessBuilder.start(ProcessBuilder.java:983)
07-03 17:05:27.036  4582  4582 W System.err:    at java.lang.Runtime.exec(Runtime.java:691)
07-03 17:05:27.036  4582  4582 W System.err:    at java.lang.Runtime.exec(Runtime.java:524)
07-03 17:05:27.036  4582  4582 W System.err:    at java.lang.Runtime.exec(Runtime.java:421)
07-03 17:05:27.036  4582  4582 W System.err:    at android_serialport_api.SerialPort.<init>(SerialPort.java:47)
07-03 17:05:27.036  4582  4582 W System.err:    at com.bjw.ComAssistant.SerialHelper.open(SerialHelper.java:43)
07-03 17:05:27.036  4582  4582 W System.err:    at com.bjw.ComAssistant.ComAssistantActivity.OpenComPort(ComAssistantActivity.java:885)
07-03 17:05:27.036  4582  4582 W System.err:    at com.bjw.ComAssistant.ComAssistantActivity.access$8(ComAssistantActivity.java:882)
07-03 17:05:27.036  4582  4582 W System.err:    at com.bjw.ComAssistant.ComAssistantActivity$ToggleButtonCheckedChangeEvent.onCheckedChanged(ComAssistantActivity.java:562)
07-03 17:05:27.036  4582  4582 W System.err:    at android.widget.CompoundButton.setChecked(CompoundButton.java:156)
07-03 17:05:27.036  4582  4582 W System.err:    at android.widget.ToggleButton.setChecked(ToggleButton.java:71)
07-03 17:05:27.036  4582  4582 W System.err:    at android.widget.CompoundButton.toggle(CompoundButton.java:115)
07-03 17:05:27.036  4582  4582 W System.err:    at android.widget.CompoundButton.performClick(CompoundButton.java:120)
07-03 17:05:27.036  4582  4582 W System.err:    at android.view.View$PerformClick.run(View.java:22445)
07-03 17:05:27.036  4582  4582 W System.err:    at android.os.Handler.handleCallback(Handler.java:755)
07-03 17:05:27.036  4582  4582 W System.err:    at android.os.Handler.dispatchMessage(Handler.java:95)
07-03 17:05:27.036  4582  4582 W System.err:    at android.os.Looper.loop(Looper.java:154)
07-03 17:05:27.036  4582  4582 W System.err:    at android.app.ActivityThread.main(ActivityThread.java:6141)
07-03 17:05:27.036  4582  4582 W System.err:    at java.lang.reflect.Method.invoke(Native Method)
07-03 17:05:27.036  4582  4582 W System.err:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
07-03 17:05:27.036  4582  4582 W System.err:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
07-03 17:05:27.037  4582  4582 W System.err: Caused by: java.io.IOException: error=2, No such file or directory
07-03 17:05:27.037  4582  4582 W System.err:    at java.lang.UNIXProcess.forkAndExec(Native Method)
07-03 17:05:27.037  4582  4582 W System.err:    at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
07-03 17:05:27.037  4582  4582 W System.err:    at java.lang.ProcessImpl.start(ProcessImpl.java:128)
07-03 17:05:27.037  4582  4582 W System.err:    at java.lang.ProcessBuilder.start(ProcessBuilder.java:964)
07-03 17:05:27.037  4582  4582 W System.err:    ... 20 more

思路:根据报错信息很容易知道是/system/bin/su这个文件不在,这个问题比较好解决,烧一下其他固件,adb poll /system/bin/su 然后再烧录这个有问题固件把su烧录进去。
然后再次打开串口:

07-03 17:15:16.023  4582  4582 W jw.ComAssistant: type=1400 audit(0.0:70): avc: denied { read } for name="ttyS2" dev="tmpfs" ino=7704 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:ttyS2_device:s0 tclass=chr_file permissive=0
07-03 17:15:16.029  4582  4582 W System.err: java.lang.SecurityException
07-03 17:15:16.029  4582  4582 W System.err:    at android_serialport_api.SerialPort.<init>(SerialPort.java:53)
07-03 17:15:16.029  4582  4582 W System.err:    at com.bjw.ComAssistant.SerialHelper.open(SerialHelper.java:43)
07-03 17:15:16.029  4582  4582 W System.err:    at com.bjw.ComAssistant.ComAssistantActivity.OpenComPort(ComAssistantActivity.java:885)
07-03 17:15:16.029  4582  4582 W System.err:    at com.bjw.ComAssistant.ComAssistantActivity.access$8(ComAssistantActivity.java:882)
07-03 17:15:16.029  4582  4582 W System.err:    at com.bjw.ComAssistant.ComAssistantActivity$ToggleButtonCheckedChangeEvent.onCheckedChanged(ComAssistantActivity.java:562)
07-03 17:15:16.029  4582  4582 W System.err:    at android.widget.CompoundButton.setChecked(CompoundButton.java:156)
07-03 17:15:16.029  4582  4582 W System.err:    at android.widget.ToggleButton.setChecked(ToggleButton.java:71)
07-03 17:15:16.029  4582  4582 W System.err:    at android.widget.CompoundButton.toggle(CompoundButton.java:115)
07-03 17:15:16.029  4582  4582 W System.err:    at android.widget.CompoundButton.performClick(CompoundButton.java:120)
07-03 17:15:16.029  4582  4582 W System.err:    at android.view.View$PerformClick.run(View.java:22445)
07-03 17:15:16.029  4582  4582 W System.err:    at android.os.Handler.handleCallback(Handler.java:755)
07-03 17:15:16.029  4582  4582 W System.err:    at android.os.Handler.dispatchMessage(Handler.java:95)
07-03 17:15:16.030  4582  4582 W System.err:    at android.os.Looper.loop(Looper.java:154)
07-03 17:15:16.030  4582  4582 W System.err:    at android.app.ActivityThread.main(ActivityThread.java:6141)
07-03 17:15:16.030  4582  4582 W System.err:    at java.lang.reflect.Method.invoke(Native Method)
07-03 17:15:16.030  4582  4582 W System.err:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
07-03 17:15:16.030  4582  4582 W System.err:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)

思路:
在device/rockchip/common/sepolicy/untrusted_app.te
allow untrusted_app serial_device:chr_file { rw_file_perms open read write ioctl getattr setattr };
给串口赋予权限。然后还是不行,一样的错误。然后从网上找的串口api的源代码了,定位错误
在这里插入图片描述
肯定是这里出问题了,设备不可读并且不可写。我们去dev下面看一下权限,发现权限没有问题,那肯定是!device.canRead() 这里面有问题。
在这里插入图片描述
搜一下源代码:
在这里插入图片描述
这边应该是getSecurityManager()出问题了。这边实在是想不出什么办法了,在网上搜了一顿发现最终还是解决了。发一下方案:

--- a/device/rockchip/common/sepolicy/device.te
+++ b/device/rockchip/common/sepolicy/device.te
@@ -1,3 +1,8 @@
+type ttyS1_device, dev_type, mlstrustedobject;
+type ttyS2_device, dev_type, mlstrustedobject;
+type ttyS3_device, dev_type, mlstrustedobject;
+type ttyS4_device, dev_type, mlstrustedobject;
//定义ttyS1_device为dev_type, mlstrustedobject类型

--- a/device/rockchip/common/sepolicy/file_contexts
+++ b/device/rockchip/common/sepolicy/file_contexts
@@ -1,3 +1,10 @@
+#增加我们需要访问的设备
+/dev/ttyS1             u:object_r:ttyS1_device:s0
+/dev/ttyS2              u:object_r:ttyS2_device:s0
+/dev/ttyS3              u:object_r:ttyS3_device:s0
+/dev/ttyS4              u:object_r:ttyS4_device:s0
//将dev/ttyS1与我们签名定义的ttyS1_device进行绑定关系

--- a/device/rockchip/common/sepolicy/untrusted_app.te
+++ b/device/rockchip/common/sepolicy/untrusted_app.te
@@ -19,10 +19,14 @@ allow untrusted_app system_data_file:file r_file_perms;
 allow untrusted_app sysfs_lut:file { getattr setattr open write };
 allow untrusted_app ttys_device:chr_file { open read write ioctl getattr setattr };
 allow untrusted_app mc_gpio_device:chr_file { open read write ioctl };
-allow untrusted_app device:dir { open read write };
+allow untrusted_app device:dir { open read write ioctl getattr setattr };
 allow untrusted_app selinuxfs:dir { open read write ioctl getattr setattr };

 allow untrusted_app serial_device:chr_file { rw_file_perms open read write ioctl getattr setattr };
 allow untrusted_app tty_device:chr_file { rw_file_perms open read write ioctl getattr setattr };
 allow untrusted_app sysfs:file { rw_file_perms open read write ioctl getattr setattr };
 allow untrusted_app system_file:file { getattr setattr open read write execmod };
+allow untrusted_app ttyS1_device:chr_file rw_file_perms;
+allow untrusted_app ttyS2_device:chr_file rw_file_perms;
+allow untrusted_app ttyS3_device:chr_file rw_file_perms;
+allow untrusted_app ttyS4_device:chr_file rw_file_perms;
//赋予读写权限

其实就是重新定义一下我们要使用到的串口,然后赋予权限。
至此问题解决
参考资料:
https://blog.csdn.net/Sunxiaolin2016/article/details/91039775?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-91039775-blog-127211886.235v38pc_relevant_sort_base1&spm=1001.2101.3001.4242.1&utm_relevant_index=3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《YOLOv8魔术师》专栏介绍 CSDN独家改进创新实战专栏目录

&#x1f4a1;&#x1f4a1;&#x1f4a1;Yolov8魔术师&#xff0c;独家首发创新&#xff08;原创&#xff09;&#xff0c;持续更新&#xff0c;适用于Yolov5、Yolov7、Yolov8等各个Yolo系列&#xff0c;专栏文章提供每一步步骤和源码&#xff0c;轻松带你上手魔改网络 &…

xml合并

from xml.etree.ElementTree import ElementTree, Element, parseimport xml.etree.ElementTree as ETimport osimport shutilhole_path ./Annotationsarm_path ./Annotations1out_path ./out# 格式化def __indent(elem, level0):i "\n" level*"\t"if…

UE5.2 LyraDemo源码阅读笔记(三)

进入淘汰模式游戏流程 启动游戏&#xff0c;进入流程&#xff1a; 1、进入Lyra游戏第三个体验入口FrontEnd。 2、来到大厅主界面后&#xff0c;点击&#xff1a; Play Lyra > Start A Game >ELIMINATION就会进入到淘汰模式游戏。 看看蓝图和代码&#xff0c;其中的UI流程…

dubbo-admin下载安装教程

目录 1.下载 2.项目结构 3.后端打包 4.前端打包 4.1.node js环境准备 4.2.依赖安装 4.3.启动、打包 1.下载 下载地址&#xff1a; GitHub - apache/dubbo-admin at develop dubbo-admin项目有多个分支&#xff0c;最新版本的dubbo-admin在使用go语言进行重构&#xf…

解决电脑提示vcruntime140_1.dll无法继续执行代码的问题

vcruntime140_1.dll丢失要怎么办&#xff1f;其实很多人都在头疼这个问题&#xff0c;关于dll文件的丢失这事情是时常发生的&#xff0c;因为电脑的杀毒软件有时候会误杀&#xff0c;然后就会导致你的游戏程序都打开不了&#xff0c;你必须要修复好了才行&#xff0c;今天小编就…

统计文本中的数字出现频次

统计文本中的数字出现频次&#xff1a;磁盘上有多个文本文件&#xff0c;统计数据写入excel。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教…

AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘

在使用ddddocr进行图片识别时&#xff0c;报错了&#xff1a; AttributeError: module PIL.Image has no attribute ANTIALIAS 我使用的是Python 3.11&#xff0c;查看一下pillow的版本&#xff1a; print(PIL.__version__)10.0.0 到处百度也没找到原因&#xff0c;最后&am…

IDEA解析Maven依赖过慢

查看Maven配置文件&#xff0c;是否更改为阿里源 maven安装目录/conf/setting.xml 搜索mirrors并在其中添加 <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/ </url&…

【嘉立创EDA】层次原理图功能使用,或放置复用图块方法

文章路标👉 文章解决问题主题内容小结文章解决问题 1️⃣ 在一些较为复杂的原理图绘制时,常需要使用到复用图块。何为复用图块,笔者摘取ST MB1136设计原理图纸可以较好表述这个功能,如下图所示: [本图摘取自NUCLEO-F103RB设计图纸 sheet 2 of 5] 图中左上角绿色图块为…

探索iPadOS 17的亮点特性:值得关注的新功能揭秘

探索iPadOS 17的亮点特性&#xff1a;值得关注的新功能揭秘 看完在WWDC23上作为久违的“OneMoreThing”亮相的令人兴奋的AppleVisionPro后&#xff0c;是时候看看同样作为重要角色出现在发布会上的iPadOS了。与iOS一样&#xff0c;iPadOS也来到了17时代。除了一年后同步iOS16的…

WinApp自动化测试之WinAppDriver工具简介

前篇文章中&#xff0c;我们讲到了WinApp自动化测试工具的选择&#xff0c;今天我们来简单介绍WinAppDriver工具。 Windows Application Driver (WinAppDriver)是Windows系统上的一个应用程序驱动工具&#xff0c;使用该驱动程序&#xff0c;测试人员能够通过Appium-Python-Cl…

el_table切换行前校验,决定是否可切换

思路&#xff1a;拿到当前点击行并存储比如叫做oldRow&#xff0c;把即将切换行的row与oldRow做对比&#xff0c;校验是否可切换&#xff0c;若校验不可切换&#xff0c;则通过遍历仍选中仍选中oldRow.

python简单实现人脸检测/跟随

import cv2# 加载人脸识别器的模型 face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)# 打开摄像头 cap cv2.VideoCapture(0)# 初始化人脸框位置 prev_faces []# 定义绘制带圆角矩形边框的函数 def draw_rounded_rectangle(…

C语言学习(三十一)---结构体、联合体的在内存中的存储

在上一篇文章中&#xff0c;我们学习了枚举、位段和联合体的相关内容&#xff0c;在文章的末尾&#xff0c;我们还差了关于联合体的存储问题的内容&#xff0c;今天我们将学习该部分的内容&#xff0c;好了&#xff0c;话不多说&#xff0c;开整&#xff01;&#xff01;&#…

TiDB(2):TiDB架构特性

1 TiDB 整体架构 TiDB 集群主要包括三个核心组件&#xff1a;TiDB Server&#xff0c;PD Server 和 TiKV Server。此外&#xff0c;还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。 架构图解 1.1 TiDB Server TiDB Server 负责接收…

20个主流的代码生成LLM大模型及9种常见应用场景

基于生成式AI的代码生成&#xff08;Code Generation&#xff09;是一个重要的新领域&#xff0c;用于根据不完整的数据源、用另一种编程语言编写的程序、自然语言描述或执行日志来预测代码或程序结构。 多年来&#xff0c;开发人员经常从博客、帖子、文章和其他网站获取代码&…

vue引用百度地图,drawingManager.setDrawingMode不能接受参数,否则会报错

直接上部分代码&#xff1a; 引用百度地图后&#xff0c;没报错&#xff0c;但是鼠标绘制线路时报错&#xff1a; // 绘制点线 this.drawingManager new window.BMapLib.DrawingManager(this.map, { isOpen: true, //是否开启绘制模式 //enableDrawingTool: true, //是否显示…

数据结构 | 线索二叉树

一、数据结构定义 /* 线索二叉树 */ typedef char ThreadType; typedef struct ThreadNode {ThreadType data;struct ThreadNode* lchild, * rchild;int ltag, rtag; //左右线索标志 }ThreadNode, *ThreadTree; 二、方法概览 ThreadTree createTree(); //先序方法创建二叉树…

==和equals的区别

“”和equals 最大的区别是 “”是运算符&#xff0c;如果是基本数据类型&#xff0c;则比较存储的值&#xff1b;如果是引用数据类型&#xff0c;则比较所指向对象的地址值。equals是Object的方法&#xff0c;比较的是所指向的对象的地址值&#xff0c;一般情况下&#xff0c…

Jvisualvm内存模型剖析-JVM(五)

上篇文章代码讲解了tomcat加载以及gc回收流程。 Jvm内存模型剖析优化-JVM&#xff08;四&#xff09; Jvisualvm 我们可以编写如上代码&#xff0c;之后打开jvm自带的工具jvisualvm。 如果我们看visual不会明显变化&#xff0c;则可以修改睡眠参数&#xff0c;时间改小。 当…