FW_DYNAMIC固件
FW_DYNAMIC固件在運行時從上一個啟動階段獲取有關下一個啟動階段的信息,例如引導加載程序或操作系統(tǒng)內(nèi)核。
- 上一個啟動階段(即LOADER)通過
a2
寄存器將struct fw_dynamic_info
的位置傳遞給FW_DYNAMIC - 之前的啟動階段(即LOADER)需要知道
struct fw_dynamic_info
struct fw_dynamic_info {
/** Info magic */
unsigned long magic;
/** Info version */
unsigned long version;
/** Next booting stage address */
unsigned long next_addr;
/** Next booting stage mode */
unsigned long next_mode;
/** Options for OpenSBI library */
unsigned long options;
unsigned long boot_hart;
} __packed;
FW_JUMP固件
FW_JUMP固件假定下一個引導階段的地址固定,但是不直接包含下一階段的二進制代碼,只是告訴OpenSBI,它運行完后需要到哪個地址執(zhí)行。
例如,OpenSBI執(zhí)行完后,需要加載kernel,而Kernel的加載地址為0x80200000
,那么我們指定0x80200000
為需要跳轉(zhuǎn)的地址,OpenSBI執(zhí)行完畢后,就會跳轉(zhuǎn)到0x80200000
處去加載kernel。
具體例子:
OpenSBI執(zhí)行完后,去執(zhí)行uboot或者kernel,假設uboot或者kernel在內(nèi)存中的地址為0x80200000
,則編譯OpenSBI:
make PLATFORM=generic FW_JUMP_ADDR=0X80200000
在編譯OpenSBI時,加入?yún)?shù)FW_JUMP_ADDR
,即可指定需要跳轉(zhuǎn)的地址。
注意, 由于OpenSBI運行在M模式下,本質(zhì)上也是一個bootloader ,啟動時,OpenSBI就會進行一些硬件的初始化操作,加上fw_jump固件可以指定跳轉(zhuǎn)地址,因此 對于RISC-V Linux而言,OpenSBI執(zhí)行完后,可以不執(zhí)行uboot,直接啟動kernel ,將uboot去掉,不影響RISC-V Linux正常啟動。
在某些內(nèi)存優(yōu)化的場景下,可以考慮將uboot去掉,利用fw_jump固件直接啟動kernel,從而節(jié)省內(nèi)存。
FW_PAYLOAD固件
FW_PAYLOAD固件直接包含下一引導階段的二進制代碼,下一引導階段通常是bootloader或os鏡像。
不同于FW_JUMP固件的指定地址跳轉(zhuǎn),F(xiàn)W_PAYLOAD固件是將bootloader或os鏡像直接打包進來。
具體例子:
將uboot打包進來,則編譯OpenSBI:
make PLATFORM=generic FW_PAYLOAD_PATH=uboot.bin
將Linux kernel打包進來,則編譯OpenSBI:
make PLATFORM=generic FW_PAYLOAD_PATH=Image
在編譯OpenSBI時,加入?yún)?shù)FW_PAYLOAD_PATH
,即可以將下一引導階段的二進制代碼打包進來。相當于將OpenSBI、uboot、kernel合并為一個文件。
實際中,我們用的更多的是FW_PAYLOAD固件,將uboot和OpenSBI一起編譯。
-
寄存器
+關注
關注
31文章
5434瀏覽量
124511 -
內(nèi)核
+關注
關注
3文章
1416瀏覽量
41441 -
Linux
+關注
關注
87文章
11511瀏覽量
213823 -
固件
+關注
關注
10文章
566瀏覽量
23917 -
RISC
+關注
關注
6文章
482瀏覽量
84996
發(fā)布評論請先 登錄
意法半導體為STM32Cube生態(tài)系統(tǒng)新增LoRaWAN?固件無線更新支持
【「RISC-V體系結(jié)構(gòu)編程與實踐」閱讀體驗】-- SBI及NEMU環(huán)境
Lua固件是否支持上傳arduino代碼?
什么是固件,固件的概念
編程器固件和路由器固件什么不同
opensbi下的riscv64裸機系列編程1(串口輸出)
Core 3308Y固件ROC RK3308B CC PLUS支持Docker固件

如何對物聯(lián)設備進行遠程固件升級?
固件升級 | NDI系列產(chǎn)品支持NDI 5.0

開源網(wǎng)絡引導固件iPXE正式支持龍架構(gòu)

Klipper固件的打印機可以插卡打印嗎?
基于OpenSBI的linux nommu實現(xiàn)

評論