摘要:按照 U-Boot、内核、initramfs 和 systemd 四个阶段阅读串口日志,快速区分启动、根分区和网络问题。
适用对象:遇到黑屏、SSH 不通、initramfs 命令缺失或启动停滞的嵌入式 Linux 开发者。本文以串口日志为主要证据,不把单条 HDMI 警告直接当成根因。
文章目录
-
- 本篇要解决什么问题
- 一、启动日志应该怎么看
- 二、检查启动参数
- [三、initramfs 中的检查命令](#三、initramfs 中的检查命令)
- 四、常见启动判断
- [五、为什么 HDMI 日志可能拖慢启动](#五、为什么 HDMI 日志可能拖慢启动)
- 六、把"现象"转换成"下一条命令"
-
- [1. 能进入 `(initramfs)`](#1. 能进入
(initramfs)) - [2. `root=` 指向 PARTUUID](#2.
root=指向 PARTUUID) - [3. 改用 LABEL 时也要验证 LABEL 唯一且真实存在](#3. 改用 LABEL 时也要验证 LABEL 唯一且真实存在)
- [1. 能进入 `(initramfs)`](#1. 能进入
- [七、BusyBox 环境下为什么命令经常"不好使"](#七、BusyBox 环境下为什么命令经常“不好使”)
- [八、HDMI warning 应该怎么处理](#八、HDMI warning 应该怎么处理)
- 九、本文验收清单
- 小结
- 工作流实测截图
- 专栏导航
- 参考资料
本篇要解决什么问题
"SSH 连不上"并不等于"系统没启动"。串口排障最重要的能力,是先判断系统停在哪个阶段,再决定查哪一类问题。
| 串口停留位置 | 说明 | 优先排查 |
|---|---|---|
| U-Boot 前后无内核输出 | 内核可能未被正确加载 | 启动介质、脚本、kernel/DTB 路径 |
| Kernel 有输出,随后进入 initramfs | 内核和 initrd 已运行 | root=、LABEL/PARTUUID、块设备 |
能看到 login: |
基本用户空间已经起来 | IP、路由、sshd、网卡状态 |
| 大量外设 warning 但继续启动 | 不一定是主因 | 先看是否影响关键启动链路 |
本次最关键的实测证据
首次失败时,启动参数里的 PARTUUID 与 blkid 读取到的真实根分区标识不一致。最终使用与分区实际标签匹配的 root=LABEL=writable 后,问题才回到正确的根分区定位路径上。这个案例说明:看到 initramfs 后不要猜,先做标识交叉验证。
一、启动日志应该怎么看
串口日志可以按四段阅读:
- U-Boot:读取启动脚本、内核、initrd 和设备树;
- Kernel earlycon:确认内核是否真正启动;
- initramfs:查找和挂载 rootfs;
- systemd/login:启动服务并提供登录界面。
看到 lubancat login:,说明系统至少已经完成内核、根文件系统和基本用户空间启动。
二、检查启动参数
进入目标系统后:
bash
cat /proc/cmdline
重点检查 root=、rootfstype=、rootwait、console= 和设备树相关参数。本次首次失败时,两个关键值如下:
| 来源 | 根分区标识 |
|---|---|
/proc/cmdline |
root=PARTUUID=614e0000-0000 |
blkid /dev/mmcblk0p2 |
PARTUUID=a75e6771-0e02-4512-9ba0-b6163f829d6e,LABEL=writable |
二者明显不一致,因此 initramfs 无法按启动参数找到 rootfs。最终改为 root=LABEL=writable,与分区标签一致。
这里的结论来自"命令行标识"和"块设备实际标识"的交叉验证,不是看到 initramfs 就直接猜测存储损坏。
三、initramfs 中的检查命令
如果启动失败进入 (initramfs),可使用:
text
blkid
ls -l /dev/mmcblk*
cat /proc/cmdline
blkid 能显示分区 LABEL、UUID 和 PARTUUID;ls -l /dev/mmcblk* 能确认块设备节点是否存在。BusyBox 不是完整 Ubuntu shell,命令选项和工具数量都有限。
本次设备识别结果中,/dev/mmcblk0p1 是 FAT 启动分区,/dev/mmcblk0p2 是标签为 writable 的 ext4 根分区。需要只读检查文件时,可先挂载:
sh
mkdir -p /mnt/root /mnt/boot
mount -o ro /dev/mmcblk0p2 /mnt/root
mount -o ro /dev/mmcblk0p1 /mnt/boot
ls -l /mnt/root/boot
ls -l /mnt/boot
修复前先只读挂载,确认目标无误后再决定是否重新以读写方式挂载。
例如 BusyBox ls 不支持 -h:
text
ls -lh # 可能报 invalid option
ls -l # 使用兼容写法
本次 initramfs 中还出现过 tar: not found。这表示当前救援环境没有打包工具,不应继续照抄完整 Ubuntu 下的 tar 命令;应改用带完整工具的恢复系统,或把分区挂载到另一台 Linux 主机处理。
四、常见启动判断
- 没有任何内核输出:检查串口参数、启动介质和 U-Boot;
- 有内核输出但找不到 rootfs:检查
root=、分区 LABEL、initramfs; - 能进入 initramfs:说明内核和 initrd 已执行,但挂载 rootfs 失败;
- 能进入 login 但 SSH 不通:优先检查网络地址、路由和 sshd,而不是重装内核。
五、为什么 HDMI 日志可能拖慢启动
如果串口反复出现:
text
dwhdmi-rockchip ... i2c read err!
ddc read failed
这说明 HDMI DDC 通信没有正常完成,可能与显示器、线缆、供电或显示 overlay 有关。它与根分区挂载是两个独立问题,但本次日志中与较长启动时间同时出现。当前尚未完成因果验证,不能直接断言它就是全部启动延迟的唯一原因;应记录显示器连接状态和 U-Boot 加载的 overlay,并做有/无显示设备的对照启动测试。
六、把"现象"转换成"下一条命令"
启动故障排查最重要的是减少猜测。可以按下面的判断链处理:
1. 能进入 (initramfs)
说明 CPU 已经执行了新内核,initrd 也已经被加载。此时优先确认块设备和 root 参数:
text
cat /proc/cmdline
blkid
ls -l /dev/mmcblk*
不要一看到 initramfs 就重刷系统。
2. root= 指向 PARTUUID
把命令行中的值和 blkid 输出逐字符比较。PARTUUID 改变后,即使分区内容完全正常,initramfs 仍可能找不到根分区。
3. 改用 LABEL 时也要验证 LABEL 唯一且真实存在
本文实测使用 root=LABEL=writable 解决的是"启动参数与真实分区标识不一致"这一具体问题,并不代表 LABEL 永远优于 PARTUUID。工程上应选择稳定、可维护且与启动脚本一致的标识方式。
七、BusyBox 环境下为什么命令经常"不好使"
initramfs 中通常只有精简 BusyBox 工具集,因此:
- 某些 GNU 命令根本不存在;
- 同名命令支持的参数比完整 Ubuntu 少;
/boot/firmware等完整系统路径可能尚未挂载;- 网络和 DNS 也未必可用。
所以救援时应先执行最小、只读、可确认目标的操作。能只读挂载就先只读挂载,能观察就先观察,再决定是否写入。
八、HDMI warning 应该怎么处理
HDMI DDC 错误可能需要处理,但它和 rootfs 挂载失败是两条不同链路。更严谨的做法是做对照实验:
- 记录连接显示器时的启动时间和日志;
- 记录断开显示器时的启动时间和日志;
- 对比 U-Boot overlay、kernel warning 次数和 systemd 到达 login 的时间。
只有有了对照数据,才能判断它是否是明显启动延迟来源。
九、本文验收清单
- 能根据串口判断停在 U-Boot / Kernel / initramfs / systemd 哪一阶段;
- 已比较
/proc/cmdline与blkid的真实分区标识; - initramfs 中优先采用只读检查;
- 没有把 BusyBox 当成完整 Ubuntu shell;
- 没有把单条 HDMI warning 直接定性为启动失败主因;
- 修复后能看到正常 login 或进一步进入用户空间。
小结
串口日志分析的核心是先定位启动阶段,再决定查看分区、设备树、驱动还是服务。不要把所有警告都当成导致启动失败的根因。
工作流实测截图

图1:串口 initramfs 环境中 blkid 和 mmc 设备节点输出。

图2:从 DDR 初始化到 systemd/SSH 就绪的阶段性日志。
专栏导航
专栏 :LubanCat RK3588 实时 Linux 开发实战(第 9/13 篇)
- 上一篇:LubanCat RK3588 实时 Linux 开发(八):RT 内核 DEB 安装、启动校验与安全回滚
- 下一篇:LubanCat RK3588 实时 Linux 开发(十):RT 内核启动后的驱动、网络与服务全面验收
参考资料
文中的版本号、接口名、设备地址和测试数据均应以自己的板卡实测为准;引用命令前请先确认当前 SDK、内核和启动布局。
标签 :串口调试 U-Boot initramfs Linux启动 RK3588