0.前言:用 USB 接口走 ADB 调试(只能看系统启动后的日志)
如果不想焊线,你可以用板上的 USB 口走 ADB,只能看到安卓系统启动后的日志,看不到 bootloader 阶段的信息。
前提条件
- 板子的 USB 口是 OTG 模式(大部分安卓主板的 USB3.0 口都支持);
- 系统里已经开启了 USB 调试模式(你现在灰屏,看不到界面,所以没法手动开启,需要用之前的系统配置)。
操作步骤
- 用双公头 USB 线,把主板的 USB 口和电脑连接;
- 电脑安装 ADB 工具,打开命令行输入
adb devices; - 输入
adb logcat 就能实时查看系统日志,输入 adb shell 可以进入命令行; - 如果识别不到,大概率是没开启 USB 调试,这个方案就走不通了。
一、下载 ADB(Platform-tools)
官方下载(谷歌,安全无捆绑):
- Windows:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
下载下来是一个 zip 压缩包。
二、解压放到一个好找的位置
- 把 zip 解压,会得到一个文件夹:platform-tools
- 或者 C:\platform-tools(路径不要中文、不要空格)
进去能看到这几个文件:
三、两种用法:临时用 / 全局用(推荐全局)
✅ 方法 A:临时用(最简单,不用改环境变量)
能看到版本号 = 成功
缺点:只能在这个文件夹里用 adb。
✅ 方法 B:全局用(任何位置都能输 adb,推荐)
- 右键「此电脑」→ 属性 → 高级系统设置 → 环境变量
- 点「新建」,把你的 platform-tools 路径粘进去,例如:
重要:关掉所有 CMD/PowerShell,重新开一个!
然后随便在哪输入:
能出版本号就 ok。
四、连接你的安卓板(关键)
- 用 双公头 USB 线:一头插电脑 USB,一头插板子的 USB(OTG 那个口)
能看到一串序列号 + device,就连接成功。
常见失败:
- 显示 unauthorized:需要板子点「允许 USB 调试」(但你现在灰屏,大概率没开调试,这就是为什么串口更稳)
1.OTG接口ADB连接安卓板子
一、先看关键信息
D:\platform-tools>adb devices* daemon not running; starting now at tcp:5037* daemon started successfullyList of devices attachedc3d9b8674f4b94f6 device
daemon not running; starting now:电脑端的 ADB 后台服务还没启动,自动帮你启动了,这是正常现象。daemon started successfullyList of devices attachedc3d9b8674f4b94f6 device
二、通过ADB命令排查问题(直接解决灰屏问题)
办公机通过双头USB连上 ADB,就可以直接通过命令查看系统日志,找到灰屏的原因,不用再焊串口了!
1. 实时查看系统日志(推荐)
在 CMD 里输入下面的命令,就能看到板子运行时的所有日志,灰屏的错误信息也会显示在这里:
- 日志会一直滚动,你可以在板子灰屏的时候,看日志里有没有
HDMI、display、crash、error 相关的报错;
2. 直接进入安卓系统的命令行
输入下面的命令,就能进入板子的系统终端:
进入后,你可以执行安卓系统的命令,比如:
- 查看 HDMI 显示状态:
dumpsys display - 查看系统服务状态:
service list | grep display
3. 保存完整日志到文件(方便分析)
如果日志滚动太快看不清,可以直接把日志保存到电脑上,方便慢慢排查:
- 日志会被保存到
D:\platform-tools\log.txt 文件里; - 灰屏发生后,按
Ctrl + C 停止,打开这个文件就能看到完整日志了。
4.下一步排查建议
- 先执行
adb logcat,再给板子上电,看灰屏瞬间的日志输出; - 重点找
HDMI、display、crash、SurfaceFlinger、error、fatal 这些关键词; - 如果能找到具体的错误,我们就能针对性解决,比如强制开启 HDMI 输出、修改分辨率等。
adb shell进入板子的系统终端,执行安卓系统的命令:dumpsys display查看 HDMI 显示状态。
- 查看系统服务状态:
service list | grep display
2.ADB日志解读(当前信息解读)
一、dumpsys display 的输出拆解
1. 关键结论
从输出看,你执行的命令是成功的,板子也正常响应了,但这段日志里没有直接给出 HDMI 显示的状态信息,末尾的报错是 dumpsys 工具本身的一个格式化异常,和 HDMI 硬件 / 驱动无关,不影响系统运行。
2. 关键细节分析
- 日志开头是一长串
DisplayManager 的功能开关配置,都是系统级的显示策略(比如亮度、刷新率、显示事件),不是你当前连接的显示器状态; - 末尾的报错
java.lang.IllegalArgumentException: Unsupported format code 是 DisplayManagerFlags 打印日志时的一个小 bug,安卓系统里很常见,不代表显示服务挂了; - 你当前的状态:已经成功进入了板子的 shell,说明系统其实已经正常启动了,灰屏不是系统崩溃,而是显示输出的配置问题。
二、下一步操作:直接获取 HDMI 状态
你需要执行更精准的命令,才能看到当前连接的显示器信息。在终端里输入以下命令:
1. 查看所有显示设备(最关键)
dumpsys display | grep -i "DisplayDevice"
这个命令会列出所有已识别的显示设备,包括:
正常情况下,你会看到类似这样的输出:
DisplayDeviceInfo{displayId=0, type=BUILT_IN, ...}DisplayDeviceInfo{displayId=1, type=HDMI, ...}
如果 HDMI 显示器被识别,会出现 type=HDMI 的条目;如果只有 BUILT_IN,说明系统根本没识别到 HDMI 设备。
3.系统默认主显示输出为内置屏幕HDMI为副屏
一、核心结论(一眼看懂)
你的板子完全识别到了 HDMI 显示器(1920×1080@60Hz),但它现在是关闭状态(state OFF),系统默认把「内置屏幕」当成了主显示输出,HDMI 被当成了副屏且没被激活,所以锁屏界面(bootloader 阶段)HDMI 能亮,进入安卓系统后就被关掉了。
二、逐段拆解关键信息
1. 识别到的两个显示设备
DisplayDeviceInfo{"内置屏幕": uniqueId="local:0", ..., state OFF, type INTERNAL}DisplayDeviceInfo{"HDMI 屏幕": uniqueId="local:1", 1920 x 1080, fps=60.0, state OFF, type EXTERNAL}
local:0:内置屏幕,分辨率 1280×800,状态是OFF(板子没接内置屏幕)local:1:HDMI 屏幕,分辨率 1920×1080@60Hz,状态也是OFF(安卓系统里没被激活)
2. 主显示配置的矛盾点
mPrimaryDisplayDevice=内置屏幕(local:0)mPrimaryDisplayDevice=HDMI 屏幕(local:1)
这里能看到系统里写了两次主显示配置,第一次是 “内置屏幕”,第二次又写了 “HDMI 屏幕”,说明系统的显示策略有冲突,导致最终两个屏幕都没被激活。
三、直接解决!3 条命令让 HDMI 亮起来
按顺序在adb shell里执行这几条命令,就能强制把 HDMI 设为主显示并激活:
1. 强制设置 HDMI 为主显示
settings put global display_primary 1
(这里的1对应 HDMI 屏幕的local:1,是它的 displayId)
2. 强制打开 HDMI 显示设备
svc display set-state 1 on
3. 重启显示服务(可选,确保生效)
四、为什么会出现 “锁屏亮一下就灰屏”?
- Bootloader 阶段:板子的启动引导程序直接把视频信号输出到 HDMI,不管系统配置,所以你能看到锁屏界面;
- 安卓系统启动后:系统加载了自己的显示配置,默认把主显示设为内置屏幕,HDMI 被关闭,信号就断了,直接灰屏。
五、执行后的验证方法
重启后如果 HDMI 亮了,就说明配置生效了。如果还是不亮,再执行这条命令看 HDMI 的状态有没有变成ON:
dumpsys display | grep -A 10 "HDMI 屏幕"
看到state ON就说明 HDMI 已经被系统正常激活了。
4.HDMI成功设为了主显示但系统没点亮
一、核心结论(一眼看懂)
HDMI 已经被系统识别,并且成功设为了主显示日志里明确写了:
mPrimaryDisplayDevice=HDMI 屏幕(local:1)
说明你之前的 settings put global display_primary 1 命令生效了,系统现在把 HDMI 当成了主屏幕。
但关键问题:HDMI 还是处于关闭状态 state OFF日志里的核心字段:
DisplayDeviceInfo{"HDMI 屏幕": ..., state OFF, committedState OFF}
虽然它是主显示,但安卓系统没有把它 “点亮”,所以你还是看到灰屏。
二、为什么会这样?
- 你之前执行的
settings put global display_primary 1 只是改了 “主显示配置”,但没有真正发送 “开启显示” 的指令; - 对于 RK3572 这类平台,需要额外的命令来强制唤醒 HDMI 硬件,让它从
OFF 变成 ON。
三、直接解决!按顺序执行这几条命令
在 rk3572_a16:/ 说明进入成功# 3. 获取root权限(你已经成功了)su# 提示符变为 rk3572_a16:/ # 说明root成功