廣州網(wǎng)站建設(shè) 廣州亦客網(wǎng)絡(luò)網(wǎng)絡(luò)推廣員工作好做嗎
SoC HPS啟動流程
- Boot ROM
- Preloader
- Boot Loader
HPS的啟動是一個多階段的過程,每一個階段都會完成對應(yīng)的工作并且將下一個階段的執(zhí)行代碼引導(dǎo)起來。每個階段均負責(zé)加載下一個階段。第一個軟件階段是引導(dǎo) ROM,引導(dǎo) ROM 代碼查找并且執(zhí)行稱為預(yù)加載器的第 2 個階段軟件。預(yù)加載器如果找到下一個階段軟件,那么對其執(zhí)行。預(yù)加載器和接下來的引導(dǎo)階段 ( 如果存在 )統(tǒng)稱為用戶軟件。用戶軟件位于 HPS 的外部并且由用戶提供。引導(dǎo) ROM 代碼僅知道預(yù)加載器,但不知道接下來任何可能存在的引導(dǎo)階段。
當(dāng)處理器從復(fù)位(比如上電)釋放并且CPU執(zhí)行內(nèi)部引導(dǎo)ROM(Boot ROM)中的復(fù)位異常處理代碼時(通過指定復(fù)位向量指定Boot ROM區(qū)域?qū)崿F(xiàn)自動執(zhí)行Boot ROM),HPS開始進行引導(dǎo);當(dāng)引導(dǎo)ROM(Boot ROM)中的代碼跳到引導(dǎo)軟件的下一個階段時,引導(dǎo)程序結(jié)束。引導(dǎo)軟件的下一個階段被稱為預(yù)加載器,預(yù)加載器可以定制并且通常存儲在HPS外部的基于閃存的非易失性存儲器。
處理器可以從以下資源進行引導(dǎo):
- NAND閃存
- SD/MMC閃存
- Quad SPI閃存
- FPGA內(nèi)核邏輯
Boot ROM
Boot ROM是HPS內(nèi)核上一段ROM中固化的可執(zhí)行程序,作用是系統(tǒng)復(fù)位之后,執(zhí)行引導(dǎo)preloader并且將CPU使用權(quán)交給preloader進行后續(xù)工作的過程。
Boot ROM完成的具體工作還有:
- 使能指令緩存,branch predictor,浮點單元,NEON 向量單元
- 設(shè)定看門狗定時器,Boot ROM保留適用
- 根據(jù)CLKSEL設(shè)定配置MainPLL和外設(shè)PLL
- 根據(jù)BOOTSEL設(shè)定配置I/O引腳的復(fù)用(此處只是完成了QSPI or SPI Flash or SD/MMC controller 的引腳的復(fù)用,更多的引腳的復(fù)用需要根據(jù)preloader才能夠完成設(shè)定)
- 初始化FLASH Controller 到默認設(shè)置
Boot ROM引導(dǎo)的preloader來源分為3類:
- 片上RAM熱啟動(對應(yīng)圖2框圖①)
如果之前執(zhí)行過一次preloader,preloader會留在on-chip RAM中,按下熱復(fù)位按鍵后,會首先選擇從on-chip RAM啟動,此過程具有最高優(yōu)先級,但是從on-chip RAM 啟動時會對遺留的preloader代碼進行CRC校驗(具體是否校驗用戶可以通過warmramgrp配置決定),校驗成功才會執(zhí)行。這樣做防止了用戶對on-chip RAM里的內(nèi)容進行更改!如校驗失敗,會選擇從Flash中啟動preloader(對應(yīng)圖2框圖③)。 - 從FPGA部分冷啟動(對應(yīng)圖2框圖②)
此方式具有第二優(yōu)先級,如果用戶設(shè)定了bootsel從FPGA啟動,則會等待FPGA配置成功(通過FPGA manager獲取FPGA的狀態(tài)),HPS會通過 HPS-to-FPGA bridge執(zhí)行位于 0xC0000000(相對于HPS-to-FPGAbridge偏移地址為0)的memory中的指令。 - 從FLASH存儲器冷啟動(對應(yīng)圖2框圖④)
如果在找不到preloader的話,則會檢驗FPGA處的回調(diào)鏡像(callback image),等待復(fù)位。對應(yīng)圖2框圖⑤、⑥。
說明:
(1)只有冷啟動才會選擇從FPGA 引導(dǎo)
(2)不論熱啟動還是FPGA冷啟動,如不成功都會進入到了紅色框的QSPI啟動中
(3)圖2框圖②中的yes 和 no 由bootsel 決定,圖2框圖③、④中最后具體是使用哪個FLASH存儲器也由bootsel管腳決定。
補充:
(1)以上的冷、熱分別表示上電時和已上電。
(2)從斷電狀態(tài)到上電自動產(chǎn)生的復(fù)位成為冷復(fù)位,冷復(fù)位用英文表示Restart。已經(jīng)通電的情況下給一個復(fù)位信號稱為熱復(fù)位,熱復(fù)位用英文表示Reset。
(3)熱啟動和冷啟動區(qū)別:從斷電到上電啟動成為冷啟動;上電的狀態(tài)下重啟系統(tǒng)成為熱啟動。
(4)熱復(fù)位和熱啟動區(qū)別:二者既有相同之處又有不同之處,不同在于熱復(fù)位是復(fù)位相關(guān)存儲器,熱啟動是重新啟動相關(guān)設(shè)備。
Preloader
preloader(預(yù)加載器)的命名相對于BootLoader,其作用類似于PC主板上的BIOS,BIOS在系統(tǒng)啟動之前控制著主板上的硬件設(shè)備,引導(dǎo)系統(tǒng)啟動程序。preloader在HPS中完成的功能主要有系統(tǒng)時鐘配置、引腳的復(fù)用配置、存儲器初始化以及引導(dǎo)用戶軟件,下一步用戶軟件可以直接是用戶的baremental 程序,也可以不需要bootloader的系統(tǒng)程序,如ucos,或者是操作系統(tǒng)的引導(dǎo)程序,如u-boot(開源引導(dǎo)加載器)。
預(yù)加載器被允許從 HPS 可用的任何器件加載下一個階段引導(dǎo)軟件。典型源頭包括含有預(yù)加載器的同一閃存器件,一個不同的閃存器件或一個如 EMAC 的通信接口。
引導(dǎo)加載器:引導(dǎo)加載器加載操作系統(tǒng)并且將軟件控制傳遞到操作系統(tǒng)。
HPS啟動過程中三大典型用戶軟件架構(gòu):
(1)preloader+baremental code
(2)preloader+無bootloader的操作系統(tǒng)(如ucos)+用戶定義軟件
(3)preloader+bootloader code(如u-boot)+操作系統(tǒng)(如linux)+用戶定義軟件
preloader具體完成的工作:
- 初始化SDRAM接口
- 配置 remap 寄存器,把on-chip RAM 映射至地址0x0,異常會被preloader處理
- on-chip RAM 可以被讀寫,初始地址從0x0對齊
- 通過scan manager配置HPS I/O
- 通過system manager配置引腳復(fù)用
- 通過clock manager配置HPS時鐘
- 初始化包含了下一階段啟動代碼的FLASH控制器(NAND, SD/MMC, or quad SPI)
- 啟動下一階段或者將用戶代碼引導(dǎo)入SDRAM,并把CPU控制權(quán)交至下一段代碼
Boot Loader
Boot loader(系統(tǒng)引導(dǎo)程序),操作系統(tǒng)內(nèi)核運行之前運行的一段程序。它首先完成系統(tǒng)硬件的初始化,包括時鐘的設(shè)置、存儲區(qū)的映射等,設(shè)置堆棧指針等;然后把操作系統(tǒng)內(nèi)核從flash區(qū)拷貝帶ram區(qū),并跳轉(zhuǎn)到內(nèi)核的入口,將系統(tǒng)的控制權(quán)交給操作系統(tǒng),從此系統(tǒng)的運行和Boot loader再無任何關(guān)系。
BootLoader啟動方式:
大多數(shù)BootLoader都有兩種操作模式:啟動加載模式和下載模式,BootLoader的組最終目的都是啟動內(nèi)核。
1.啟動加載模式(boot loading)
上電后,BootLoader從板子的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到RAM中運行,整個過程沒有用戶介入。這種模式是BootLoader的正常工作模式,產(chǎn)品發(fā)布時候,BootLoader就工作在這種模式下。
2.下載模式(down loading)
這種模式下,開發(fā)人員使用各種命令,通過串口連接或者網(wǎng)絡(luò)連接從主機上下載文件,將他們直接放在內(nèi)存運行或者燒入flash類固態(tài)存儲設(shè)備中。以后的系統(tǒng)更新也會使用 Boot Loader 的這種工作模式。工作于這種模式下的 Boot Loader 通常都會向它的終端用戶提供一個簡單的命令行接口。
參考文章:
https://blog.csdn.net/qq_51118175/article/details/122052285
http://m.eeworld.com.cn/bbs_thread-454675-1-1.html