在嵌入式開發中,啟動日志(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的啟動日志,不妨按“階段拆分→抓關鍵字→查手冊”的步驟試試——你會發現,很多之前“卡殼”的問題,都能在日志中找到答案。
如果覺得有用,歡迎分享給身邊的嵌入式同行,也可以在評論區留言你的日志調試經歷~
-
嵌入式
+關注
關注
5198文章
20442瀏覽量
333986 -
Linux
+關注
關注
88文章
11758瀏覽量
219009 -
RK3568
+關注
關注
5文章
644瀏覽量
7938
發布評論請先 登錄
【HZ-RK3568開發板免費體驗】HZ-RK3568開發板操作系統編譯
怎樣對RK3568 Debian10 AP6275S Bluetooth進行調試呢
【求助】自研RK3568工控板,原廠SDK的Linux啟動失敗
【迅為工業RK3568穩定可靠】itop-3568開發板Linux驅動開發實戰:RK3568內核模塊符號導出詳解
拆解RK3568啟動日志:Debian12+Linux6.1下的調試密碼,初學者也能看懂
評論