はじめに
ゼロからのOS自作入門を買いました。
壊れても良いノートPCが手元になかったため、WSLを使ってOS起動しようとしましたが
第一章のハローワールドから結構詰まってしまったので、上手くいった手順を書き残しておきます。
環境
- Windows10
- WSL2(Ubuntu)
手順
WSL2をセットアップする
書籍の「付録A 開発環境のインストール」の「A.01 WSLのインストール」と「A.02 WSLでQEMUを使う準備」を手順通りに行います。
ここは私の環境では特に問題なく完了しました。
Ubuntuをインストールする
Microsoft Storeを開いてUbuntuをインストールします。
検索するといくつか候補がでますが、私は一番上をインストールしました。
インストールが完了し、Ubuntuを起動するとコンソール画面が表示されます。(GUIで表示されるものと思っていたため少し戸惑いましたが、WSLはGUI表示に対応していないそうですね・・)
コンソールでユーザー名とパスワードを設定するよう言われるので、それに従います。
ハローワールドする
ここから本題の「Hello, World!」を表示するOSを立ち上げます。
まず初めに、書籍ではバイナリエディタでプログラムを写経することがオススメされていましたが、そこで詰まりそうだったためサポートサイトで提供されている完成ファイルを使用しています。
環境構築
Ubuntuのコンソールでプログラムをエミュレートするための環境を構築します。
私はここで詰まったのですが、書籍ではなくサポート用のGithubに手順が記載されています。
まず、「ビルド環境の構築 > リポジトリのダウンロード」を行います。
Ubuntuのコンソールで下記コマンドを順番に実行します。
$ sudo apt update
$ sudo apt install git
$ cd $HOME
$ git clone https://github.com/uchan-nos/mikanos-build.git osbook
lsコマンドでosbookディレクトリができているのが確認できました。
続いて、「ビルド環境の構築 > 開発ツールの導入」を行います。
Ubuntuのコンソールで下記コマンドを順番に実行します。
$ sudo apt install ansible
$ cd $HOME/osbook/devenv
$ ansible-playbook -K -i ansible_inventory ansible_provision.yml
しばらく待つと、処理が完了して入力可能な状態になりました。
lsコマンドでedk2というディレクトリができているのが確認できます。
続いて、もしかすると不要かもしれませんが手順に記載されている下記コマンドも実行しました。
セットアップが上手くいけば
iasl
というコマンドがインストールされ,$HOME/edk2
というディレクトリが生成されているはずです。 これらがなければセットアップが失敗しています。
$ iasl -v
$ ls $HOME/edk2
WSL 上の Ubuntu で上記のコマンドを実行すると,
$HOME/.profile
にDISPLAY
環境変数の設定が追加されます。 この設定を有効にするにはターミナルを再起動するか,次のコマンドを実行する必要があります。
$ source $HOME/.profile
ハローワールド プログラムの実行
書籍に戻り、「1.4 エミュレータでのやり方」を進めていきます。
まず、ハローワールドプログラムをDLします。(本当は写経すべきですが)
Ubuntuのコンソールで下記実行します。
$ curl -O https://raw.githubusercontent.com/uchan-nos/mikanos-build/master/day01/bin/hello.efi
lsコマンドで「hello.efi」というファイルをDLできたのが確認できます。
続いて、ディスクイメージ作成のために下記を実行します。
$ qemu-img create -f raw disk.img 200M
$ mkfs.fat -n 'MIKAN OS' -s 2 -f 2 -R 32 disk.img
$ mkdir -p mnt
$ sudo mount -o loop disk.img mnt
$ sudo mkdir -p mnt/EFI/BOOT
$ sudo cp hello.efi mnt/EFI/BOOT/BOOTX64.EFI
$ sudo umount mnt
lsコマンドで「disk.img」というファイルができたのが確認できます。
続いて、ディスクイメージをQEMUで起動するために下記を実行します。
$ qemu-system-x86_64 -drive if=pflash,file=$HOME/osbook/devenv/OVMF_CODE.fd -drive if=pflash,file=$HOME/osbook/devenv/OVMF_VARS.fd -hda disk.img
QEMUのウィンドウが立ち上がり、「Hello, world!」が表示されました!
終わりに
冒頭から詰まって心折れそうになりましたが、何とかハローワールドすることができました。
今後も詰まりまくる予感がしていますが、折れずに続けていきたいなと思います。
参考サイト