Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

RISC-VでArm Trusted Firmwareに相当するものって、何?

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

RISC-Vの薄い本、「OpenSBIとLinuxを調べる」は、BOOTHにて、200円でダウンロード販売しています。

vengineer.booth.pm

はじめに

RISC-Vが盛り上がっているけど、ハードウェアであるCPUコアだけじゃ、コンピュータって動かないですよね。 Armでは、Linuxが動く前に、U-Bootが動いていて、U-Bootの前に、Arm Trusted Firmware (BL31 <= BL2)が動いていて、Arm Trusted Firmwareの前に BootROMが動いている感じ。 ちなみに、BootROMは、Linux が動くCortex-Aシリーズのコアではなく、Cortex-Mシリーズのようなマイコンが動くプログラムになっていることが多いです。

そこで、下記のようなツイートをしたら、情報を得ることができました。

RISC-VでArm Trusted Firmware に相当するもの

どこかで行われたプレゼンテーション資料も教えてもらいました。こちらには上記のドキュメントやソースコードにはない絵での説明があるのでわかりやすいと思います。

Linux

Linux v5.12 にも既に、SBIの実装はありました。

sbi.h sbi.c kernel/cpu_ops_sbi.c

const struct cpu_operations cpu_ops_sbi = {
    .name       = "sbi",
    .cpu_prepare    = sbi_cpu_prepare,
    .cpu_start  = sbi_cpu_start,
#ifdef CONFIG_HOTPLUG_CPU
    .cpu_disable    = sbi_cpu_disable,
    .cpu_stop   = sbi_cpu_stop,
    .cpu_is_stopped = sbi_cpu_is_stopped,
#endif
};

この部分のコミットは、Western Digitalの中の人ですね。

おわりに

RISC-VでもArm Trusted Firmwareっぽい、OpenSBIなるものを知りました。このOpenSBIは、RISC-V SBI specification の実装例のようなので、仕様を知りたいのなら、こちらを読み込む必要があるようです。現時点のバージョンは、v0.3 が始まった感じです。

P.S

RISC-V SBI specification に関しては、Western DigitalのAtish PatraさんとAnup Patelさんのおふたりが活動されているっぽいです。 RISC-V Supervisor Binary Interface Specificationには、Palmer Dabbeltさん(当時、SiFive => 現在、Google)のお名前もありますが、現在はあまり活動されていないですね。と思ったら、Linuxではまだまだ活躍中のようでした。