注: Fedora のコンパイルでは、HS-2 64 コア RISC-V サーバーは Ryzen5700x の 2 倍高速です。
---以下、ブログ本文です---
# Fedora Linux カーネルを RISC-V 上でネイティブにコンパイルする
## Fedora RISC-V のサポート
Fedora では、RISC-V ハードウェアをサポートするための作業が進行中です。現時点では、Fedora のドキュメントには、SiFive HiFive Unleashed にディストリビューションをインストールする方法のみが公式に示されています。
ボード。Fedora によって非公式にサポートされている別のボードがありますが。このボードは、Project Andre と Fedora の開発のために購入する予定の Sispeed LicheePi 4A です。
## PerfXLab システムでの Fedora Chroot 環境のセットアップ
PerfXLab RISC-V サーバーは Ubuntu 22.10 を実行しているため、カーネルをコンパイルするための Fedora 環境を取得するには少し工夫が必要でした。コンテナまたは chroot 環境が必要であることはわかっていました。
ビルドで問題が発生したり、ホスト システムを汚染したりしないように、適切なビルド環境に入ることができます。
私はまず、chroot 環境として使用する、コンパイル済みの RISC-V Fedora rootfs を探しました。検索中に、事前に構築された RISC-V RAW イメージを見つけました。この生のイメージは完璧でした!そうだった
本質的には、偶然にも Licheepi 4A および T-Head バリアント用にもともと設計された既製の rootfs です。
イメージを PerXLab システムにダウンロードしたら、生のイメージをループバック デバイスとしてマウントし始めました。RAW 画像を分析する最も簡単な方法の 1 つは、次の簡単なハックを実行することです。そして私は・・・それから私は
ルート パーティション (通常は最大のパーティション) を見つけてマウントしたので、そこへの chroot 作業を行うことができます。
パーティションをマウントしたら、完全に機能する chroot 環境の前提条件のセットアップを開始しました。私はよくやるように、Trust Linux From Scratch の本を参照しました。
この種の作業を開始し、仮想カーネル ファイルシステムのマウントを開始しました。
「」
# コマンドの実行を簡単にするためです:)
LFS="/home/maxinehayes90/fedora_rv_mnt"
# /dev を設定します
sudo mount -v --bind /dev $LFS/dev
# 仮想カーネルファイルシステムをマウントする
mount -v --bind /dev/pts $LFS/dev/pts
mount -vt proc proc $LFS/proc
マウント -vt sysfs sysfs $LFS/sys
マウント -vt tmpfs tmpfs $LFS/実行
「」
/dev と VKFS がマウントされたので、単に ``sudo chroot $LFS /bin/bash`` を実行するだけで、Fedora rootfs に chroot できるようになります。chroot でネットワークがあるかどうかを必ずテストしました
パッケージの dnf 検索を実行して接続します。dnf がメタデータをダウンロードできないというエラーが発生したため、ホスト上の /etc/resolv.conf を chroot 環境にコピーするようにしました。私
その後、シンボリックリンクであるためにコピーできないという問題に遭遇しました。シンボリックリンクをたどってみると、それが /run/systemd/resolve/stub-resolv.conf を指していることがわかりました。コピーしました
このファイルを /etc/resolv.conf として chroot にコピーします。成功!Dnf はメタデータをダウンロードできました。
## Chroot 環境での Fedora カーネルの構築
Fedora の場合は、RISC-V パッケージ ビルドを提供する Koji があります。http://fedora.riscv.rocks/koji/ でホストされている Koji にアクセスし、wget を使用してカーネル ソース RPM を chroot にダウンロードしました。
カーネル ソースを構築するために、最初にモックをインストールし、RISC-V 構成を探しました。残念ながら、/etc/mock には見つかりませんでした。それがわかった後、rpmbuild を使用してプラン b を選択しました。
rpmbuild でソースコードをビルドするには、まず ``dnf builddep SPECS/kernel.spec`` を使用して、specfile に必要な依存関係をインストールする必要がありました。それが完了したら、カーネルを構築する準備が整いました。```time rpmbuild -bb SPECS/kernel.spec``` を使用してビルドを開始し、エラーが発生するかどうかを確認するために数分間待機しましたが、約 7 分後にエラーが発生しました。それで私は別のものを試してみました
同じ問題が発生したカーネルのバージョン。しばらく離れてから、エラーが何であるかを理解しました。chroot のディスク容量が不足してしまいました。
私がマウントして chroot したルート パーティションのサイズはわずか数ギガバイトで、カーネルを構築するときにこの詳細を忘れていました。問題を解決するために私がしたことは、すべてをアンマウントすることでした
仮想カーネル ファイルシステムと /dev の。次に、マウントされた rootfs をホスト上のディレクトリにコピーしました。その後、VKFS を再マウントし、ビルドを再開した場所に chroot で戻りました。
ビルドを再開したら、別のエラーが発生するかどうかを確認するために、再び約 20 分間座って待ちました。間違いの可能性はないと確信したとき、私は立ち去った
翌日戻ってくると、問題なくビルドされていることがわかりました。驚いたことに、ビルドが完了するまでに 1 時間 37 分かかりました。
## リソース
使用画像: https://openkoji.iscas.ac.cn/pub/dl/riscv/T-Head/th1520_light/images/fedora-disk-minimal_thead_th1520-f38-20230511-210358.n.0-sda.raw.xz
Fedora T-Head ドキュメント: https://fedoraproject.org/wiki/Architectures/RISC-V/T-Head
Linux フロムスクラッチ VKFS ページ: https://www.linuxfromscratch.org/lfs/view/stable/chapter07/kernfs.html
PerfXLab (RISC-V サーバーへのアクセスを許可してくれた Paul Wang に感謝します!): http://www.perfxlab.com/
-
HS-2について
HS-2 RISC-V ユニバーサル マザーボードは、Pengfeng Technology とそのパートナーが共同開発した開発者向けに設計された標準 mATX マザーボードで、Pengfeng Technology が RISC-V 高性能サーバー用にカスタマイズおよび開発したソフトウェア パッケージがプリインストールされています。さまざまな標準ベンチマークを含み、V 拡張機能をサポート
GCC コンパイラー、コンピューティング ライブラリ、ミドルウェア、およびさまざまな典型的なサーバー アプリケーション。
HS-2 RISC-Vユニバーサルマザーボードは、国産RISC-V 64コアプロセッサ(SG2042)を搭載しています。SG2042 は、現在量産されている最高性能の RISC-V プロセッサであり、主に高性能コンピューティングのニーズに合わせて設計されており、科学コンピューティング、エンジニアリング コンピューティング、AI コンピューティング、フュージョン コンピューティングなどの大規模なコンピューティング能力アプリケーション シナリオに適しています。 。
RISC-V パブリック テスト クラウド プラットフォームに関する一連の記事
1. RISC-Vパブリックベータプラットフォームリリース・ストリーム帯域幅完全テスト
2. RISC-Vパブリックベータプラットフォームがリリース・Minecraft MohistMC
3. RISC-Vパブリックベータプラットフォームリリース・初のWEBサーバー「Hello RISC-V world!」
4. RISC-Vパブリックベータプラットフォームがリリース・SG2042でk3sをプレイする方法
5.「RISC-V成長日記」ブログ公開、RISC-Vサーバー上で稼働する初のブログ?
6. RISC-V パブリック ベータ プラットフォームがリリースされました: SG2042 で OpenMPI をプレイする方法
7. RISC-V パブリック ベータ プラットフォームがリリースされました: Fedora Linux カーネルを RISC-V でネイティブにコンパイルする (この記事)