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