はじめに
ゼロからのOS自作入門を買いました。
HelloWorldで行き詰ったので、上手くいった手順の書き残しておきます。
環境
- Windows 10
- WSL2(Ubuntu)
手順
WSL2をセットアップする
書籍通り行う。
Ubuntuをインストールする
書籍通り行う。
Hello worldする
ここから本題の「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
ハローワールドプログラムの実行
書籍に戻り、「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 -F 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!」が表示されました!
run_qemu.shでの実行方法
$HOME/osbook/devenv/run_qemu.sh osbook/devenv/mnt/EFI/BOOT/BOOTX64.EFI