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

一、启动日志全解析:从硬件到系统的9个关键阶段
RK3568的启动流程遵循“硬件初始化→引导程序→内核加载→用户态启动”的嵌入式标准逻辑,日志中每个阶段都有明确的标识,我们按时间线拆解:
阶段1:DDR内存初始化(硬件调试核心)
启动的第一步是初始化DDR(内存),这是硬件能否正常工作的基础,日志中对应开头的DDR相关配置:
LPDDR4X,324MHzBW=32Col=10Bk=8CS0 Row=16CS1 Row=16CS=2Die BW=16Size=4096MBchangeto324MHz →528MHz →780MHz →1560MHz(final freq)vrefinner16%, vrefout22% (电压基准参数)clkskew0x26 (时钟偏移)
关键信息:
•内存类型:LPDDR4X,容量4GB(符合RK3568的硬件规格);
•频率切换:从324MHz(初始)逐步升频到1560MHz(最终工作频率),需确认硬件供电是否能支撑高频;
•时序参数:clk skew(时钟偏移)、vref(电压基准)直接影响内存稳定性,若后续出现“内存报错”,需优先检查这些参数。
阶段2:SPL引导(次级程序加载器)
SPL(Secondary Program Loader)是“迷你引导程序”,负责初始化基础硬件(如MMC、SPI)并加载主U-Boot,日志中对应:
U-Boot SPL2017.09(Oct022025-132555)sfccmd=9fH(6BH-x4) → unknown raw ID000(SPI Flash识别失败)Tryingto boot from MMC2 → MMC no card present (MMC2无卡)Tryingto boot from MMC1 → SPL AB-slot _a, successful0, tries-remain7(MMC1成功)
关键信息:
•启动介质优先级:SPL先尝试SPI Flash(失败),再试MMC2(无卡),最后MMC1(成功),开发者可通过修改U-Boot配置调整优先级;
•AB-slot:MMC1支持“AB分区启动”(Android常用的双系统备份机制),此处尝试_slot_a,适合需要高可靠性的设备。
阶段3:U-Boot与安全固件(BL31+OP-TEE)
主U-Boot启动后,会加载ARM可信固件(BL31)和安全操作系统(OP-TEE),这是嵌入式设备“安全启动”的核心:
NOTICE BL31 v2.3()v2.3-645-g8cea6ab0bcl, fwver v1.44(ATF版本)ITCOP-TEE version3.13.0-860-g6c78a7d8c (OP-TEE版本)INFO Using opteed sec cpu_context! (启用安全上下文)Jumpingto U-Boot(0x00a00000) via ARM Trusted Firmware(0x00040000)
关键信息:
•安全组件版本:BL31(v1.44)和OP-TEE(v3.13.0)需与内核、U-Boot版本兼容,否则会出现“启动卡死”;
•跳转地址:U-Boot加载到0x00a00000,BL31在0x00040000,需确认内存地址分配无冲突。
阶段4:Linux内核启动(驱动与硬件适配)
内核启动是日志中最复杂的部分,涵盖CPU、内存、外设驱动的初始化,我们挑核心信息解析:
(1)硬件基础初始化
[ 0.980086]Booting Linux on physical CPU0x0000000000[0x412fd050](CPU型号:ARM Cortex-A55)[ 0.980114]Linux version6.1.84(sc@linux1024) (内核版本)[ 0.995619] Machinemodel: Rockchip RK3568 Linux1024 EVB1 DDR4 V10 Board (硬件型号)[ 1.058549] Zoneranges: DMA [mem0x0000000000200000-0xffffffff], Normal [mem0x100000000-0x1ffffffff] (内存分区)
•CPU:4核A55(后续日志会显示“Brought up 1 node, 4 CPUs”);
•内存分区:DMA区(用于外设访问)和Normal区(主内存),总内存4GB(对应0x00200000到0x1ffffffff)。
(2)驱动加载状态
内核会自动加载硬件驱动,日志中用probed表示成功,error表示失败:
•成功案例:
[ 1.429266] rockchip-gpio fdd60000.gpio: probedpinctrl:gpio(GPIO驱动成功)[ 2.260806] rga2 fdeb0000.rk_rga: probe successfully, irq =87(RGA2图形加速驱动成功)[ 2.300120] mali fde60000.gpu:Probedasmali0 (MaliGPU驱动成功)
•失败案例(需重点关注):
[ 2.483354] GTP-ERR[_do_i2c_write432]: I2c transfer error! (-110) (GTP触摸芯片I2C超时)[ 5.910894] GTP-ERR[gt1x_ts_probe587]: GTPinitfailed!!! (触摸驱动初始化失败)[] 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.serviceismarked world-writable (服务文件权限过宽,有安全风险)[] Failed to start usbdevice.service (USB服务失败,需检查驱动或配置)
阶段7:最终登录(系统就绪)
当所有服务启动完成后,系统进入登录界面:
Welcometo Debian GNU/Linux12(bookworm)!root@linaro-alip# (root用户登录成功,系统就绪)
二、启动日志对开发者的3大核心价值
启动日志不是“无用的打印信息”,而是嵌入式开发的“调试指南针”,其价值主要体现在3个维度:
1.硬件调试:验证硬件设计正确性
•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),会导致外设工作不稳定。
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提前修复,避免启动时耗时修复。
三、初学者如何利用启动日志?3步上手法
对嵌入式初学者来说,不用一开始看懂所有细节,掌握“按阶段拆分→抓关键字→查手册”的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的启动流程图和核心脑图:
1.启动流程图

2.启动日志核心脑图

五、总结:启动日志是“嵌入式开发的显微镜”
对RK3568+Debian12的开发者来说,启动日志不仅是“启动过程的记录”,更是:
•硬件工程师的“万用表”:验证DDR、I2C、USB等硬件是否正常;
•驱动工程师的“调试器”:定位驱动适配与兼容性问题;
•系统工程师的“优化指南”:缩短启动时间、提升系统稳定性;
•初学者的“学习手册”:理解嵌入式系统从0到1的启动逻辑。
下次拿到RK3568的启动日志,不妨按“阶段拆分→抓关键字→查手册”的步骤试试——你会发现,很多之前“卡壳”的问题,都能在日志中找到答案。
如果觉得有用,欢迎分享给身边的嵌入式同行,也可以在评论区留言你的日志调试经历~
-
嵌入式
+关注
关注
5209文章
20655浏览量
336974 -
Linux
+关注
关注
88文章
11817浏览量
219535 -
RK3568
+关注
关注
5文章
654浏览量
8107
发布评论请先 登录
【HZ-RK3568开发板免费体验】HZ-RK3568开发板操作系统编译
怎样对RK3568 Debian10 AP6275S Bluetooth进行调试呢
【求助】自研RK3568工控板,原厂SDK的Linux启动失败
【迅为工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解
拆解RK3568启动日志:Debian12+Linux6.1下的调试密码,初学者也能看懂
评论