FW_DYNAMIC固件
FW_DYNAMIC固件在運行時從上一個啟動階段獲取有關下一個啟動階段的信息,例如引導加載程序或操作系統內核。
- 上一個啟動階段(即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,它運行完后需要到哪個地址執行。
例如,OpenSBI執行完后,需要加載kernel,而Kernel的加載地址為0x80200000
,那么我們指定0x80200000
為需要跳轉的地址,OpenSBI執行完畢后,就會跳轉到0x80200000
處去加載kernel。
具體例子:
OpenSBI執行完后,去執行uboot或者kernel,假設uboot或者kernel在內存中的地址為0x80200000
,則編譯OpenSBI:
make PLATFORM=generic FW_JUMP_ADDR=0X80200000
在編譯OpenSBI時,加入參數FW_JUMP_ADDR
,即可指定需要跳轉的地址。
注意, 由于OpenSBI運行在M模式下,本質上也是一個bootloader ,啟動時,OpenSBI就會進行一些硬件的初始化操作,加上fw_jump固件可以指定跳轉地址,因此 對于RISC-V Linux而言,OpenSBI執行完后,可以不執行uboot,直接啟動kernel ,將uboot去掉,不影響RISC-V Linux正常啟動。
在某些內存優化的場景下,可以考慮將uboot去掉,利用fw_jump固件直接啟動kernel,從而節省內存。
FW_PAYLOAD固件
FW_PAYLOAD固件直接包含下一引導階段的二進制代碼,下一引導階段通常是bootloader或os鏡像。
不同于FW_JUMP固件的指定地址跳轉,FW_PAYLOAD固件是將bootloader或os鏡像直接打包進來。
具體例子:
將uboot打包進來,則編譯OpenSBI:
make PLATFORM=generic FW_PAYLOAD_PATH=uboot.bin
將Linux kernel打包進來,則編譯OpenSBI:
make PLATFORM=generic FW_PAYLOAD_PATH=Image
在編譯OpenSBI時,加入參數FW_PAYLOAD_PATH
,即可以將下一引導階段的二進制代碼打包進來。相當于將OpenSBI、uboot、kernel合并為一個文件。
實際中,我們用的更多的是FW_PAYLOAD固件,將uboot和OpenSBI一起編譯。
-
寄存器
+關注
關注
31文章
5363瀏覽量
121178 -
內核
+關注
關注
3文章
1382瀏覽量
40427 -
Linux
+關注
關注
87文章
11345瀏覽量
210402 -
固件
+關注
關注
10文章
561瀏覽量
23164 -
RISC
+關注
關注
6文章
465瀏覽量
83874
發布評論請先 登錄
相關推薦
意法半導體為STM32Cube生態系統新增LoRaWAN?固件無線更新支持
【「RISC-V體系結構編程與實踐」閱讀體驗】-- SBI及NEMU環境
Lua固件是否支持上傳arduino代碼?
什么是固件,固件的概念
編程器固件和路由器固件什么不同
opensbi下的riscv64裸機系列編程1(串口輸出)
CycurHSM安全固件支持車聯網聯盟數字密鑰規范
Core 3308Y固件ROC RK3308B CC PLUS支持Docker固件
![Core 3308Y<b class='flag-5'>固件</b>ROC RK3308B CC PLUS<b class='flag-5'>支持</b>Docker<b class='flag-5'>固件</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何對物聯設備進行遠程固件升級?
固件升級 | NDI系列產品支持NDI 5.0
![<b class='flag-5'>固件</b>升級 | NDI系列產品<b class='flag-5'>支持</b>NDI 5.0](https://file.elecfans.com/web2/M00/1A/45/pYYBAGF6TKSAIJMAAAAJ9XZNkno543.jpg)
評論