FW_DYNAMIC固件
FW_DYNAMIC固件在運行時從上一個啟動階段獲取有關(guān)下一個啟動階段的信息,例如引導加載程序或操作系統(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,假設(shè)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一起編譯。
-
寄存器
+關(guān)注
關(guān)注
31文章
5609瀏覽量
130017 -
內(nèi)核
+關(guān)注
關(guān)注
4文章
1468瀏覽量
42890 -
Linux
+關(guān)注
關(guān)注
88文章
11764瀏覽量
219094 -
固件
+關(guān)注
關(guān)注
11文章
569瀏覽量
25009 -
RISC
+關(guān)注
關(guān)注
6文章
485瀏覽量
86637
發(fā)布評論請先 登錄
【「RISC-V體系結(jié)構(gòu)編程與實踐」閱讀體驗】-- SBI及NEMU環(huán)境
Lua固件是否支持上傳arduino代碼?
什么是固件,固件的概念
編程器固件和路由器固件什么不同
opensbi下的riscv64裸機系列編程1(串口輸出)
CycurHSM安全固件支持車聯(lián)網(wǎng)聯(lián)盟數(shù)字密鑰規(guī)范
Core 3308Y固件ROC RK3308B CC PLUS支持Docker固件
如何對物聯(lián)設(shè)備進行遠程固件升級?
固件升級 | NDI系列產(chǎn)品支持NDI 5.0
開源網(wǎng)絡引導固件iPXE正式支持龍架構(gòu)
Klipper固件的打印機可以插卡打印嗎?
基于OpenSBI的linux nommu實現(xiàn)
OpenSBI支持哪些固件
評論