繼《最全教程來(lái)啦!在RISC-V星光板上創(chuàng)建Debian系統(tǒng)鏡像》之后,這一期來(lái)聊聊RISC-V星光板的啟動(dòng)流程。
如何更直觀理解VisionFive的啟動(dòng)流程呢?小編用一張圖摹擬整個(gè)過(guò)程。
通電開(kāi)機(jī)加載BootROM后,有兩種方法去啟動(dòng)Bootloader(在嵌入式系統(tǒng)中,通常沒(méi)有像BIOS那樣的固件程序,因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)完全由Bootloader來(lái)完成)。
第一種是通過(guò)UART,即通過(guò)簡(jiǎn)單輸入一條命令,加載一個(gè)固定大小的二進(jìn)制文件到芯片的內(nèi)存中并執(zhí)行它,這種模式主要用于固件更新;
第二種是通過(guò)QSPI(Quad SPI),即BootROM將32k大小的Bootloader從QSPI讀取到SRAM區(qū)并開(kāi)始執(zhí)行。不難看出,QSPI更為方便,官方也推薦這個(gè)方式。
通過(guò)QSPI模式,BootROM把32k的bootloader從QSPI讀取到主芯片內(nèi)部的SRAM區(qū)并啟動(dòng)。大家可以看到上圖淺藍(lán)色區(qū)域,這個(gè)區(qū)域的文件都是在開(kāi)發(fā)板出廠時(shí),刷寫(xiě)好到QSPI閃存芯片里的內(nèi)容,包括了secondboot,ddrinit,OpenSBI和U-Boot。
secondboot是一個(gè)只有9KB左右的bin文件,它去讀取閃存中ddrinit,跳轉(zhuǎn)過(guò)去后初始化內(nèi)存并引導(dǎo)閃存上的fw_payload.bin.out文件,而這個(gè)fw_payload.bin.out包含了 OpenSBI和Uboot的頭和文件信息,于是直接跳轉(zhuǎn)到OpenSBI了。
什么是OpenSBI呢?
OpenSBI的全稱(chēng)是Open SupervisorBinary Interface ,即“開(kāi)放的操作系統(tǒng)二進(jìn)制接口”,大家可以將OpenSBI 理解成固件。其特點(diǎn)有二,第一,以 M 模式和啟動(dòng)器來(lái)定義的平臺(tái)固件,可以作為一個(gè)管理程序或者是通用操作系統(tǒng)執(zhí)行,并且進(jìn)入S或者HS模式;第二,以HS模式和啟動(dòng)器的管理程序,或者一個(gè)通用的操作系統(tǒng),可以執(zhí)行并進(jìn)入VS模式。
M模式即Machine-Mode,可以理解為固件特權(quán)級(jí);S模式即Supervisor-Mode,可以理解為操作系統(tǒng)內(nèi)核特權(quán)級(jí)。在啟動(dòng)流程中,OpenSBI作用就是讓開(kāi)發(fā)板從M運(yùn)行模式引導(dǎo)操作系統(tǒng)內(nèi)核,讓操作系統(tǒng)內(nèi)核運(yùn)行進(jìn)入 S 模式。
其他模式就不過(guò)多解釋啦,感興趣的朋友可自行搜索。
最后,從OpenSBI到U-Boot 的過(guò)程可以拆分來(lái)看,OpenSBI為Linux提供基本的系統(tǒng)響應(yīng),系統(tǒng)從M模式轉(zhuǎn)換為S模式,跳轉(zhuǎn)并啟動(dòng)位于內(nèi)存對(duì)應(yīng)位置的U-Boot。而隨著U-Boot啟動(dòng),Linux系統(tǒng)也開(kāi)始啟動(dòng)了。
-
RISC
+關(guān)注
關(guān)注
6文章
462瀏覽量
83710
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論