Android启用串口控制台和Recovery中启用adb

本文介绍了在Android 6.0系统(RK3368平台,Kernel 3.10.0)上如何在debug模式和user模式下启用串口控制台,以及如何在Recovery环境中配置adb服务。在debug模式下,控制台默认开启,而user模式下需通过修改build/core/main.mk强制开启。在Recovery中启用串口控制台需在init.rc中设置ro.debuggable=1。同时,文章讲解了在Recovery中启动adb服务的步骤,包括设置persist.sys.usb.config=mtp,adb和ro.adb.secure=1,以避免无界面授权确认导致的错误。" 107967739,9668537,SQL进阶指南:连接查询详解,"['数据库', 'SQL', '数据库查询', '关系型数据库', '数据表']

Platform: RK3368

OS: Android 6.0

Kernel: 3.10.0


1. console

debug模式下默认就开启了控制台,所以可以直接在串口中使用,而user模式编译的系统ro.debuggable=0,即控制台默认时关闭的,控制台需要ro.debuggable=1才会启动,所以可以修改build/core/main.mk强制开启调试.在recovery中启用串口控制台,也是一样的.

diff --git a/core/main.mk b/core/main.mk
index aa617c3..3b93009 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -325,7 +325,7 @@ ifneq (,$(user_variant))
     tags_to_install += debug
   else
     # Disable debugging in plain user builds.
-    enable_target_debugging :=
+    enable_target_debugging := true
   endif
 
   # Turn on Dalvik preoptimization for user builds, but only if not
@@ -361,7 +361,7 @@ ifeq (true,$(strip $(enable_target_debugging)))
   INCLUDE_TEST_OTA_KEYS := true
 else # !enable_target_debugging
   # Target is less debuggable and adbd is off by default
-  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
+  ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
 endif # !enable_target_debugging
 
 ## eng ##

init.rc中ro.debuggable=1会触发开启控制台

service console /system/bin/sh
    class core
    console
    disabled
    user shell
    group shell log
    seclabel u:r:shell:s0

on property:ro.debuggable=1
    start console

2. adb

如果需要在recovery中开启adb,需要预设persist.sys.usb.config=mtp,adb来默认开启adb服务,并且设置 ro.adb.secure=1来关闭授权确认,因为recovery中没有界面来开启授权确认,否则会报未被授权错误:

error: device unauthorized.
This adbd's $ADB_VENDOR_KEYS is not set; try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.

adbd服务定义在init.rc中,由init..usb.rc进行触发控制:

# adbd is controlled via property triggers in init.<platform>.usb.rc
service adbd /sbin/adbd --root_seclabel=u:r:su:s0
    class core
    socket adbd stream 660 system system
    disabled
    seclabel u:r:adbd:s0

rk3368触发启动adbd服务定义在init.rk30board.usb.rc:

on property:sys.usb.config=adb
    write /sys/class/android_usb/android0/enable 0
    write /sys/class/android_usb/android0/idVendor 2207
    write /sys/class/android_usb/android0/idProduct 0006
    write /sys/class/android_usb/android0/functions ${sys.usb.config}
    write /sys/class/android_usb/android0/enable 1
    start adbd
    setprop sys.usb.state ${sys.usb.config}
<think> 我们之前讨论了`isAdbEnabled()`方法,现在用户希望了解在Android系统中修改ADB启用状态的方法。 根据用户提供的引用[1][2],我们知道可以通过修改Android框架来默认启用ADB,以及通过ADB命令修改系统设置。 但用户的问题更偏向于系统层面的修改方法,包括代码修改系统设置修改。 我将从两个层面回答: 1. 系统应用层(用户可见):通过设置应用ADB命令修改。 2. 系统框架层(代码修改):修改Android源码以实现默认启用ADB。 同时,我会注意LaTeX格式要求(行内公式用$...$,独立公式用$$...$$)引用标注。 </think> ### Android系统中修改ADB启用状态的方法 在Android系统中,修改ADB启用状态主要通过以下两种方式实现: #### 一、系统应用层修改(用户可见) 1. **开发者选项设置**: ```bash # 进入开发者选项手动开关 $ adb shell settings put global adb_enabled 1 # 启用ADB $ adb shell settings put global adb_enabled 0 # 禁用ADB ``` 通过系统设置的开发者选项界面直接切换开关状态,是最常用的用户级方法[^2]。 2. **ADB命令修改**: ```bash # 通过ADB命令强制修改状态 $ adb shell setprop persist.sys.usb.config adb $ adb reboot # 重启生效 ``` 当开发者选项不可用时,可通过此命令直接修改系统属性。 3. **网络ADB启用**: ```bash # 启用无线调试(Android 11+) $ adb pair ip_address:port $ adb connect ip_address:port ``` 无线调试不受USB物理连接限制,状态独立管理。 #### 二、系统框架层修改(代码级) 1. **修改系统服务逻辑**: 在`AdbManagerService.java`中重写核心方法: ```java public void setAdbEnabled(boolean enable, AdbTransportType transport) { // 强制设置为true mEnabled = true; // 覆盖默认逻辑 persistAdbEnabledState(); // 持久化存储 broadcastAdbEnabledState(); // 通知系统组件 } ``` 2. **默认启用配置**: 在`core/res/res/values/config.xml`中添加: ```xml <bool name="config_adbEnabledByDefault">true</bool> <!-- 默认启用标记 --> ``` 3. **USB策略覆盖**: 在`UsbDeviceManager.java`初始化时注入: ```java void setAdbEnabled() { mAdbEnabled = true; // 状态变量强制置位 updateAdbState(); // 更新USB配置 } ``` 4. **权限验证绕过**: 修改`AdbService.java`的权限检查逻辑: ```java if (checkCallingPermission(MANAGE_DEBUGGING)) { // 原始权限校验 } else { // 修改为:直接允许操作 return true; // 绕过权限检查 } ``` #### 三、数学建模说明 ADB状态转换可通过有限状态机描述: $$ S = \{ \text{Disabled}, \text{Enabled} \} \\ T: \text{Disable} \xrightarrow{\text{enable()}} \text{Enabled} \quad T: \text{Enabled} \xrightarrow{\text{disable()}} \text{Disabled} $$ 其中状态迁移函数 $T$ 的触发条件为: $$T(s) = \begin{cases} \text{Enabled} & \text{if } s=\text{Disabled} \land \text{enable\_condition} \\ \text{Disabled} & \text{if } s=\text{Enabled} \land \text{disable\_condition} \end{cases}$$
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值