DeZero
に続く写経シリーズ。今度は ゼロからのOS自作入門 | マイナビブックス を写経してみたい。たまたま放置していた Ubuntu 18.04 LTS 環境があるので流用する。
環境構築の前に・・・
apt list --upgradable | perl -n -e 'if (~/^(\w+?)\//){print "$1\n";} | uniq
である程度アップデート対象の処理を・・・。761 個の upgradable なモジュールが出てくるんだけど・・・という。面倒臭いので
sudo apt update sudo apt upgrade
でもしてコーヒーを飲んで待とう・・・。
そして ansible
で環境を構築。あぁ・・・ansible_provision.yml#L106 でパス
dest: "{{ ansible_env.HOME }}/osbook/devenv"
を指定しているから書き換えないと途中で fail するな・・・。
自分の環境用にパスを変更して再実行しても https://github.com/uchan-nos/mikanos-build/commit/2cc0bb7547ad050791741a80cc62550fd4ef1e11 の qemu-system-gui
パッケージが見つからないな。何でだろ。
それはさて置き、osbook/devenv/x86_64-elf
以下に 12MB 程度のバイナリが配置される。これを後で使う時のインクルードパスについても問題が起こらないように buildenv.sh#L3 の BASEDIR="$HOME/osbook/devenv/x86_64-elf"
を自分の環境に合わせておく必要がある。
day01
の地獄の hex 写経を経て・・・BOOTX64.EFI
で FAT でフォーマットしたディスクイメージをループバック機能を使ってマウントしてイメージ内の /EFI/BOOT
以下に書き込んで qemu
で読ませて・・・
となった。念のために、FAT でフォーマットされた USB メモリにフォルダ「UEF\BOOT」を作って BOOTX64.EFI
をコピーして、VirtualBox 6.1.22 で EFI を有効にして USB ブートっぽい感じのことをさせてみると、
のようになったので、たぶんいけてるんじゃないかな。
因みに C 版を clang
でコンパイルすると手打ちのやつとはチェックサム値が異なる。昔懐かしの「This program cannot be run in DOS mode.」などが入っているせいで確実に異なってくるようだ。さて、これで第 1 章(〜p.46)は終わり。
*****
なお、本によると
と書いてあるので、基本多言語面の部分しか表示できないのかもしれない。1
どうでもいいんだけど、昔買った 標準テキスト 組込みプログラミング 《ソフトウェア基礎》:書籍案内|技術評論社 と 標準テキスト 組込みプログラミング 《ハードウェア基礎》:書籍案内|技術評論社 には u-boot
はおろか、そもそもブートローダの話とか出てこないな・・・。ブートのプロセスがざっくり書いてあるだけだった。uloader
から u-boot
をキックして kernel をロードする話とかが読みたいんだけどなぁ・・・。