ゼロからのOS自作入門
https://gyazo.com/2e2b799bed313447cfde38e541ea3094
やっていきしていく
https://www.youtube.com/playlist?list=PLbBGNsln3DxTLHB9GFM6_drAJ1JQXIOud
東工大生はこれやってるのやばいね
2026/2/28
第0章 OSって個人で作れるの?
OSを作るコツ
最初から完璧に作ろうとしないこと。手が止まってしまい、進まなくなっちゃう。まずはOSっぽく見えるおもちゃを作ろう。
uyuki234.icon大事なことや…手を動かしていこう
QUEMっていうエミュレーターがあるらしい
ブートローダを作る
OSをストレージからメインメモリに読み込ませる
第1章 PCの仕組みとハローワールド
2026/3/1
付録A
code:WSLinstall.bash
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
WSLインストールした
X serverインストールした
Ubuntuのバージョン確認方法(Ubuntu内部)
code:version.bash
lsb_release -a
私はUbuntu 22.04.5 LTSでいきます
なんか途中でうまく動かない部分があるらしいけど、これで行く
2026/3/2
code:1.1.bash
sudo umount /dev/sdb1
sudo mkfs.fat /dev/sdb1
sudo mkdir -p /mnt/usbmem
sudo mount /dev/sdb1 /mnt/usbmem
sudo mkdir -p /mnt/usbmem/EFI/BOOT
sudo cp BOOTX64.EFI /mnt/usbmem/EFI/BOOT
sudo umount /mnt/usbmem
↑これはエミュレーターの方法ではない、
ls /mntで見る
code:1.3.bash
sudo mkdir -p /mnt/usbmem
sudo mount -t drvfs E: /mnt/usbmem
sudo mkdir -p /mnt/usbmem/EFI/BOOT
sudo cp BOOTX64.EFI /mnt/usbmem/EFI/BOOT
sudo umount /mnt/usbmem
F:は読み替え必要
sudo mkdir -pで、/mnt/usbmemというディレクトリを作っている
-p オプション
途中の階層もまとめて作る("parents" の略)
既に同名ディレクトリがあってもエラーにならない
よく使う安全なオプション
code:1.4.bash
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/BOOTX64.EFI
sudo umount mnt
code:1.4.2.bash
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
code:1.4.3.bash
HOME/osbook/devenv/run_qemu.sh BOOTX64.EFI
MikanOS のソースコードの入手までやった
MikanOS のビルドしたけど、QEMU で起動、$ ./build.sh runは時間かかって何も表示されなかった
$ APPS_DIR=apps RESOURCE_DIR=resource ./build.sh runこれは作業が進まなかった
もしかしたらもっと待たないといけないのかも?
64ビットCPU
一回の計算で64桁の二進数を扱える
code:1.4.4 compile.bash
cd $HOME/osbook/day01/c
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
今更理解した
WSLとQEMU使うのは、VM使わずにUbuntuで開発する手法
https://www.youtube.com/watch?v=odDJ3QvlF2g
これ見ればいい感じにわかる、気がする
第2章 EDK II入門とメモリマップ
2026/3/3
https://scrapbox.io/files/69a5af5cf1c53c17321f5120.png
VSCodeはこれで起動してる
起動方法、下記コマンドをubuntuで実行
code:run.bash
osbook/devenv/run_qemu.sh BOOTX64.EFI
2.7メモリマップの確認
buildが失敗する
code:failed.bash
uyuki:~/edk2$ build
Build environment: Linux-6.6.87.2-microsoft-standard-WSL2-x86_64-with-glibc2.35
Build start time: 17:18:46, Mar.03 2026
WORKSPACE = /home/uyuki/edk2
EDK_TOOLS_PATH = /home/uyuki/edk2/BaseTools
CONF_PATH = /home/uyuki/edk2/Conf
PYTHON_COMMAND = /usr/bin/python3
Processing meta-data .
Architecture(s) = X64
Build target = DEBUG
Toolchain = CLANG38
Active Platform = /home/uyuki/edk2/MikanLoaderPkg/MikanLoaderPkg.dsc
build.py...
/home/uyuki/edk2/MikanLoaderPkg/MikanLoaderPkg.dsc(...): error 4000: Instance of library class RegisterFilterLib is not found - Failed -
Build end time: 17:18:47, Mar.03 2026
Build total time: 00:00:00
workspaceディレクトリがなかったので、追加してmikanosを移動させた
これは関係なかった
library class [RegisterFilterLib]がないらしい
上記やったらうまくいった
MikanLoaderPkg.dsc に RegisterFilterLib を追加
RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
第3章 画面表示の練習とブートローダ
2026/3/4
QEMUモニタについての知識と、実行ファイル(EFIファイルやELFファイル)についての知識、アセンブリ言語の知識を組み合わせると、深く、効率よくデバッグすることができる、らしい。
code:compile.bash
clang++ -O2 -Wall -g --target=x86_64-elf -ffreestanding -mno-red-zone \
-fno-exceptions -fno-rtti -std=c++17 -c main.cpp
ld.lld --entry KernelMain -z norelro --image-base 0x100000 --static \
-o kernel.elf main.o
第4章 ピクセル描画とmake入門
正誤p108
第5章 文字表示とコンソールクラス
第6章 マウス入力とPCI
第7章 割り込みとFIFO
第8章 メモリ管理
第9章 重ね合わせ処理
第10章 ウィンドウ
第11章 タイマとACPI
第12章 キー入力
第13章 マルチタスク(1)
第14章 マルチタスク(2)
第15章 ターミナル
第16章 コマンド
第17章 ファイルシステム
第18章 アプリケーション
第19章 ページング
第20章 システムコール
第21章 アプリからウィンドウ
第22章 グラフィックとイベント(1)
第23章 グラフィックとイベント(2)
第24章 複数のターミナル
第25章 アプリでファイル読み込み
第26章 アプリでファイル書き込み
第27章 アプリのメモリ管理
第28章 日本語表示とリダイレクト
第29章 アプリ間通信
第30章 おまけアプリ
第31章 これからの道