【深圳触觉智能技术分享】Purple Pi OH Android11 ROOT 方法

news2024/11/17 14:40:29

为了让应用程序可以直接调用su执行系统命令和获取root权限,本文基于Purple Pi OH主板的Android SDK,介绍如果修改和编译一个root版本的Android11系统,以下为sdk源码修改方法。

Purple Pi OH作为一款兼容树莓派的开源主板,采用瑞芯微RK3566 (Cortex-A55) 四核64位超强CPU,主频最高达1.8 GHz,算力高达1Tops,支持INT8/INT16,支持TensorFlow/MXNet/PyTorch/Caffe框架,多路视频输出和输入,支持4K、H.265/H.264视频解码,接口丰富。

玩法丰富,支持OpenHarmony、Ubuntu、Debian、Android等多种系统,提供丰富开源资料。

关闭selinux

device/rockchip/common/BoardConfig.mk

diff --git a/device/rockchip/common/BoardConfig.mk b/device/rockchip/common/BoardConfig.mk
index e03c54f6a0..4fc6dc9868 100755
--- a/device/rockchip/common/BoardConfig.mk
+++ b/device/rockchip/common/BoardConfig.mk
@@ -59,7 +59,7 @@ BOARD_BOOT_HEADER_VERSION ?= 2
 BOARD_MKBOOTIMG_ARGS :=
 BOARD_PREBUILT_DTBOIMAGE ?= $(TARGET_DEVICE_DIR)/dtbo.img
 BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE ?= false
-BOARD_SELINUX_ENFORCING ?= true
+BOARD_SELINUX_ENFORCING ?= false

 # Use the non-open-source parts, if they're present

注释用户组权限检测

system/extras/su/su.cpp

