拆解RK3568启动日志:Debian12+Linux6.1下的调试密码,初学者也能看懂

电子说

1.4w人已加入

描述

 

 

在嵌入式开发中,启动日志(Boot Log 是硬件调试、驱动开发、系统优化的第一手资料。尤其是基于瑞芯微 RK3568(四核 A55,主打边缘计算、物联网设备)的方案,搭配 Debian12 系统与 Linux6.1 内核时,启动日志能直观反映从硬件初始化到用户登录的全流程。

 

 

本文将逐段解析 RK3568 的启动日志,带你看懂每个阶段的关键信息,理解其对开发者的价值,并教会初学者如何利用日志定位问题。文末附启动流程图和脑图,帮你建立系统化认知。

Linux

一、启动日志全解析:从硬件到系统的 9 个关键阶段

 

RK3568 的启动流程遵循 硬件初始化引导程序内核加载用户态启动” 的嵌入式标准逻辑,日志中每个阶段都有明确的标识,我们按时间线拆解:

 

 

阶段 1DDR 内存初始化(硬件调试核心)

 

启动的第一步是初始化 DDR(内存),这是硬件能否正常工作的基础,日志中对应开头的DDR相关配置:

 

 

  •  
  •  
  •  
  •  
  •  
LPDDR4X324MHzBW=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(电压基准)直接影响内存稳定性,若后续出现内存报错,需优先检查这些参数。

 

 

阶段 2SPL 引导(次级程序加载器)

 

SPLSecondary Program Loader)是 迷你引导程序,负责初始化基础硬件(如 MMCSPI)并加载主 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-slotMMC1 支持 “AB 分区启动Android 常用的双系统备份机制),此处尝试_slot_a,适合需要高可靠性的设备。

 

 

阶段 3U-Boot 与安全固件(BL31+OP-TEE

 

 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)

关键信息

 

 

安全组件版本:BL31v1.44)和 OP-TEEv3.13.0)需与内核、U-Boot 版本兼容,否则会出现 启动卡死

 

 

跳转地址:U-Boot 加载到 0x00a00000BL31 在 0x00040000,需确认内存地址分配无冲突。

 

 

阶段 4Linux 内核启动(驱动与硬件适配)

 

内核启动是日志中最复杂的部分,涵盖 CPU、内存、外设驱动的初始化,我们挑核心信息解析:

 

 

1)硬件基础初始化

 

  •  
  •  
  •  
  •  
[    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核 A55(后续日志会显示 “Brought up 1 node, 4 CPUs”);

 

 

内存分区:DMA 区(用于外设访问)和 Normal 区(主内存),总内存 4GB(对应 0x00200000 到 0x1ffffffff)。

 

 

2)驱动加载状态

 

内核会自动加载硬件驱动,日志中用probed表示成功,error表示失败:

 

 

成功案例:

 

 

  •  
  •  
  •  
[    1.429266] rockchip-gpio fdd60000.gpio: probed pinctrl:gpio@fdd60000 (GPIO驱动成功)[    2.260806] rga2 fdeb0000.rk_rga: probe successfully, irq = 87 (RGA2图形加速驱动成功)[    2.300120] mali fde60000.gpuProbed 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] Failed to start usbdevice.service: Manage USB device functions. (USB设备服务启动失败)

阶段 5:文件系统挂载(系统可用性基础)

 

内核启动后,会挂载根文件系统(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 日志(适合对性能要求高的场景)。

 

 

阶段 6:用户态初始化(systemd 服务管理)

 

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] Failed to start usbdevice.service (USB服务失败,需检查驱动或配置)

阶段 7:最终登录(系统就绪)

 

当所有服务启动完成后,系统进入登录界面:

 

 

  •  
  •  
Welcome to Debian GNU/Linux 12 (bookworm)!root@linaro-alip# (root用户登录成功,系统就绪)

二、启动日志对开发者的 3 大核心价值

 

启动日志不是无用的打印信息,而是嵌入式开发的 调试指南针,其价值主要体现在 个维度:

 

 

1. 硬件调试:验证硬件设计正确性

 

DDR 稳定性:若日志中出现“DDR init failed”,需检查硬件供电(如 VDD_DDR)、时序参数(clk skewtdqss)是否与 datasheet 匹配;

 

 

外设连接:比如“GTP 触摸 I2C 超时,可能是硬件接线错误(SDA/SCL 接反)、上拉电阻缺失,或触摸芯片本身故障;

 

 

供电检查:日志中vdd_logic init 900000 uV(逻辑供电 900mV)、vdd_gpu init 900000 uVGPU 供电 900mV),若数值异常(如低于 800mV),会导致外设工作不稳定。

 

 

2. 驱动开发:定位驱动适配问题

 

驱动加载失败:日志中“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 内存地址被占用,需修改设备树调整内存分配。

 

 

3. 系统优化:缩短启动时间、提升稳定性

 

启动时间分析:日志中每个阶段都有时间戳(如[    0.980086]),可统计各阶段耗时—— 比如 SPL 阶段耗时 100ms,内核启动耗时 5s,用户态服务耗时 3s,针对性优化慢阶段(如禁用无用服务);

 

 

服务管理:通过systemctl status usbdevice.service查看失败服务的详细日志,禁用无关服务(如不需要相机可关闭 rkaiq_3A.service);

 

 

文件系统优化:日志中“ext4 recovery complete” 表示根分区上次异常关机,可通过e2fsck提前修复,避免启动时耗时修复。

 

 

三、初学者如何利用启动日志?步上手法

 

对嵌入式初学者来说,不用一开始看懂所有细节,掌握按阶段拆分抓关键字查手册” 的 步方法即可:

 

 

第一步:按启动阶段” 拆分日志

 

先在日志中标记出 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% 的问题都能通过关键字定位:

 

 

成功标识OKprobedmountedBooted

 

 

失败标识errorFAILEDtimeoutinit failed

 

 

硬件信息CPUDRAMMMCI2CUSB(对应具体硬件)。

 

 

举例:看到“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 的启动流程图和核心脑图:

 

 

1. 启动流程图

 

Linux

2. 启动日志核心脑图

Linux

五、总结:启动日志是嵌入式开发的显微镜

 

 RK3568+Debian12 的开发者来说,启动日志不仅是 启动过程的记录,更是:

 

 

硬件工程师的万用表:验证 DDRI2CUSB 等硬件是否正常;

 

 

驱动工程师的调试器:定位驱动适配与兼容性问题;

 

 

系统工程师的优化指南:缩短启动时间、提升系统稳定性;

 

 

初学者的学习手册:理解嵌入式系统从 到 的启动逻辑。

 

 

下次拿到 RK3568 的启动日志,不妨按 阶段拆分抓关键字查手册” 的步骤试试 —— 你会发现,很多之前 卡壳” 的问题,都能在日志中找到答案。

 

 

如果觉得有用,欢迎分享给身边的嵌入式同行,也可以在评论区留言你的日志调试经历~

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分