關(guān)于risc-v啟動部分思考
1.本文說明
1.1 risc-v的誕生的時代背景
1.2 發(fā)展現(xiàn)狀
2.risc-v 的芯片boot過程
2.1 risc-v的啟動模式
2.2 risc-v的啟動順序
3.什么是SBI?
4.什么是opensbi
5.openSBI call接口的實(shí)現(xiàn)
6.總結(jié)
1.本文說明
risc-v的架構(gòu)有著非常鮮明的特點(diǎn),如果看過arm,aarch64,mips等架構(gòu)的一些架構(gòu)手冊的基礎(chǔ)知識,再看risc-v的芯片的架構(gòu)設(shè)計(jì),就會覺得非常有意思,可以找到一些影子,但是又比這些架構(gòu)設(shè)計(jì)簡潔的多。當(dāng)我看完aarch64的芯片手冊,再看risc-v的boot時,設(shè)計(jì)思想竟然可以做一些對比,同樣去看risc-v和mips的寄存器,也可看到高度的一致性。
對于x86的架構(gòu)我未曾深入了解,但是在risc-v上應(yīng)該也可以找到一些設(shè)計(jì)元素。總體說來,risc-v的架構(gòu)設(shè)計(jì)集合了各種架構(gòu)的設(shè)計(jì)的優(yōu)點(diǎn)。我突然覺得這種堆疊即模塊的設(shè)計(jì)思想,在當(dāng)前iot物聯(lián)網(wǎng)發(fā)展的如火如荼的時代又要被賦予最新的使命了。我十分看好risc-v的設(shè)計(jì)思想,也期待著與軟件界的Linux一樣,發(fā)展的繁榮昌盛。
1.1 risc-v的誕生的時代背景
risc-v至誕生之日起,就賦予了良好的設(shè)計(jì)模式,吸收了大量的arm、x86、以及mips中良好的設(shè)計(jì)基因,將過時指令設(shè)計(jì)的與架構(gòu)設(shè)計(jì)中的坑都避免了。這幾十年的芯片的發(fā)展過程中,不少的芯片架構(gòu)都曾因?yàn)樵O(shè)計(jì)問題消失在歷史長河中,有著曾經(jīng)一度輝煌的sparc,還有當(dāng)時被十分看好的mips。如今市場上最熱門的就屬x86和arm了,一個主打移動市場,一個主打pc市場,兩個在芯片架構(gòu)的市場上發(fā)展的如火如荼。
然而,兩個巨頭都牢牢的把控著核心技術(shù)的門檻,用arm必須去買ip授權(quán),以及x86的交叉授權(quán)模式等等。這些都讓很多崇尚開源的人看不下去了。那么設(shè)計(jì)芯片的指令集很難么?設(shè)計(jì)芯片的指令并非難事,這要很多人使用才行,因?yàn)樾酒闲枰钶d操作系統(tǒng),需要去運(yùn)行各種各樣的軟件,比如瀏覽器、數(shù)據(jù)庫、辦公系統(tǒng)、專業(yè)軟件等等。這些適配工作投入的精力和難度恐怕是需要集結(jié)各國最強(qiáng)的研發(fā)實(shí)力才能發(fā)展完善的。而risc-v就有這個魔力,竟然可以一呼百應(yīng),大概是大家受到arm與因特爾的壓迫已經(jīng)很久了,大家都想自己造芯片玩玩。
arm與x86架構(gòu)由于時間累計(jì)的問題,都積累了大量的指令集,x86當(dāng)時誕生時不過80條指令,而今也有著上千條指令集了,各種復(fù)雜的指令集,多媒體指令集等等,使得寫底層軟件的人苦不堪言。喬布斯有句名言:至繁歸于至簡。歷史遺留的問題既然不能克服和解決,那就干脆抽取精華,設(shè)計(jì)出一個優(yōu)秀的架構(gòu)出來,于是risc-v在這種時代背景下開始了其新的使命。
1.2 發(fā)展現(xiàn)狀
新事物的崛起,必會引來眾多人的圍觀,技術(shù)的風(fēng)所到之處,均是機(jī)會的影子。
而今risc-v已經(jīng)成為眾多大學(xué)生積極學(xué)習(xí)的課程,各大公司也已經(jīng)啟動了預(yù)研和探索的腳步。
RISC-V雖仍是星星之火,卻已現(xiàn)出燎原之態(tài)。
2.risc-v 的芯片boot過程
2.1 risc-v的啟動模式
在理解risc-v的boot流程之前,首先需要知道的是risc-v設(shè)計(jì)的三種模式:
M-mode(Machine Mode)
S-mode(Supervisor Mode)
U-mode(User Mode)
對于arm64來說,系統(tǒng)上電后啟動會處于EL3 secure world ,所以對于arm64來說,一般都會使用ARM Trusted firmware (TF-A) 在normal world EL2 與 secure EL3 進(jìn)行切換。
而對于risc-v來說,系統(tǒng)上電啟動后會在M-Mode,而risc-v目前是沒有Hypervisor這一層的概念的,所以目前采用的是opensbi。
2.2 risc-v的啟動順序
對于標(biāo)準(zhǔn)的risc-v啟動順序,可查看FU540的芯片手冊,其中有如下的順序描述:
MSEL(Mode Select):啟動模式,一般為選擇撥碼開關(guān)等方式進(jìn)行選擇。
ZSBL (Zeroth Stage Boot Loader):片上ROM程序。
FSBL(First Stage Boot Loader ):啟動PLLs和初始化DDR內(nèi)存。
BBL(Berkeley Boot Loader ):提供加載,并且管理著二進(jìn)制接口(SBI)。
下面詳細(xì)分析一下FU540的啟動流程。
復(fù)位向量表
當(dāng)芯片上電后,當(dāng)芯片有33.3MHz外部晶振時鐘時,所有的核會跳轉(zhuǎn)到地址0x1004地址處去執(zhí)行程序。
程序會根據(jù)MSEL選擇,選擇如下的跳轉(zhuǎn)地址:
Zeroth Stage Boot Loader (ZSBL)
零級引導(dǎo)程序加載會從GUID分區(qū)中下載更加復(fù)雜的FSBI,一般都是QSPI的flash或者sd卡中下載FSBI,然后將該程序放到地址0x08000000處,至于從哪個介質(zhì)查找FSBI,可以看到如下的選項(xiàng):
The First Stage Boot Loader (FSBL)
該執(zhí)行的地址位于L2 LIM,也就是地址0x08000000。該程序的目的是DDR初始化后,將系統(tǒng)在DDR中執(zhí)行起來。
切換頻率到1GHz。
配置ddr pll,外設(shè)時鐘和控制器等等。
拷貝設(shè)備樹和SBI固件到DDR中。
跳轉(zhuǎn)到0x80000000開始執(zhí)行程序。
Berkeley Boot Loader (BBL)
Berkeley引導(dǎo)加載程序(BBL)從位于0x8000_0000的DDR執(zhí)行。它負(fù)責(zé)提供管理器二進(jìn)制接口(SBI)以及模擬所需的任何RISC-V不是由芯片本身實(shí)現(xiàn)的指令。該接口可以為Linux等其他的os提供調(diào)用接口。
3.什么是SBI?
SBI的全稱是RISC-V Supervisor Binary Interface 。它提供了risc-v標(biāo)準(zhǔn)的S-mode OS與SupervisorExecution Environment (SEE) 接口。
一般來說,操作系統(tǒng)都不會直接管理硬件資源,會通過SBI去調(diào)用到M-mode。
4.什么是opensbi
簡單的說,opensbi就是一個開源的RISC-V虛擬化二進(jìn)制接口的通用的規(guī)范。
使用的是BSD-2的開源協(xié)議,也就是任何人都可以隨意修改和使用,也提供了通用的規(guī)范化的接口實(shí)現(xiàn)。
這里就需要理解一下為什么需要規(guī)范化了。
以往芯片廠家都會按照自己的啟動規(guī)則定義一些啟動的流程,比如有些需要SPL+UBOOT,有些可以是直接從SPI或SD卡中boot,這些啟動的規(guī)則很多,每當(dāng)使用一款芯片,都需要去理解其啟動的流程,十分的復(fù)雜。于是就出現(xiàn)了一些規(guī)則和定義。
又比如Linux定義了設(shè)備規(guī)則等等:
而risc-v雖然目前芯片種類少,但是也需要制定一些啟動規(guī)則,于是有了下面的規(guī)則:
當(dāng)有了opensbi后,再回頭看啟動流程,與aarch64之間進(jìn)行一個對比:
aarch64借助atf框架,從EL3跳轉(zhuǎn)到EL1,并啟動u-boot。
對于riscv,上圖是一個標(biāo)準(zhǔn)的加載啟動流程,其中Opensbi提供了M模式的運(yùn)行時庫。
5.openSBI call接口的實(shí)現(xiàn)
opensbi不僅僅具有加載和引導(dǎo)功能,也能夠供S-Mode的OS使用,比如提供串口控制臺或者中斷的分發(fā)等等。調(diào)用方式可以通過ecall來實(shí)現(xiàn)。類似于syscall的實(shí)現(xiàn)規(guī)則。當(dāng)前階段實(shí)現(xiàn)了下面的接口:
詳細(xì)可以看下面的官方文檔描述。
https://github.com/riscv/riscv-sbi-doc/blob/master/riscv-sbi.adoc
6.總結(jié)
riscv的啟動規(guī)范可以按照opensbi的接口實(shí)現(xiàn)來自行定義,芯片廠家也可以通過適配opensbi的接口來實(shí)現(xiàn)平臺通用化的移植,這樣將會大大簡化上層設(shè)計(jì)的復(fù)雜度。同時規(guī)范化的啟動流程對于使用者來說更加的友好。相信在這種規(guī)范化的模式下,riscv的設(shè)計(jì)將會越來越完善。
責(zé)任編輯:xj
原文標(biāo)題:關(guān)于risc-v啟動部分思考
文章出處:【微信公眾號:嵌入式IoT】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
嵌入式
+關(guān)注
關(guān)注
5082文章
19109瀏覽量
304837 -
RISC-V
+關(guān)注
關(guān)注
45文章
2271瀏覽量
46133
原文標(biāo)題:關(guān)于risc-v啟動部分思考
文章出處:【微信號:Embeded_IoT,微信公眾號:嵌入式IoT】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論