diff --git a/system/extras/su/su.cpp b/system/extras/su/su.cpp
index 1a1ab6bf40..af3d2a68c7 100644
--- a/system/extras/su/su.cpp
+++ b/system/extras/su/su.cpp
@@ -80,8 +80,8 @@ void extract_uidgids(const char* uidgids, uid_t* uid, gid_t* gid, gid_t* gids, i
 }

 int main(int argc, char** argv) {
- uid_t current_uid = getuid();
- if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not allowed");
+ //uid_t current_uid = getuid();
+ //if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not allowed");

     // Handle -h and --help.
     ++argv;

给su文件默认授予root权限

system/core/libcutils/fs_config.cpp

diff --git a/system/core/libcutils/fs_config.cpp b/system/core/libcutils/fs_config.cpp
index 5805a4d19b..92e93e76ff 100644
--- a/system/core/libcutils/fs_config.cpp
+++ b/system/core/libcutils/fs_config.cpp
@@ -188,7 +188,7 @@ static const struct fs_path_config android_files[] = {
     // the following two files are INTENTIONALLY set-uid, but they
     // are NOT included on user builds.
     { 06755, AID_ROOT, AID_ROOT, 0, "system/xbin/procmem" },
- { 04750, AID_ROOT, AID_SHELL, 0, "system/xbin/su" },
+ { 06755, AID_ROOT, AID_SHELL, 0, "system/xbin/su" },

     // the following files have enhanced capabilities and ARE included
     // in user builds.

frameworks/base/core/jni/com_android_internal_os_Zygote.cpp

diff --git a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp b/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
index 9eede83e21..d161e6fad3 100644
--- a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
+++ b/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
@@ -656,7 +656,7 @@ static void EnableKeepCapabilities(fail_fn_t fail_fn) {
 }

 static void DropCapabilitiesBoundingSet(fail_fn_t fail_fn) {
- for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {;
+/* for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {;
     if (prctl(PR_CAPBSET_DROP, i, 0, 0, 0) == -1) {
       if (errno == EINVAL) {
         ALOGE("prctl(PR_CAPBSET_DROP) failed with EINVAL. Please verify "
@@ -665,7 +665,7 @@ static void DropCapabilitiesBoundingSet(fail_fn_t fail_fn) {
         fail_fn(CREATE_ERROR("prctl(PR_CAPBSET_DROP, %d) failed: %s", i, strerror(errno)));
       }
     }
- }
+ }*/
 }

kernel/security/commoncap.c

diff --git a/kernel/security/commoncap.c b/kernel/security/commoncap.c
index 876cfe01d9..ce87b1b780 100644
--- a/kernel/security/commoncap.c
+++ b/kernel/security/commoncap.c
@@ -1166,12 +1166,12 @@ int cap_task_setnice(struct task_struct *p, int nice)
 static int cap_prctl_drop(unsigned long cap)
 {
        struct cred *new;
-
+/*
        if (!ns_capable(current_user_ns(), CAP_SETPCAP))
                return -EPERM;
        if (!cap_valid(cap))
                return -EINVAL;
-
+*/
        new = prepare_creds();
        if (!new)
                return -ENOMEM;

编译镜像

修改后需要重新编译内核和AOSP,Android编译需要选择rk3566_r-userdebug版本

source build/envsetup.sh
lunch rk3566_r-userdebug

检测验证root是否成功

可在应用程序中调用 /system/xbin/su来测试系统是否root成功

public static void RootCommand() {
        Process process = null;
        try {
            process = Runtime.getRuntime().exec("/system/xbin/su");
            process.waitFor();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        } finally {
            if (process != null) {
                process.destroy();
            }
        }
}

root的系统可正常执行,而非root的系统会提示没有权限

java.io.IOException: Cannot run program "/system/xbin/su": error=13, Permission denied

 

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

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

相关文章

【yocto2】利用yocto工具构建嵌入式Linux系统

1.定制化嵌入式linux系统 在实际项目中,一款嵌入式产品往往具有不同的硬件平台和软件需求,因此需要对嵌入式Linux系统进行定制,以满足不同的产品需求。之前的章节中基于Freescale官方提供的例程,构建了运行于imx6ull14x14evk硬件…

OpenCVForUnity(一)简介与插件

文章目录 前言:下载地址:官方文档/教学地址:主要模块的功能: 前言: 端午假期到了,最近我发现了一个非常有意思的课题——OpenCV,而我需要研究的则是OpenCVForUnity。它可以用于在Unity里处理图像、视频和摄像头数据&am…

Linux基础内容(24) —— 线程概念

Linux基础内容(23)—— 信号补充与多线程交接知识_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131275661?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22131275661%22%2…

【无监督学习】0、有监督学习、无监督学习、半监督学习

文章目录 一、有监督学习二、半监督学习三、无监督学习3.1 对比式学习 一、有监督学习 有监督学习最大的特点就是数据集是带标签的,如有监督分类任务,就是给每张图都分配一个真实标签,表示这张图是 dog、cat 或者是 bird。 而标签的作用就是…

Git基本操作命令

目录 一、简介 二、基本命令使用 (1) git add ---将该文件添加到暂存区 (2) git status --- 命令用于查看在上次提交之后是否有对文件进行再次修改 (3) git diff -- 比较文件在暂存区和工作区的差异 (4) git commit --- 将暂存区内容添加到本地仓库中 (5) git reset --…

前端实现实时数据更新:EventSource

前言 大看板相信很多人都做过,通常就是用来展示数据的。最初一些同事(包括我自己)都是通过定时器来实现的,每隔多长时间发送一次请求。后来用户说页面不刷新或者是页面卡死了,讨论的解决方案是改成WebSocket实时推送消…

AI绘图软件分享:Midjourney 基础教程(四)参数进阶

大家好,我是权知星球,今天我们继续来学习Midjourney 基础教程(四):Midjourney 参数进阶。 通过前⼏篇⽂章的学习,我们知道了,想要掌握 Midjourney AI 绘画技术,先需要学习掌握常⽤的…

还在烦恼代码写不出来?低代码助力实现“无码”搭建系统平台

摘要:本文由葡萄城技术团队于CSDN原创并首发。葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 据说… 每敲出来一行代码 就有一根头发离我而去… 而每解决掉一个bug 就有一个毛囊开始休养生息… 程序猿,一个让人既爱又…

USR-C216配置客户端模式,手机接收数据

若是不清楚现在模块什么配置可先恢复出厂设置,将nReload拉低3S即可。 此时模块发出热点名字为USR-C216,无密码 电脑连接后在浏览器输入10.10.100.254,进入后密码和用户名为admin

多数人都不会用,有了这些视频APP,再也不担心失效!

阿虚储物间里一大热门下载内容就是影视类APP了 但相信有这类需求的粉丝都知道:这类APP要么你忍受烦人的广告,要么就找去广告版,但去广告版有个最大的问题就是经!常!失!效! 其实阿虚早就介绍过…

窗口层级树的构建

窗口层级树的构建 参考: android 13 WMS/AMS系统开发-窗口层级相关DisplayArea,WindowContainer第二节 在上一节dumpsys activity containers中,层级树中有如下的标识符: WindowedMagnificationHideDisplayCutoutOneHandedHideDisplayCut…

【软考网络管理员】2023年软考网管初级常见知识考点(4)-局域网基本概念

涉及知识点 局域网特点,局域网体系结构,局域网拓扑结构,局域网传输介质,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 文章目录 涉及知识点前言一、局域网的特点二、局域网体系…

Apache RocketMQ EventBridge:构建下一代事件驱动引擎

作者:沈林 前言 事件驱动,这个词在部分人印象中,它是一个过时的技术——没什么新意。从时间上看,确实也是这样,上世纪 60 年代,事件驱动就已经被正式提出,经常会被在 GUI 编程中。但是在有些人…

IO总线控制器模块在工业自动化中的关键应用

IO总线控制器模块是工业自动化系统中的关键组件,其功能和特点包括: IO集成:IO总线控制器模块通过支持多种IO接口和协议,实现了各种数字和模拟信号的集成和控制。它能够与各种传感器、执行器和其他设备进行通信和数据交换。 实时性…

TCP协议的滑动窗口具体是怎样控制流量的?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言TCP协议概述滑动窗…

小航助学2023年6月GESP_C++四级试卷(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑附件图文 答案:D 第1题高级语言编写的程序需要经过以下( )操作,可以生成在…

1分钟教你从0-1搭建Monorepo多包项目

1、monorepo是啥 在了解Monorepo之前,先说一下Multirepo Multirepo:指定的是不同项目由不同的仓库来存放管理 每个仓库都维护着各项目的npm包依赖 Monorepo指的是包含多个项目的单个仓库。 各个项目可以单独运行、打包、发布 Multirepo:分散式…

【CV】EfficientNet相比resnet有哪些优点,什么是深度可分离卷积

目录 前言使用深度可分离卷积普通卷积的计算参数量深度可分离卷积分为两个步骤:深度卷积和逐点卷积 使用多个缩放因子使用 Swish 激活函数 前言 高效的神经网络主要通过:1. 减少参数数量;2. 量化参数,减少每个参数占用内存 目前的…

Transformer中的Q,K,V

Query,Key,Value的概念取自于信息检索系统,举个简单的搜索的例子来说。当你在某电商平台搜索某件商品(年轻女士冬季穿的红色薄款羽绒服)时,你在搜索引擎上输入的内容便是Query,然后搜索引擎根据…

【历史上的今天】6 月 25 日:笔记本之父诞生;Windows 98 发布;通用产品代码首次商用

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 6 月 25 日,在 1951 年的这一天,世界上第一部彩色电视节目播出。电视经过了许多年的发展,人类的娱乐途径随着互联网的到来变…