自作OS
· 約2分
MikanOSを作る
第1章
M1 Mac + Docker で環境構築
「ゼロからのOS自作入門」の副読本的記事 を読みながら、環境構築
毎回OS_DIRを指定するのが面倒なので、環境変数を設定
$ export OS_DIR=/workspaces/mikanos
何故か副読本の通りに進めていくと、エラーが出た
$ sudo mount -o loop disk.img mnt
mount: unknown filesystem type 'vfat'.
再度環境を作り直して、やり直したら、エラーが出なくなった
第2章
特に問題なく実行できた
第3章
3.1
xコマンドを使って、機械語を逆アセンブルして表示する箇所で、本で指定されているアドレスでは while ループに該当する場所と異なる場所が表示された。
info registers でレジスタの値を確認したときに、 RIP の値が異なっているため、RIP=0xXXXXXXXXX で出力されている値を設定する。
3.3
毎回長いコマンドを叩くのが大変なので、Makefileを作成(第4章でやっていた)
# makefile for edk2
SHELL=/bin/bash
OS_DIR := ~/mikanos
all:
cd ~/edk2 && source edksetup.sh && build
run:
~/osbook/devenv/run_qemu.sh ~/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi ${OS_DIR}/kernel/kernel.elf
kernel の Makefile も作成 この後の変更で必要になる CPPFLAGS と LDFLAGS を追加する
# makefile for kernel
all:
clang++ $(CPPFLAGS) -O2 --target=x86_64-elf -fno-exceptions -ffreestanding -c main.cpp
ld.lld $(LDFLAGS) --entry KernelMain -z norelro --image-base 0x100000 --static -o kernel.elf main.o
第4章
ひとまずコードを動かしてみたが、コンパイルでエラーを吐く headerファイルのincludeが通っていない
/usr/include/stdint.h:26:10: fatal error: 'bits/libc-header-start.h' file not found
#include <bits/libc-header-start.h>