2021年4月5日月曜日

ゼロからのOS自作入門をRustに書き換えながら作っていく1章~2章

ゼロからOSを作る本(通称:みかん本)、某30日本のモダンOS版ですね。

day3はこちら

なんとなくPDF版を買いました。

余剰のモニター使えば顔上げたまま読めるし^Fの検索も効くので。

とりあえずRustでやるからには環境を整えないといけない。
Day1はバイナリ打ち込もうぜ。っていう話でPEバイナリをひたすらバイナリエディタで作るだけなのでただやるだけ。ひたすらにやるだけ。なので記事は書いてない。

ビルドについて

Rustのデフォルトビルドコマンドである、 cargo build コマンドでビルドができるようにしたので、この界隈でよく使われるxargoとかxbuildは使っていない。
Rustでやるならここらはしっかりこだわりたい。
Makefileとか使わなくてええんやで。という強い推しをしていきたいんだけど
それ以外の部分がだいぶ苦行だからちょっと推せない気がしてきてる。


ちょっと早いけど、こちらがリポジトリ(Day2終了時点のコミット)

最新のリポジトリ本体

  1. 環境構築(WSL2)
    1. qemu-system-x86_64のインストール
    2. ovmf.fdを導入(みかん本では、ovmf_code.fd ovmf_vars.fdを使っているが、特に分ける理由もないので、ovmf.fdを使っていく)
  2. X-Serverのインストール(これはみかん本の最後の方に書いてあった)
  3. WSL2にRust(nightly版の最新)をインストールする
これが終わってようやく開発が始められる。
というわけで続き。

C++ではEDK-IIですが、Rustではuefi-rsを使って、ブートローダを書きます。
みかん本通りに進めているなら自然とEDK-IIは使えているわけですが
いかんせんこのuefi-rsはみかん本のスコープ外なので自力で調べる必要があります。
ここが難所です。マジわかりにくいのなんの。
大体コード書く時間を1割とすると、ライブラリを調べる時間とデバッグする時間が9割くらい。

とはいえ、Day2はDay3に比べるとそんなに分かりにくいライブラリは使わずに終えたのでウォーミングアップとしてはそれなり。
でも難しいものは難しいので勘所を書いておこうかと。
特にファイル入出力あたりの書き方が分からなさすぎて辛い。

なので、ファイル入出力のサンプルコードとして、リポジトリの当該コードにリンクを貼っておく。

で、確かDay2の目的はとりあえずメモリマップを吐ければOKだったので、吐いてみた。

とりあえず、吐けたのでDay2は完了
ただ、たまによくわからないバイナリがボコッと入ってくるのはなんでだろう。
多分メモリ上のゴミだと思うんだけど、原因不明なので類似事象が発生した方の報告まち。

Day2はおわり。

0 件のコメント:

コメントを投稿