1、Bring Up流程 SOC (System on a Chip) bring-up是一個複雜的過程,涉及到硬體、固件和軟體的集成和驗證,以下是一個基於BROM,SPL,UBOOT和Linux的啟動流程的概述: BROM (Boot Read-Only Memory)啟動:啟動的最初階段,在這個 ...
1、Bring Up流程
SOC (System on a Chip) bring-up
是一個複雜的過程,涉及到硬體、固件和軟體的集成和驗證,以下是一個基於BROM
,SPL
,UBOOT
和Linux
的啟動流程的概述:
-
BROM (Boot Read-Only Memory)
啟動:啟動的最初階段,在這個階段,系統會執行晶元ROM
裡面的代碼,這部分代碼主要用來檢查啟動模式,包括NOR
、Nand
、Emmc
等,然後從對應的存儲介質中載入SPL(Secondary Program Loader)
代碼。 -
SPL (Secondary Program Loader)
啟動:SPL
屬於Uboot
的一部分,它的主要作用就是:初始化硬體並載入完整的U-boot
,主要體現在初始化時鐘、看門狗、DDR
、GPIO
以及存儲外設,最後將U-boot
代碼載入到DDR
中執行。 -
U-Boot
啟動:U-boot
的主要作用是:引導載入Kernel
和DTS
。U-boot
在啟動之後,同樣初始化Soc
硬體資源,然後會計時等待,並執行預設的啟動命令,將Kernel
和DTS
信息從存儲介質中讀取出來並載入到記憶體中執行。 -
Kernel
啟動:在U-Boot
載入了內核映像和設備樹之後,系統會啟動Linux
。在這個階段,系統會初始化各種硬體設備,載入驅動程式並啟動用戶空間應用程式。
更多乾貨可見:
2、常見問題
Q
:為什麼上一個階段已經初始化了硬體資源,下一個階段為何重覆初始化?
A
:
-
每個階段的硬體初始化,其目標和需求都不同,硬體配置也會不一樣,因此在不同階段進行不同的初始化。
-
硬體狀態可能會改變,在
SOC
啟動過程中,硬體狀態可能會因為電源管理、時鐘管理等原因而改變,這可能需要在每個階段都重新初始化以確保其正確工作 -
為了保證硬體資源的可靠性,最好每個階段都重新初始化一次
Q
:U-boot
載入內核時,會進行重定位的操作,這一操作有何意義?
A
:
-
U-boot
的重定位,主要作用是為了 給內核提供一個連續的、大的記憶體空間,供內核和其他應用程式使用 -
U-boot
的載入過程分兩個階段,即:SPL
和U-boot
,
-
在
SPL
階段,主要將U-boot
代碼從Flash
中載入到RAM
指定位置 -
在
U-boot
階段,U-boot
會將自身從RAM
的開始部分移動到RAM
的末尾,占用高地址空間,從而讓低地址空間可以作為一個連續的,大的記憶體空間供內核和其他應用程式使用。
Q
:在Bring Up
中,為了保證啟動時間,如何裁剪?
A
:
啟動時間的裁剪是一個重要的步驟,其主要目標是縮短從電源打開到操作系統完全啟動的時間。
-
優化
Bootloader
:減小Bootloader
的代碼大小,減少硬體初始化(只初始化必要硬體設備)等 -
優化
Kernel
:減少啟動服務數量,優化服務的啟動順序,使用預載入技術等方法來實現。 -
使用快速啟動模式:一些
SOC
支持快速啟動模式,這種模式下,SOC
會跳過一些不必要的硬體初始化和自檢過程,從而更快地啟動。 -
使用休眠和喚醒技術:一些
SOC
還支持休眠和喚醒技術,這種技術可以將系統的狀態保存到非易失性存儲器中,然後關閉系統。當系統再次啟動時,可以直接從非易失性存儲器中恢復系統的狀態,從而更快地啟動。