ゼロからのOS自作入門 | day01

Kindle Unlimitedでそれっぽい本をパラパラと読んでいたらOSの自作に興味を持ってしまったので買いました。

分厚い本っぽいのでKindleで買ったのですが、マーカーとかコピペとかできないやつだったのでガッカリ。

まあ本でもコピペなんぞできないんで気を取り直して進めてみました。

まずは第1章

事前準備

自分はKubernetesの環境作りで既にWindowsでUbuntuが使える状態だったのですが、VirtualBoxでUbuntuを使うことにしました。

VirtualBox

https://www.virtualbox.org/

データ領域は80Gを付与しました。デフォルトの10Gだと足りません。

Ubuntu

https://jp.ubuntu.com/download

Ubuntu Desktop 20.04.3 LTSを利用しました。

Okteta

バイナリエディタです。前に仕事でバイナリエディタを使ったことがあるのですが(データの件数確認程度)その時の苦しい記憶が蘇ってきました。

それはさておき、意味不明な文字列をひたすら打ち込みました。疲れました。

ちなみに「1行あたりのバイト数を設定…」で”16″にしても、画面サイズをデカくして表示しないと参考書のように表示されませんでした。

sum BOOT64.EFI
12430     2

このコマンドで問題がないことを確認して次は実行です。

実行

家に使ってないパソコンがあったのでそれで試すことにしました。USBメモリは64Gのがあったのでそれを利用しました。

VirtualBoxでUSBメモリを認識させるには、拡張パックが必要とのことで以下のサイトを参考に導入します

https://pc-karuma.net/virtualbox-mount-usb-flash-drive/

Failed to create a proxy device for the USB device というエラーが起きたのですが、3.0ポートで接続してるのが問題らしいので2.0ポートに接続したら、POKANという音とともに認識したっぽいポップアップが出てきた

参考書のやりかただとUSBの探し方が意味不明だったのでdevフォルダでUSBを抜き差ししててlsコマンドで確認するとsdbというフォルダがそれだと理解した

色々ミスったがコピーまで完了。。。

USBを引っこ抜いて使ってないパソコンに差し込んで起動します。

そして無事失敗。。。原因は不明

エミュレーターで実行

というわけでエミュレーターで行います。

付録AとGithubを見ても、qemuのセットアップがわからなかったので適当に以下でinstallをしました。

qemu-img

コマンド 'qemu-img' が見つかりません。次の方法でインストールできます:

sudo apt install qemu-utils

misaka@misaka-VirtualBox:~$ sudo apt install qemu-utils

qemu-img create -f raw disk.img 200M
Formatting 'disk.img', fmt=raw size=209715200
misaka@misaka-VirtualBox:~/ドキュメント$ mkfs.fat -n 'MIKAN OS' -s 2 -f 2 -R 32 -F 32 disl.img
mkfs.fat 4.1 (2017-01-24)
mkfs.fat: unable to open disl.img: No such file or directory
misaka@misaka-VirtualBox:~/ドキュメント$ mkfs.fat -n 'MIKAN OS' -s 2 -f 2 -R 32 -F 32 disk.img
mkfs.fat 4.1 (2017-01-24)
misaka@misaka-VirtualBox:~/ドキュメント$ mkdir -p mnt
misaka@misaka-VirtualBox:~/ドキュメント$ sudo mount -o loop disk.img mnt
[sudo] misaka のパスワード: 
misaka@misaka-VirtualBox:~/ドキュメント$ sudo mkdir -P mnt/EFI/BOOT
mkdir: 無効なオプション -- 'P'
Try 'mkdir --help' for more information.
misaka@misaka-VirtualBox:~/ドキュメント$ sudo mkdir -p mnt/EFI/BOOT
misaka@misaka-VirtualBox:~/ドキュメント$ sudo cp BOOT64.EFI mnt/EFI/BOOT/BOOT64.EFI
misaka@misaka-VirtualBox:~/ドキュメント$ sudo umount mnt
misaka@misaka-VirtualBox:~/ドキュメント$ 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

コマンド 'qemu-system-x86_64' が見つかりません。次の方法でインストールできます:

sudo apt install qemu-system-x86      # version 1:4.2-3ubuntu6.18, or
sudo apt install qemu-system-x86-xen  # version 1:4.2-3ubuntu6.18

misaka@misaka-VirtualBox:~/ドキュメント$ sudo apt install qemu-system-x86
パッケージリストを読み込んでいます... 完了

ここで何かに気が付く、あれ?環境構築が必要??

https://github.com/uchan-nos/mikanos-build

とりあえずビルド環境の構築を行う

git clone https://github.com/uchan-nos/mikanos-build.git osbook

ここまで行って再度実行。ハローワールドしない。。。

本を読むとrun_qemu.shというシェルがあるよ:)とのことなのでそれで試すと

きました。入力していたマシン語には問題は無かったようなので一安心。

正直2進数とか16進数とか、この業界にいても無視してきました。。。

ハローワールドが表示されるまで

USB起動の場合

CPUがBIOSを実行する→BIOSが接続されているストレージを検索する→ストレージ中の実行可能ファイルをメインメモリに書き出す→CPUがメインメモリに書き出したファイルを実行する。

C/C++の導入

ここでVirtualBoxで割り当てている10Gの容量が足りなくなり拡張しようとしたら起動しなくなったので最初から作り直した。容量を80Gにして作成

(HDDがなくてダブルSSDで動いてるパソコンなので80Gは痛い・・・)

lld-linkってコマンドが見つかりませんってエラーになったので、githubに戻って以下まで実施

ansible-playbook -K -i ansible_inventory ansible_provision.yml

さぁ、これでhello.efiが作成できるようになったので、さっそくエミュレータで起動してみます。

なんとか動きました。。day01なのにめっちゃ疲れた

ネット見ないと環境構築できないってので少し戸惑ったが、最初の一歩を踏み出せたので良かった。

正直Kindle版は失敗したなぁと思ったが本も744ページあるそうなので・・・

シェアする

  • このエントリーをはてなブックマークに追加

フォローする