らんだむな記憶

blogというものを体験してみようか!的なー

みかん日記 (1)

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/2cc0bb7547ad050791741a80cc62550fd4ef1e11qemu-system-gui パッケージが見つからないな。何でだろ。

それはさて置き、osbook/devenv/x86_64-elf 以下に 12MB 程度のバイナリが配置される。これを後で使う時のインクルードパスについても問題が起こらないように buildenv.sh#L3BASEDIR="$HOME/osbook/devenv/x86_64-elf" を自分の環境に合わせておく必要がある。

day01 の地獄の hex 写経を経て・・・BOOTX64.EFI で FAT でフォーマットしたディスクイメージをループバック機能を使ってマウントしてイメージ内の /EFI/BOOT 以下に書き込んで qemu で読ませて・・・

f:id:derwind:20210508224413p:plain:w300

となった。念のために、FAT でフォーマットされた USB メモリにフォルダ「UEF\BOOT」を作って BOOTX64.EFI をコピーして、VirtualBox 6.1.22 で EFI を有効にして USB ブートっぽい感じのことをさせてみると、

f:id:derwind:20210508233531p:plain:w300

のようになったので、たぶんいけてるんじゃないかな。

因みに C 版を clangコンパイルすると手打ちのやつとはチェックサム値が異なる。昔懐かしの「This program cannot be run in DOS mode.」などが入っているせいで確実に異なってくるようだ。さて、これで第 1 章(〜p.46)は終わり。

*****

なお、本によると

BOOTX64.EFI の中での文字を表すには Unicode の一種である UCS-2 を使います。

と書いてあるので、基本多言語面の部分しか表示できないのかもしれない。1

どうでもいいんだけど、昔買った 標準テキスト 組込みプログラミング 《ソフトウェア基礎》:書籍案内|技術評論社標準テキスト 組込みプログラミング 《ハードウェア基礎》:書籍案内|技術評論社 には u-boot はおろか、そもそもブートローダの話とか出てこないな・・・。ブートのプロセスがざっくり書いてあるだけだった。uloader から u-boot をキックして kernel をロードする話とかが読みたいんだけどなぁ・・・。


  1. UTF-16 = UCS-2 + 追加多言語面。追加多言語面がサロゲートペアで記述される。UCS-2 ‐ 通信用語の基礎知識 によると U-PRESSUCS-2 を報道機関用に拡張したものらしい。