[RK3568 Android13]禁止su获取root权限

平台:RK3568

系统:Android 13

源代码:rk3568_android13.0_r01

禁止su命令获取root权限

安卓主板通常可通过数据线连接电脑,使用ADB来访问操作系统。在系统中,默认是可以通过su指令来获取系统权限,当前需求禁止su命令获取root权限,避免用户一些操作,导致系统问题。

关于su命令在系统中main.mk中控制是否可用,决定adb权限的几个变量为:

ro.secure=1 // 1:安全模式下,设备无root权限;0:设备有root权限。

ro.debuggable = 1 // 1=可su使能root权限,0=禁止su打开root权限

代码中可看到通过判断enable_target_debugging是否使能ro.debuggable。

只需要修改:

enable_target_debugging := false

源代码路径:/build/make/core/main.mk

## user/userdebug ##

user_variant := $(filter user userdebug,$(TARGET_BUILD_VARIANT))
enable_target_debugging := true
tags_to_install :=
ifneq (,$(user_variant))
  # Target is secure in user builds.
  ADDITIONAL_SYSTEM_PROPERTIES += ro.secure=1
  ADDITIONAL_SYSTEM_PROPERTIES += security.perf_harden=1

  ifeq ($(user_variant),user)
    ADDITIONAL_SYSTEM_PROPERTIES += ro.adb.secure=1
  endif

  ifeq ($(user_variant),userdebug)
    # Pick up some extra useful tools
    tags_to_install += debug
  else
    # Disable debugging in plain user builds.
    enable_target_debugging :=
  endif

  # Disallow mock locations by default for user builds
  ADDITIONAL_SYSTEM_PROPERTIES += ro.allow.mock.location=0

else # !user_variant
  # Turn on checkjni for non-user builds.
  ADDITIONAL_SYSTEM_PROPERTIES += ro.kernel.android.checkjni=1
  # Set device insecure for non-user builds.
  ADDITIONAL_SYSTEM_PROPERTIES += ro.secure=0
  # Allow mock locations by default for non user builds
  ADDITIONAL_SYSTEM_PROPERTIES += ro.allow.mock.location=1
endif # !user_variant

ifeq (true,$(strip $(enable_target_debugging)))
  # Target is more debuggable and adbd is on by default
  ADDITIONAL_SYSTEM_PROPERTIES += ro.debuggable=1
  # Enable Dalvik lock contention logging.
  ADDITIONAL_SYSTEM_PROPERTIES += dalvik.vm.lockprof.threshold=500
else # !enable_target_debugging
  # Target is less debuggable and adbd is off by default
  ADDITIONAL_SYSTEM_PROPERTIES += ro.debuggable=0
endif # !enable_target_debugging

