みず吉のプログラ日記

開発日記になる予定です。

MacでゼロからのOS自作入門 1-2章

今日やること

  • 1章を終わらせる (Hello,world!を表示させる)
  • 2章を終わらせる (メモリマップを表示させる)

1章

再開時は必ずvscodeのターミナルに

$ OS_DIR=/workspaces/mikanos-devcontainer/mikanos

と打ち込んでから始めましょう。

1章については書いてある通りです!無事表示されました。嬉しい〜!

f:id:mizkitten:20210729183154p:plain
Hello, World!

ちなみに (qemu)コンソールを終了する時は quit を入力します。

写経しないで進めてしまったので、hello.cファイルを書き換えてみましょう。

まずviでhello.cを開きます。

$ cd /home/vscode/osbook/day01/c
$ vi hello.c

一番下の方にある"Hello, world!\n"を好きなように書き換えます。viのコマンドはこちら

(省略)
EFI_STATUS EfiMain(EFI_HANDLE        ImageHandle,
  EFI_SYSTEM_TABLE  *SystemTable) {
   SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello, My OS world!\n");
   while (1);
   return 0;
}

書き換えたら:wqで保存します。

コンパイルしてリンクするとhello.efiができるので、QEMUで動かします。

下の一番最後の行のコマンドはイメージを作って、書き込んでQEMUで動かすのを自動化してるらしいです。すご!

$ clang -target x86_64-pc-win32-coff -mno-red-zone -fno-stack-protector -fshort-wchar -Wall -c hello.c
$ lld-link /subsystem:efi_application /entry:EfiMain /out:hello.efi hello.o
$ ~/osbook/devenv/run_qemu.sh hello.efi

無事書き換えられました〜!

f:id:mizkitten:20210729184814p:plain
Hello, My OS World! が表示された

2章

$ cd $OS_DIR
$ git checkout osbook_day02a
$ cd ~/edk2
$ ln -nfs MikanLoaderPkg /workspaces/mikanos-devcontainer/mikanos/MikanLoaderPkg ./
($ source edksetup.sh)
$ build
$ ~/osbook/devenv/run_qemu.sh ~/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi $OS_DIR/kernel/kernel.elf

本で書いているシンボリックリンクを作成するとすでにあるという旨のエラーが出ましたが、どうやら無効らしいので4行目のように変更します。 また、私はbuildに必要なConf/target.txtがなかったため、この5行目のコマンドで生成しないとbuildに失敗しました。なくても大丈夫なのかもしれません。

6行目のようにQEMUを立ち上げると無事Hello, Mikan World!と表示されました。 2章クリアです!