如何確定HART掩碼對應關係 每個位的位置對應一個HART ID。例如: 第0位(最低位)對應HART 0 第1位對應HART 1 第2位對應HART 2 如果你想指定HART 1,HART掩碼將是0x2(二進制表示為0b10),因為第1位是1,其他位是0。 // 發送處理器間中斷(IPI)的函數 fn send_ipi(hart_mask: usize) - SbiR
用rust 實現規範的定義 // 定義 SbiRet 結構體,用於存儲 SBI 調用的返回值 struct SbiRet { error: i64, value: i64, } /// 實現一個封裝SBI調用的函數 #[inline(always)] fn sbi_call(extension: usize, function: usize, arg0: usize, arg1
各個狀態流轉的解釋 STARTED :HART 處於正常執行狀態。 轉移到STOP_PENDING狀態:當調用 sbi_hart_stop 之後,當前HART會請求停止。 STOP_PENDING: HART 正在停止過程中。 轉移到 STOPPED狀態: 當HART停止過程完成時。 轉移到 STARTED狀態: 如果停止過程被取消。 STOPPED : HART
sbi-rt :按照sbi規範制定的接口,寫的挺好的。這裏直接調用了彙編代碼 sbi-spect: sbi-rt 裏面用到一些常量 sbi-testing:測試 src: 不知道啥用。貌似某個學校寫的玩具,還有第幾章的字樣, 不能嚴謹一點嗎? 到這裏,還沒有看到具體的實現呢? rust-qemu 能給qemu虛擬機直接用的。 整體寫的過於麻煩了,寫的底層的也不是很容易,還要
規範: Function Name SBI Version FID EID sbi_remote_fence_i 0.2 0 0x52464E43 清除所有目標HART的指令緩存 sbi_remote_sfence_vma 0.2 1 0x52464E43 使所有目標HA