iT邦幫忙

2024 iThome 鐵人賽

DAY 5
2

今日的行程:
辦公室:10:00 - 19:45
讀書室:20:30 - 22:00

正片開始

今日的記錄:

RISC-V 體系結構編程與實踐: Ch 1 基礎知識

  • mstatus.MPRV (Modified PRiVilege) 用來修改實際的權限層級 (effective privilege),我的理解是 load/store 指令作用的位址會根據這個 bit 來決定要不要做 VA PA 轉換。
    • MPRV == 0, load/store 指令作用的位址,使用的是當前權限層級的記憶體轉址和保護機制
    • MPRV == 1, load/store 指令作用的位址,使用是經過轉址以及保護的
    • 實際使用的例子:
      • 模擬 misaligned load/store: 可以在 OpenSBI 專案中看到,想要讓不支援 misaligned load/store 的硬體,可以由軟體來模擬
        • 如果不支援 misaligned load/store 的話,在 misaligned load/store 發生時,會產生 exception,進到 M-mode 的 trap handler,在判斷是 misaligned load/store 之後,可以透過設定 MPRV,來模擬 S-mode 下的記憶體存取行為。
        • lib/sbi/sbi_trap_ldst.c: 模擬函數的實體
        • lib/sbi/sbi_unpriv.c: inline asm 實作模擬函數的底層行為,有夠難看懂XDD,因為要去讀的記憶體會經過 translation 和 protection,還有可能會發生 exception,所以這邊做的事情是,自行實作一個小的 exception handler 來處理,如果沒發生 exception 就把讀到的值回傳回去,如果發生 exception (page fault, pmp access fault),就回傳 0,並且由 tinfo 來判斷是否有發生過 exception,來決定這個值可不可以用
      • 除錯功能: 經P同事指導XD,還可以在 OpenOCD 專案中看到,因為 debug 行為會在 D-mode 這個層級,是不會有記憶體轉址(translation)的行為,所以只能存取 PA;有了這個 MPRV,就也可以使用 VA 來做觀察了

總結

  • 稍微有印象的是在 OpenSBI 裡面的實作,今天第一次知道原來有 debug 用途,驚喜驚喜~

上一篇
[鐵人賽] Day 4 蝸步-2
下一篇
[鐵人賽] Day 6 New Extensions: Svvptc
系列文
上班辦公室,下班讀書室:RISC-V / ARM64 體系結構編程與實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言