特權層二進制接口

特權層二進制接口RISC-V架構下引導程序環境的規範[1]。它提供了特權層的運行環境,使得特權層軟件能使用環境調用指令,來執行平台相關的操作。典型的的特權層接口應用有:一、類似於Unix的作業系統中,機器級和特權級的訪問接口;二、監視特權級和虛擬特權級中,作為虛擬化環境的調用接口。

特權層二進制接口
開發者RISC-V Unix工作組
首次發佈2018年5月26日
當前版本1.0.0(2022年3月23日)
預覽版本1.0-rc3(2022年3月16日)
平台RISC-V
許可協議CC-BY-4.0
網站GitHub

特權層二進制接口的全文收錄於此連結頁面存檔備份,存於互聯網檔案館)。

功能模塊

特權層接口規範[2]定義了以下的模塊。

  • 基礎模塊:包含探測支持的SBI功能、得到SBI版本和得到機器版本等部分;
  • 時鐘中斷模塊:設置下一個時鐘中斷的發生時間;
  • 跨核軟中斷模塊:發送跨處理核的軟件中斷;
  • 遠程柵欄模塊:跨處理核發送柵欄指令,包括指令柵欄、內存映射柵欄和虛擬機柵欄指令等;
  • 核狀態模塊:啟動、停止和暫停一個處理核,以及讀取處理核的當前狀態;
  • 復位模塊:重啟或關閉系統。

其中,基礎模塊是必須要求實現的模塊,其它模塊都是可選實現的模塊。

舊擴展模塊

當特權層接口規範支持陳舊擴展時,包含以下的模塊。

  • 舊擴展模塊:包含控制台輸入輸出等。

舊擴展模塊的大多數功能,都在新的功能模塊中有替代選項。如果可能,儘量使用分別列出的新版功能模塊。

預留模塊部分

這些模塊包括實驗性模塊、製造商定義模塊和固件定義模塊。

特權層接口規範為製造商預留了定義功能模塊的空間,通常上,這些空間可以與mvendorid寄存器的內容對應。 每個特權層接口實現編號,都可以擁有自己的固件定義模塊,這部分實現根據不同的具體固件而不同。

使用預留模塊時需要注意:並非所有的SBI實現、製造商都提供此類模塊和它的函數。作業系統軟件需要結合特定的特權層接口實現,編寫預留模塊的支持部分。

軟件實現

目前流行的特權層接口實現軟件實現有以下幾種。

  • 伯克利引導程序(BBL)
  • OpenSBI[3]
  • Xvisor
  • KVM
  • RustSBI[4]
  • Diosix[5]
  • Coffer[6]

參考文獻

  1. ^ RISC-V Community. RISC-V SBI 的GitHub仓库. [2021-06-04]. (原始內容存檔於2021-03-09). 
  2. ^ RISC-V Community. RISC-V SBI 规范正文. [2021-06-04]. (原始內容存檔於2021-03-06). 
  3. ^ OpenSBI GitHub. [2021-06-04]. (原始內容存檔於2021-07-20). 
  4. ^ RustSBI GitHub. 
  5. ^ Diosix GitHub. [2021-06-04]. (原始內容存檔於2020-11-11). 
  6. ^ Coffer GitHub. [2022-04-01]. (原始內容存檔於2022-04-01).