2.9K Views
July 29, 23
スライド概要
osdev-jpの自作OSもくもく会(20230729) 発表資料
今話題のRISC-V SBCを買ったのに, Linuxをインストールしただけで何にもしてなかったので,ベアメタルプログラムを作成に向けて,まずはRISC-Vのブートフローを調べて見ました.
第34回 自作OSもくもく会 RISC-V SBC VisionFive 2 のBootフロー 2023/07/29 カナやん
第34回 自作OSもくもく会 自己紹介 • @rkarsnk (カナやん) • 元電機メーカー勤務 • OS以上M/W以下のレイヤに関わってました • 滋賀県草津市にある出身大学でアルバイト • システムソフトウェアの研究室(M先生) • 学生さんの作ったゼミ資料の添削 本日は RISC-V CPUを搭載したSBC(Single Board Computer) VisionFive 2* のBootフローについてを調べた内容を発表します (*)StarFive VisionFive 2: https://www.starfivetech.com/en/site/boards
第34回 自作OSもくもく会 なぜBootフローを調べるのか • 今話題のRISC-V SBCを買ったのに, Linuxをインストールしただけで何にもして ない • 何か遊ぶことができないか? • サーバにする→Intelでええやん… • LinuxでLチカ →ARM SBCでええやん… • まずはベアメタルでHelloWorldを動かしてみよう! • RISC-V SBCで自作のプログラムってどうやってロードするんだろ? 起動からLinuxがブートするまでを調べてみよう
第34回 自作OSもくもく会 VisionFive2 について • StarFive 社が販売しているRISC-V SBC • おもな仕様は以下のとおり 項⽬ Processor/SOC RAM Storage NIC 諸元 JH7110 64bit SOC Quad-Core 1.5GHz RV64GC (CPUコアはHifive U74) LPDDR4 2GB/4GB/8GB QSPI Nor Flash (ブートローダ) TFカード eMMCソケット M.2 NVMe 1000BASE-T x2 https://doc-en.rvspace.org/VisionFive2/Quick_Start_Guide/VisionFive_2/specification_pb.html
第34回 自作OSもくもく会 RISC-Vについて • 今もっとも熱い命令セットアーキテクチャ • 命令セットの開発がオープン • RISC-Vの特権モードは上から • • • • User Mode (U) Supervisor Mode (S) Hypervisor Mode (H) Machine Mode (M) User Mode(U) Supervisor Mode(S) Hypervisor Mode(H) JH7110では⾮サポート Machine Mode (M)
第34回 自作OSもくもく会 Bootフローの概要 • “multiple boot stages model“ の基本的な流れは以下 ROM LOADER RUNTIME BOOTLOADER OS Load Jump RISC-V SUMMIT 2019 : An Introduction to RISC-V Boot Flow (WesternDesign)
第34回 自作OSもくもく会 RISC-Vの場合 ZSBL BootROM (ROM) FSBL U-Boot SPL (LOADER) OpenSBI (RUNTIME) U-Boot (BOOTLOADER) OS SSBL M-mode S-mode ZSBL: Zero Stage Boot Loader FSBL: First Stage Boot Loader SSBL: Second Stage Boot Loader SPL: Secondary Program Loader RISC-V SUMMIT 2019 : An Introduction to RISC-V Boot Flow (WesternDesign)
第34回 自作OSもくもく会 BootROM • 役割 • U Boot SPLをロードし実行する. • 詳細 • わからない! BootROMのソースコードは公開されていない • ただし,一世代前のCPU Hifive U54のソースコードは公開されているので,概要を調べることは可能 • 補足 • VisionFive2 に搭載されているCPUのJH7110の場合, アドレスオフセット 0x2A00 0000 に書き込まれている (※JH7110のCPU Hifive U74がそういう仕様らしい) • VisionFive2 ではBootROMの処理内でDIPスイッチを確認して, ブートソースをQSPI Nor FlashにするかUART0にするか選択している. (※UART0を選択すると何ができるのかは確認してません)
第34回 自作OSもくもく会 U-Boot SPL • 役割 • DDRメモリの初期化 • OpenSBI+U-Bootのロード • UARTの初期化 • 詳細 • U-Boot SPLはQSPI Flashの 0x0010 0000 から fw_payload.imgを読み出し,DDRメ モリのアドレス 0x00 4000 0000 に ロードし, OpenSBIを実行 QSPI Flashのデータ配置 Offset Length Description 0x0000 0000 0x80000 U-Boot SPL 0x000f 0000 0x10000 U-Boot verbs 0x0010 0000 0x400000 fw_payload.img (OpenSBI + U-Boot) 0x0060 0000 0x1000000 Reserved
第34回 自作OSもくもく会 OpenSBI と U-Boot • U-Bootの役割 • OpenSBIの役割 • M-modeからS-modeへの移行 • 0x00 4020 0000へJumpし,U-Boot を実行 • LinuxなどのOSに対してM-Modeへのイ ンタフェースを提供 • カーネルイメージのロード VisionFive 2ではQSPI Flashに書かれている BootROM U-Boot SPL OpenSBI U-Boot OS
第34回 自作OSもくもく会 OpenSBIとは • RISC-V Supervisor Binary Interface 仕様の実装のひとつ. • SBIの仕様書によれば • プラットフォーム固有の機能を抽象化する ことで,Supervisor Modeソフトウェアをす べてのRISC-V実装間で移植できるようにし ます. • Supervisor Mode ソフトウェアに特定の機 能を提供するSBI関数のセットを定義する. タイマ,プロセッサ間割込み,PMUなどを抽象化 してる (詳しい調査は未実施) Application (U-mode) System Call OS (S-Mode) SBI OpenSBI (M-mode)
第34回 自作OSもくもく会 ブートログ(SPL → OpenSBI) U-Boot SPL OpenSBI
第34回 自作OSもくもく会 ブートログ(OpenSBI) • Next AddressはU-Bootを指してい ることがわかる • Next ModeがS-Bootなので, OpenSBIはM-modeだということが わかる
第34回 自作OSもくもく会 ブートログ(OpenSBI → U-Boot) OpenSBI U-Boot
第34回 自作OSもくもく会 ブートログ(U-Boot → Linux) U-BootのBoot menu ここからLinuxのブートが始まる
第34回 自作OSもくもく会 ブートログ(bootdiskがない場合) U-Bootのプロンプト
第34回 自作OSもくもく会 まとめ • 目的 • RISC-V SBCでHelloWorldをベアメタルで動かしたい • 調査したこと • OSがブートするまでの流れを確認 • 分かったこと • BootROM→U-Boot SPL→OpenSBI→U-Boot→OS の順でブートする • U-Boot SPLやOpenSBIを自作プログラムに置き換えるのは手間がかかりそう… 結論 U-Boot がロードできるプログラムを書く方法を 調べれば,HelloWorldが実現できそう