目次: RISC-V
目次: 独自OS
DOOMのクローン実装prboom2を組み込み環境に移植する話です。前回は画面描画を1.5倍ほど高速化しました。
今まで「組み込み環境」とひとまとめにして呼んでいましたが、OSだけでもLinux、RTOS、もっとシンプルなものも含めると無数にあります。既存のOSの上で動かすのも大変興味深いですが、今回は自作OS(2022年12月14日の日記参照)の上で動かしてみたいと思います(リポジトリへのリンク)。
今まで下記の機能を削除したり、代替機能で置き換えてきたのはこのためです。動作させるボードやSoCにHW機能がない場合もあれば、自作OSにドライバを実装しておらずHW機能があっても自作OSから使う方法がないのです。
自作OSの特徴は下記のようにLinuxと同じlibcを採用して、Linuxのアプリケーションを移植しやすい仕組みになっていることです。速度の遅い組み込み環境で何度も動作確認するのは大変ですから、なるべくLinux上で検証できるようにした構成です。
今回のprboom2の移植の際もC言語のコードを弄る必要はありませんでした。ビルドシステムというかMakefileを別途作っていますが、なんでだったか忘れました……。
自作OSのランタイム側のビルドのための準備については、ドキュメント(リンク)を見ていただくとして。QEMU RISC-V 32bit向けに自作OSをビルドします。
$ cd baremetal_crt $ cmake ./ -G Ninja -B build \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=./test/sysroot/ \ -DARCH=riscv \ -DCROSS_COMPILE=riscv64-unknown-elf- \ -DCC=gcc \ -DDEFCONF=riscv_qemu_virt_32_xip $ ninja -C build install
次に改造prboom2をビルドします。前回まで説明してきた改造を全て適用したprboom2をGitHubに置いた(リンク)ので、このコードを使うと簡単です。実装が適当かつ書きかけのコードとかが残っていて美しくありませんが、細かいことは気にしないでください……。
$ cd prboom2 $ ./configure --disable-gl $ cd src/riscv $ make USE_NEWLIB=y USE_SYSROOT=(baremetal_crtのパス)/test/sysroot all
最初のconfigureはconfig.hを作成するために実行しています。特にconfig.hを変更する予定はないので固定で置いてしまえば良かったんじゃないか?と思いましたけど、まあいいでしょう。
$ qemu-system-riscv32 \ -machine virt \ -bios none \ -net none \ -nographic \ -chardev stdio,id=con,mux=on \ -serial chardev:con \ -mon chardev=con,mode=readline \ -smp 4 \ -s -kernel prboom2/src/riscv/prboom
こんな感じで動作確認できます。
描画速度を稼ぐため解像度を半分にしている以外、見た目が前回まで(つまりLinuxで動作させたとき)と同じなのであまり面白くないですね……。
< | 2024 | > | ||||
<< | < | 06 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | - | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | - | - | - | - | - | - |
合計:
本日: