0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Purple Pi OH Android11 ROOT 方法

触觉智能 2023-08-04 08:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

为了让应用程序可以直接调用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等多种系统,提供丰富开源资料。

产品规格书:Purple Pi OH 产品手册

88afcecc-325f-11ee-bbcf-dac502259ad0.png88ed18cc-325f-11ee-bbcf-dac502259ad0.png

关闭selinux

device/rockchip/common/BoardConfig.mk

diff --git a/device/rockchip/common/BoardConfig.mkb/device/rockchip/common/BoardConfig.mk
indexe03c54f6a0..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-sourceparts, ifthey'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@@ voidextract_uidgids(constchar* uidgids, uid_t* uid, gid_t* gid, gid_t* gids, i
}

intmain(intargc, char** argv){
- uid_tcurrent_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@@ staticconststructfs_path_configandroid_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@@ staticvoidEnableKeepCapabilities(fail_fn_t fail_fn) {
}

staticvoidDropCapabilitiesBoundingSet(fail_fn_t fail_fn) {
- for(inti = 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@@ intcap_task_setnice(struct task_struct *p, intnice)
staticintcap_prctl_drop(unsignedlongcap)
{
structcred*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版本

sourcebuild/envsetup.sh
lunch rk3566_r-userdebug

检测验证root是否成功

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

publicstaticvoidRootCommand() {
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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    4043

    浏览量

    134848
  • 主板
    +关注

    关注

    55

    文章

    2436

    浏览量

    77467
  • root
    +关注

    关注

    1

    文章

    87

    浏览量

    22202
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    OH320-LA-EVAL评估板快速上手指南

    OH320-LA-EVAL评估板快速上手指南 在电子设计领域,评估板是验证和测试电子元件性能的重要工具。今天我们就来详细了解一下OH320-LA-EVAL评估板的快速启动方法。 文件下载
    的头像 发表于 05-12 13:15 140次阅读

    OH200 - EVAL评估板快速上手指南

    OH200 - EVAL评估板快速上手指南 在电子工程领域,评估板是我们进行产品测试和开发的重要工具。今天就来和大家分享一下CONNOR WINFIELD的OH200 - EVAL评估板的快速启动
    的头像 发表于 05-12 13:15 178次阅读

    OH100 - EVAL评估板快速上手指南

    OH100 - EVAL评估板快速上手指南 作为电子工程师,在进行相关电路设计和测试时,评估板的正确使用至关重要。今天就来为大家详细介绍OH100 - EVAL评估板的快速启动指南,帮助大家高效
    的头像 发表于 05-12 11:55 305次阅读

    2026年开源鸿蒙技术课题申报及参与流程(OH-TSC小程序操作指引)

    推动2026年开源鸿蒙技术课题的申报与参与。欢迎优先使用OH-TSC小程序完成相关操作。 01 申报课题 • 申报要求: 征集时间:全年 征集对象:各高校技术俱乐部、TSG、PMC、社区技术专家学者等。 • 申报方法: 进入“OH
    的头像 发表于 04-28 16:11 178次阅读
    2026年开源鸿蒙技术课题申报及参与流程(<b class='flag-5'>OH</b>-TSC小程序操作指引)

    Android 11(i.MX8MM,内核 5.4.70)– CLANG 的 QCA9377 WiFi 蓝牙驱动程序编译问题求解

    无法支持 CLANG,请确认,以便我们可以考虑替代方法。 任何将 WiFi 蓝牙模块与 Android 11(i.MX8MM,内核 5.4.70)集成QCA9377见解或推荐工作流程将不胜感激。
    发表于 04-01 06:12

    RK3568+Android11 GT911触控驱动移植与配置实战

    在RK3568平台的Android11系统开发中,汇顶GT911作为小尺寸5点电容触控芯片是常见选型,其驱动移植核心围绕 设备树适配、内核编译配置、驱动代码微调 三大环节展开。本文结合实际项目修改
    的头像 发表于 03-19 11:20 1197次阅读
    RK3568+<b class='flag-5'>Android11</b> GT911触控驱动移植与配置实战

    技术分享 | RK3568 Android11 如何实现自启动应用

    随着Android版本的不断升级,对于应用权限的管理会更加苛刻。我司IAC-RK3568-Kit开发板默认搭载Android11,相比较之前RK3288的产品安卓版本变更较大,有些客户反馈之前
    的头像 发表于 02-05 17:26 807次阅读
    技术分享 | RK3568 <b class='flag-5'>Android11</b> 如何实现自启动应用

    RK3568 Android11编译环境搭建及报错解决指南

    在嵌入式开发领域,RK3568 芯片凭借其出色的性能被广泛应用。基于 RK3568 进行 Android11 系统的开发,首先要搭建好编译环境。本文将详细介绍在 Ubuntu20.04 系统上搭建 RK3568 Android11 编译环境的过程,并针对常见的报错给出解决
    的头像 发表于 02-04 17:37 2356次阅读
    RK3568 <b class='flag-5'>Android11</b>编译环境搭建及报错解决指南

    触觉智能Purple Pi OH首发开源鸿蒙6.0 XTS认证,开源鸿蒙正式开启6.0时代!

    11月28日,触觉智能PurplePiOH开发板通过了开源鸿蒙OpenHarmony6.0ReleaseXTS生态兼容认证,成为了开发板类别首个通过的产品与厂商!(触觉智能PurplePiOH开发板
    的头像 发表于 11-28 18:45 1350次阅读
    触觉智能<b class='flag-5'>Purple</b> <b class='flag-5'>Pi</b> <b class='flag-5'>OH</b>首发开源鸿蒙6.0 XTS认证,开源鸿蒙正式开启6.0时代!

    如何基于开发板RK3568 Android 11强制所有应用横屏展示

    RK3568 Android 11强制所有应用横屏展示,1、打开frameworks/base/core/java/android/content/pm/parsing/component
    的头像 发表于 11-07 16:07 945次阅读
    如何基于开发板RK3568 <b class='flag-5'>Android</b> <b class='flag-5'>11</b>强制所有应用横屏展示

    技术分享 | RK3568 Android预安装应用

    很多客户在使用安卓系统时希望自己的业务APP能够第一时间开机启动,并且内置在系统当中。今天就以我司IAC-RK3568-Kit为例,分享如何在Android11系统中内置自己的业务APP。购买我司
    的头像 发表于 08-06 17:23 1029次阅读
    技术分享 | RK3568 <b class='flag-5'>Android</b>预安装应用

    尝鲜开源鸿蒙6.0?试试明星开发板Purple Pi OH

    6月19日,开源鸿蒙官方发布了OpenHarmony6.0Beta1版本,触觉智能紧随其后,率先在PurplePiOH开发板进行适配
    的头像 发表于 07-11 18:42 1856次阅读
    尝鲜开源鸿蒙6.0?试试明星开发板<b class='flag-5'>Purple</b> <b class='flag-5'>Pi</b> <b class='flag-5'>OH</b>

    ArkUI-X与Android桥接通信之方法回调

    平台桥接用于客户端(ArkUI)和平台(Android或iOS)之间传递消息,即用于ArkUI与平台双向数据传递、ArkUI侧调用平台的方法、平台调用ArkUI侧的方法。本文主要介绍Andro
    发表于 06-08 22:16

    3步精简Android11预装!瑞芯微开发板系统瘦身实战

    本文介绍瑞芯微开发板安卓Android11系统预装应用裁剪的方法,使用触觉智能PurplePiOH鸿蒙开发板演示,搭载了瑞芯微RK3566芯片,4核1.8Ghz+1T算力NPU;类树莓派
    的头像 发表于 06-06 17:57 1551次阅读
    3步精简<b class='flag-5'>Android11</b>预装!瑞芯微开发板系统瘦身实战

    Android In Docker 中 Magisk 的部署与简单应用指南

    Magisk—系统级“魔法面具”Magisk(MagicMask)是由开发者topjohnwu开发的开源Android框架,自2016年发布以来已成为最受欢迎的Android系统修改工具之一。其核心
    的头像 发表于 05-28 16:42 2693次阅读
    <b class='flag-5'>Android</b> In Docker 中 Magisk 的部署与简单应用指南