拆解RK3568启动日志:Debian12+Linux6.1下的调试密码,初学者也能看懂 电子说
在嵌入式开发中,启动日志(Boot Log) 是硬件调试、驱动开发、系统优化的“第一手资料”。尤其是基于瑞芯微 RK3568(四核 A55,主打边缘计算、物联网设备)的方案,搭配 Debian12 系统与 Linux6.1 内核时,启动日志能直观反映从硬件初始化到用户登录的全流程。
本文将逐段解析 RK3568 的启动日志,带你看懂每个阶段的关键信息,理解其对开发者的价值,并教会初学者如何利用日志定位问题。文末附启动流程图和脑图,帮你建立系统化认知。

RK3568 的启动流程遵循 “硬件初始化→引导程序→内核加载→用户态启动” 的嵌入式标准逻辑,日志中每个阶段都有明确的标识,我们按时间线拆解:
启动的第一步是初始化 DDR(内存),这是硬件能否正常工作的基础,日志中对应开头的DDR相关配置:
LPDDR4X, 324MHzBW=32 Col=10 Bk=8 CS0 Row=16 CS1 Row=16 CS=2 Die BW=16 Size=4096MBchange to 324MHz → 528MHz → 780MHz → 1560MHz(final freq)vrefinner16%, vrefout22% (电压基准参数)clk skew0x26 (时钟偏移)
关键信息:
•内存类型:LPDDR4X,容量 4GB(符合 RK3568 的硬件规格);
•频率切换:从 324MHz(初始)逐步升频到 1560MHz(最终工作频率),需确认硬件供电是否能支撑高频;
•时序参数:clk skew(时钟偏移)、vref(电压基准)直接影响内存稳定性,若后续出现“内存报错”,需优先检查这些参数。
SPL(Secondary Program Loader)是 “迷你引导程序”,负责初始化基础硬件(如 MMC、SPI)并加载主 U-Boot,日志中对应:
U-Boot SPL 2017.09 (Oct 02 2025 - 132555)sfc cmd=9fH(6BH-x4) → unknown raw ID 0 0 0 (SPI Flash识别失败)Trying to boot from MMC2 → MMC no card present (MMC2无卡)Trying to boot from MMC1 → SPL AB-slot _a, successful 0, tries-remain 7 (MMC1成功)
关键信息:
•启动介质优先级:SPL 先尝试 SPI Flash(失败),再试 MMC2(无卡),最后 MMC1(成功),开发者可通过修改 U-Boot 配置调整优先级;
•AB-slot:MMC1 支持 “AB 分区启动”(Android 常用的双系统备份机制),此处尝试_slot_a,适合需要高可靠性的设备。
主 U-Boot 启动后,会加载 ARM 可信固件(BL31)和安全操作系统(OP-TEE),这是嵌入式设备 “安全启动” 的核心:
NOTICE BL31 v2.3()v2.3-645-g8cea6ab0bcl, fwver v1.44 (ATF版本)ITC OP-TEE version 3.13.0-860-g6c78a7d8c (OP-TEE版本)INFO Using opteed sec cpu_context! (启用安全上下文)Jumping to U-Boot(0x00a00000) via ARM Trusted Firmware(0x00040000)
关键信息:
•安全组件版本:BL31(v1.44)和 OP-TEE(v3.13.0)需与内核、U-Boot 版本兼容,否则会出现 “启动卡死”;
•跳转地址:U-Boot 加载到 0x00a00000,BL31 在 0x00040000,需确认内存地址分配无冲突。
内核启动是日志中最复杂的部分,涵盖 CPU、内存、外设驱动的初始化,我们挑核心信息解析:
[ 0.980086] Booting Linux on physical CPU 0x0000000000 [0x412fd050] (CPU型号:ARM Cortex-A55)[ 0.980114] Linux version 6.1.84 (sc@linux1024) (内核版本)[ 0.995619] Machine model: Rockchip RK3568 Linux1024 EVB1 DDR4 V10 Board (硬件型号)[ 1.058549] Zone ranges: DMA [mem 0x0000000000200000-0xffffffff], Normal [mem 0x100000000-0x1ffffffff] (内存分区)
•CPU:4 核 A55(后续日志会显示 “Brought up 1 node, 4 CPUs”);
•内存分区:DMA 区(用于外设访问)和 Normal 区(主内存),总内存 4GB(对应 0x00200000 到 0x1ffffffff)。
内核会自动加载硬件驱动,日志中用probed表示成功,error表示失败:
•成功案例:
[ 1.429266] rockchip-gpio fdd60000.gpio: probed pinctrl:gpio (GPIO驱动成功)[ 2.260806] rga2 fdeb0000.rk_rga: probe successfully, irq = 87 (RGA2图形加速驱动成功)[ 2.300120] mali fde60000.gpu: Probed as mali0 (Mali GPU驱动成功)
•失败案例(需重点关注):
[ 2.483354] GTP-ERR[_do_i2c_write432]: I2c transfer error! (-110) (GTP触摸芯片I2C超时)[ 5.910894] GTP-ERR[gt1x_ts_probe587]: GTP init failed!!! (触摸驱动初始化失败)[] Failed to start usbdevice.service: Manage USB device functions. (USB设备服务启动失败)
内核启动后,会挂载根文件系统(Debian12 使用 ext4),日志中对应:
[ 6.088111] EXT4-fs (mmcblk0p6) recovery complete (mmcblk0p6分区修复完成)[ 6.088308] EXT4-fs (mmcblk0p6) mounted filesystem with ordered data mode (根分区挂载成功)[ 8.422110] EXT4-fs (mmcblk0p7) mounted filesystem with ordered data mode (oem分区挂载)[ 8.527496] EXT4-fs (mmcblk0p8) mounted filesystem without journal (userdata分区挂载)
关键信息:
•分区对应:mmcblk0 是 EMMC 设备,p6 是根分区(/)、p7 是 oem 分区(厂商数据)、p8 是 userdata(用户数据);
•日志中“without journal” 表示 userdata 分区关闭了 ext4 日志(适合对性能要求高的场景)。
Debian12 使用 systemd 管理系统服务,日志中用[ OK ]和[FAILED]标识服务状态:
•成功服务:
[ OK ] Started rkaiq_3A.service: Enable Rockchip camera engine rkaiq (RK相机引擎服务成功)[ OK ] Started ssh.service: OpenBSD Secure Shell server (SSH服务成功,可远程登录)[ OK ] Started lightdm.service: Light Display Manager (图形登录管理器成功)
•警告 / 失败服务(需优化):
Configuration file lib/systemd/system/rkaiq_3A.service is marked world-writable (服务文件权限过宽,有安全风险)[] Failed to start usbdevice.service (USB服务失败,需检查驱动或配置)
当所有服务启动完成后,系统进入登录界面:
Welcome to Debian GNU/Linux 12 (bookworm)!root@linaro-alip# (root用户登录成功,系统就绪)
启动日志不是“无用的打印信息”,而是嵌入式开发的 “调试指南针”,其价值主要体现在 3 个维度:
•DDR 稳定性:若日志中出现“DDR init failed”,需检查硬件供电(如 VDD_DDR)、时序参数(clk skew、tdqss)是否与 datasheet 匹配;
•外设连接:比如“GTP 触摸 I2C 超时”,可能是硬件接线错误(SDA/SCL 接反)、上拉电阻缺失,或触摸芯片本身故障;
•供电检查:日志中vdd_logic init 900000 uV(逻辑供电 900mV)、vdd_gpu init 900000 uV(GPU 供电 900mV),若数值异常(如低于 800mV),会导致外设工作不稳定。
•驱动加载失败:日志中“probe failed” 表示驱动未正确匹配硬件,需检查设备树(DTS)中硬件地址是否正确(如 I2C 设备地址 0x14 是否与实际一致);
•兼容性问题:比如 Mali GPU 驱动 “probed as mali0” 但后续 “gpu hang”,需确认内核版本与 GPU 驱动版本是否兼容(RK3568 的 Mali G52-2EE 需搭配特定版本驱动);
•资源冲突:日志中“can't request region for resource [mem 0xfde40000-0xfde4ffff]” 表示 NPU 内存地址被占用,需修改设备树调整内存分配。
•启动时间分析:日志中每个阶段都有时间戳(如[ 0.980086]),可统计各阶段耗时—— 比如 SPL 阶段耗时 100ms,内核启动耗时 5s,用户态服务耗时 3s,针对性优化慢阶段(如禁用无用服务);
•服务管理:通过systemctl status usbdevice.service查看失败服务的详细日志,禁用无关服务(如不需要相机可关闭 rkaiq_3A.service);
•文件系统优化:日志中“ext4 recovery complete” 表示根分区上次异常关机,可通过e2fsck提前修复,避免启动时耗时修复。
对嵌入式初学者来说,不用一开始看懂所有细节,掌握“按阶段拆分→抓关键字→查手册” 的 3 步方法即可:
先在日志中标记出 6 个核心阶段,对应前文解析的结构:
1.DDR 初始化:找“DDR”“LPDDR4X”“Size” 关键字;
2.SPL/U-Boot:找“U-Boot SPL”“Trying to boot from”;
3.安全固件:找“BL31”“OP-TEE”;
4.内核启动:找“Linux version”“Booting Linux”“probed”“error”;
5.文件系统:找“EXT4-fs”“mounted”;
6.用户态:找“systemd”“[ OK ]”“[FAILED]”。
日志中 80% 的问题都能通过关键字定位:
•成功标识:OK、probed、mounted、Booted;
•失败标识:error、FAILED、timeout、init failed;
•硬件信息:CPU、DRAM、MMC、I2C、USB(对应具体硬件)。
举例:看到“GTP-ERR: I2c transfer error (-110)”,先确认:
1.阶段:内核驱动加载;
2.硬件:GTP 触摸芯片(I2C 总线);
3.问题:I2C 超时(错误码 - 110),优先检查硬件接线。
光看日志不够,需用工具进一步分析:
1.实时查看日志:系统启动后,用dmesg查看内核日志,journalctl -u usbdevice.service查看特定服务的详细日志;
2.日志保存:用dmesg > boot.log保存日志到文件,方便后续分析;
3.硬件手册对照:比如 RK3568 的《Datasheet》中 “I2C 控制器” 章节,确认时钟频率、地址是否与日志中一致。
为了帮你更直观理解,我整理了 RK3568 的启动流程图和核心脑图:


对 RK3568+Debian12 的开发者来说,启动日志不仅是 “启动过程的记录”,更是:
•硬件工程师的“万用表”:验证 DDR、I2C、USB 等硬件是否正常;
•驱动工程师的“调试器”:定位驱动适配与兼容性问题;
•系统工程师的“优化指南”:缩短启动时间、提升系统稳定性;
•初学者的“学习手册”:理解嵌入式系统从 0 到 1 的启动逻辑。
下次拿到 RK3568 的启动日志,不妨按 “阶段拆分→抓关键字→查手册” 的步骤试试 —— 你会发现,很多之前 “卡壳” 的问题,都能在日志中找到答案。
如果觉得有用,欢迎分享给身边的嵌入式同行,也可以在评论区留言你的日志调试经历~
全部0条评论
快来发表一下你的评论吧 !