FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Linux on RISC-V 2022を読む (3)

SNSで見つけた、Linux on RISC-Vが現状のRISC-Vを非常に端的に説明していて勉強になると思ったので、読んでみることにした。 以下は読書メモ。といってもほぼ一対一に翻訳してしまっている。

前回の続き。最後はQEMUとか評価ボードとか。

kernel-recipes.org

mobile.twitter.com


QEMUによるRISC-Vのエミュレーション

  • RISC-VマシンはQEMUでサポートされている
  • 32ビットおよび64ビットのLinuxカーネルをブート可能
  • 複数のRISC-V開発ボードのマシンコンフィグレーションで、同一のバイナリをブート可能
  • ハイパーバイザとVector拡張をサポート済み

Linuxカーネル内でのRISC-Vサポート

  • Palmer Dabbeltによる最初の実装が2018年にLinux 4.15にマージされた
  • 「まだ小さなコミュニティだが、楽しく、フレンドリーだ」 - Bjorn Topel
  • Palmerはriscv_treeのメンテナンスを継続している
  • linux-riscvメーリングリストで開発が行われている
  • lore.kernel.orgでアーカイブを参照可能
  • IRC: libera.chat 上の#riscv

Linuxに最近追加された機能

  • KVM RISC-Vサポート (Anup Patel) Linux 5.16
    • ハイパーバイザ拡張のためのKVMサポート
  • SBI SRST拡張のサポート (Anup Patel) Linux 5.17
    • SBI SRST (System Reset)拡張をサポートし、システムリセットのためのLinux内の明確なドライバが不要になった。

Linux 5.18でサポートされた新たな機能

  • Sv57ページテーブルサポート (Qinglin Pan)
  • RISC-V Perfサポートの向上 (Atish Patra)
    • Perf on RISC-V: The Past, the Present and the Future
  • RISC-V CPU Idleサポート (Anup Patel)
    • cpuidleとssupendがSBI HSM拡張にてサポートされた
  • RISC-V ISA拡張のフレームワークサポート (Atish Patra)
    • 拡張名が単一文字ではなくなる場合、LinuxRISC-V ISAの文字列を正しくパースすることができなくなる。
    • 複数文字のISA拡張をサポートするための一般的なフレームワークを実装

Linux 5.19に向けて

  • Linux 5.19マージに向けてRISC-Vのパッチのマージウィンドウ
    • ページベースのメモリ属性 (以降で少し説明する)
    • rv32バイナリをrv64システムで動作させる (compat subsystem)
    • kexec_file()のサポート
    • チケットベースのスピンロックをサポートし、qrwlockをサポートする
    • アトミックとXIPのためのクリーンアップと修正

作業中

  • Add vector ISA support (Greentime Hu)
    • Vector 1.0拡張に基づく
    • __riscv_v_stateをサポートし、ベクトルに関連するレジスタをセーブ・リストアできるようにする。
  • RISC-V IPIの拡張 (Anup Patel)
    • RISC-V S-modeソフトウェアはM-modeのランタイムを呼び出してOpenSBIのIPIを呼び出す
    • AIA (advanced interrupt architecture) により、S-modeでもIPIを投げれるようになる。
  • Sstc拡張のサポート (Atish Patra)
    • SBIの呼び出しにはS-modeのタイマ割り込みが必要であり、M-modeのタイマ比較レジスタは不要だった。
    • この結果、カーネルがタイマ割り込みをかけるのに非常に大きなレイテンシが必要であった。
    • 仮想化された環境では、KVMがSBI呼び出しを制御することにより状況は悪化する
    • Sstc拡張では、カーネルがスーパバイザ実行環境(M-mode/HS-mode)を使うことなくプログラムにタイマおよび割り込みの受信ができるようになる。

Linuxディストリビューション: Fedra

  • RISC-Vにおける完全なFedraの体験を提供する
  • Wei Fuによるトーク
  • QEMUおよびRISC-V開発ボードにおけるインストール手順書が提供されている

Linuxディストリビューション: Debian

  • riscv64がDebianにポートされている
  • 95%のパッケージがRISC-Vでビルド済み

Linuxディストリビューション: Ubuntu

  • riscv64がUbuntu 20.04 LTSでサポートされている
  • Ubuntu 22.04がプリインストールされたSD-CardがSiFiveの開発ボードおよびQEMU向けに配布されている
  • Ubuntu 22.04より、サーバインストールイメージがSiFive UnmatchedボードのNVMe向けに配布されている。

その他のLinuxディストリビューション

  • OpenSuSE
    • RISC-VサポートはTumbleweedイメージにていくつかのボードサポートとして開発中
  • Arch Linux
    • RISC-V向けにコアパッケージの95%はビルド済み
  • Gentoo
    • riscv64ステージはGentooダウンロードページにおいてダウンロード可能

OpenEmbeddedとYocto

  • meta-riscv: 一般的なハードウェア向けのBSPによりRISC-Vデバイスをオーバレイする

Buildroot

  • RISC-Vの移植により、BuldRootプロジェクトでRISC-Vがサポートされている
  • “Embedded Linux from Scratch in 45 minutes (on RISC-V)”
    • Michael Opdenacker at FOSDEM 2021
    • ビルドブートを使用してOpenSBI, U-Boot, Linux, Busyboxをビルドする
    • QEMU上でブートする

SiFive Freedom Unleashed

  • 2018年に立ち上がった、最初のLinux起動可能なRISC-V開発ボード
  • Fedra GNOMEデスクトップがRISC-V上で立ち上がった

Microchip PolarFire SoC

  • RISC-VコアはSiFive FU540 SoCを使用している

Kendryte K210

  • RV64GCをサポートした400MHzのコア
  • 8MBのSRAMを持っているが、DRAMはない
  • 14ドルから入手可能
  • Linuxとu-bootがサポートされている
  • Buildrootがサポートされている

Sifive Unmatched

  • SiFive Freedom FU740 SoC
    • 4x U74 RV64GCアプリケーションコア

T-Head Xuantie C910

  • T-Head
  • 高性能RV64GC、最大16コア

AndroidRISC-Vに移植する

T-HeadのRVB-ICE開発ボード

  • ICE SoC 2コアのC910、1.2GHz
  • 4GB LPDDR4, 16GB eMMC

RISC-V Android SIG (Special Interest Group)

  • GitHub organizationである riscv-android-srcに変更が含まれている

T-Head Xuantie C906

  • シングルコア RV64GC, 1.0GHz, 5ステージパイプライン

Allwinner D1 SoC

  • T-HeadのC906コアが使用されている

Allwinner Nezha D1開発ボード