<think>好的,我现在需要帮助用户解决在RK3568Android 13系统中设置串口权限的问题。首先,我要回顾用户之前的问题和我的回答,确保这次回答的一致性。用户之前询问的是在RK3568 SDK中设置权限的方法,涉及Buildroot和Linux权限管理。现在用户转向Android 13系统,所以需要调整方法,因为Android权限机制与Linux有所不同。 用户当前的需求是在RK3568Android 13系统中设置串口权限。我需要考虑Android系统的权限管理方式,尤其是SELinux和udev规则。首先,串口设备在Android中通常通过/dev/ttyS*节点访问,所以权限设置可能需要修改这些节点的访问权限。 接下来,我应该分步骤来回答。可能需要包括修改设备树的GPIO配置,设置udev规则来更改设备节点的权限,调整SELinux策略以允许访问,以及修改init.rc脚本确保启动时应用这些设置。此外,还需要考虑Android的属性系统和内核配置。 需要注意用户是否已经具备一定的Android系统开发经验,比如是否有源码编译环境,是否熟悉SELinux策略的编写。假设用户有这些基础,所以需要提供具体的配置文件和代码示例。 另外,用户可能遇到的常见问题包括权限未正确应用,SELinux拒绝访问,或者设备节点不存在。因此,在回答中需要包含验证步骤,比如通过adb shell检查设备节点权限,查看dmesg日志中的SELinux错误,以及如何重新编译和刷写系统镜像。 需要确保提供的命令和路径与RK3568 Android 13的SDK结构相符,可能需要用户根据实际情况调整路径。同时,提醒用户备份重要文件,避免配置错误导致系统无法启动。 最后,生成的相关问题应该围绕Android系统权限管理、SELinux策略调试以及RK3568特定配置展开,帮助用户进一步解决可能遇到的问题。</think>根据RK3568 Android 13系统的特性,设置串口权限需通过Linux内核层和Android框架层双重配置。以下是具体实现步骤: ### 一、内核设备树配置 1. **确认串口节点路径** 在设备树文件`rk3568-android.dtsi`中定位串口节点: ```dts &uart2 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart2m0_xfer>; // 添加默认权限配置 linux,default-permissions = <0x666>; // 八进制权限值 }; ``` 2. **GPIO复用配置** 在`pinctrl`节点中确认串口引脚复用设置: ```dts pinctrl { uart2 { uart2m0_xfer: uart2m0-xfer { rockchip,pins = <1 RK_PC0 1 &pcfg_pull_up>, <1 RK_PC1 1 &pcfg_pull_up>; }; }; }; ``` ### 二、Android框架层配置 1. **ueventd.rc权限规则** 在`system/core/rootdir/ueventd.rc`添加: ```rc # 串口设备权限设置 /dev/ttyS2 0666 root system /dev/ttyS3 0660 system radio ``` 2. **SELinux策略修改** (1)在`device/rockchip/rk356x/sepolicy/`目录下新增文件`hal_serial.te`: ```te type hal_serial_device, dev_type; allow hal_serial hal_serial_device:chr_file { open read write ioctl }; ``` (2)在`file_contexts`中添加设备标签: ```txt /dev/ttyS[2-3] u:object_r:hal_serial_device:s0 ``` ### 三、Init脚本配置 在`device/rockchip/rk356x/init.rk30board.rc`中添加: ```rc # 启动时设置权限 on boot chmod 0666 /dev/ttyS2 chown system system /dev/ttyS3 ``` ### 四、系统属性控制 在`system.prop`中添加调试参数: ```properties # 允许非root用户访问串口 sys.serial.debug=1 ``` ### 五、验证步骤 1. 编译后通过adb验证: ```bash adb root adb shell ls -l /dev/ttyS* # 预期输出:crw-rw-rw- 1 root system 4, 66 2023-08-08 10:00 /dev/ttyS2 adb shell dmesg | grep -i uart # 应显示串口初始化成功信息 ``` 2. 测试应用程序需在AndroidManifest.xml声明权限: ```xml <uses-permission android:name="android.permission.SERIAL_PORT" /> ``` ### 六、快速修复方案(无需编译) 临时修改权限(重启失效): ```bash adb shell su root chmod 666 /dev/ttyS2 adb shell setenforce 0 # 临时关闭SELinux ``` ### 常见问题解决 1. **权限被重置**:检查`ueventd.rc`是否被覆盖,确认`BOARD_UEVENTD_RC_OVERRIDE`配置 2. **SELinux拒绝访问**:使用`adb shell dmesg | grep avc`查看详细拒绝日志 3. **节点未生成**:确认内核配置`CONFIG_SERIAL_8250=y`已启用 --- **编译注意**:需完整执行以下命令使配置生效: ```bash source build/envsetup.sh lunch rk3568-userdebug make -j$(nproc) ``` --相关问题-- 1. 如何调试RK3568 Android系统的SELinux权限拒绝问题? 2. Android 13的ueventd.rc文件覆盖规则是怎样的? 3. RK3568串口通信出现数据丢失如何排查? 4. 如何在Android应用中安全地操作串口设备?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值