Linuxカーネルを新プラットフォームで起動する方法:約2000行のC++でRISC-Vエミュレータを自作
How to bring up the Linux Kernel on a new platform

組み込みシステムでLinuxを動かすには、通常はカスタムハードウェア向けにカーネルを移植する必要があります。この記事では、新たなプラットフォームとしてRISC-V CPUをエミュレートし、Linuxカーネルを起動するまでの手順を解説します。著者は約2000行のC++コードでRV32IMA命令セットのエミュレータを実装し、RAM、UART、SBIタイマーなどの周辺機器を組み込みました。その後、crosstool-ngでツールチェーンを構築し、LinuxカーネルをRV32IMA向けに設定・コンパイル、initプログラムとinitramfsを作成し、デバイスツリーを記述して起動に成功させています。エミュレータのコードはGitHubで公開されており、実機でのブートローダーやデバイスツリーの役割も説明されています。
Linuxは非常に複雑なソフトウェアですが、実際に動作させるために必要なハードウェア要件はそれほど多くありません。
- Neywiny
私はこれをqemuのcortex-mでやったことがあります(つまり、タイマー、UART、DMA付きSDコントローラ、RCC用のチップとペリフェラルのエミュレーションコードも書きました)。しかし、私はbuildrootを使いました。すべてを管理するのがずっと簡単で、始めるのも非常に簡単です(yoctoとは異なり)。buildrootを調べてみることをお勧めします。
また、Linuxを実行するのにMMUは必要ありません。互換性を高めるだけです。
良い仕事です。
- csdreamer7
素晴らしい投稿です。あなたのファイル形式REは、読み物リストに追加すべきもののようです: https://werwolv.net/posts/file_format_reverse_engineering/
- elevation
素晴らしい投稿で、ブラウザで動作しているのを見るのはとても素晴らしいです! 一つ質問があります:なぜ設定をもう少し薄くしないのですか? USB、SOUND、VGAなどはすべて起動を遅くしていますが、制御するハードウェアがありません。