【OS自作記録 環境構築・1章】HelloWorld!

はじめに

バックエンドエンジニアになるために自分でロードマップをある程度考え、何を学習するべきかを洗い出した結果、低レイヤーの知識をつけることにした。そこでOSの基本的な動作を知るためにゼロからのOS自作入門を実践することにした。習うより慣れろ。何より楽しそう。

環境構築

書籍はUbuntu18.04で動作確認をしているようだったので、同じく18.04を開発環境として構築することにした。秋葉原で中古のThinkPadを購入。
スペックは以下

Lenovo ThinkPad L460
CPU: intel CORE i5

18.04のインストールでつまづく

18.04のISOファイルをダウンロードしてRufusを使ってusb起動メディアを作成し、開発用PCに差し込んで起BIOS設定画面でUSBを選択したが、mounting /cow on /root failled エラーが発生してubuntuを起動できなかった。
19.10をインストールすることで解決できたが原因はよくわからなかった。
https://kobaday.blogspot.com/2020/01/ubuntu-1910-remixhdd1804-universal-usb.htmlhttps://kobaday.blogspot.com/2020/01/ubuntu-1910-remixhdd1804-universal-usb.html

第0章

そもそもOSとは何?どんな機能を提供してくれるのかがわかりやすく記述されていた。OSは主に以下の3つの機能を提供する。

  • 計算資源の分配
  • アプリケーションに対するインタフェース
  • 人間に対するインタフェース

計算資源の分配は、CPUの計算能力やメモリ、必要なリソースを一つのアプリケーションが独占しないように各資源を分割する。アプリケーションがストレージや入力装置などの周辺機器の詳細(接続規格、速度など)を意識することなく活用するために統一したインタフェースを提供する。それと同じように人間にも統一したメニューや操作を提供する。

第1章

第1章では「okteta」というテキストエディタを使用して「Hello World!」を出力するバイナリファイルを作成した。sumコマンドを使用してチェックサムを確認したがどうしても本書と合わなかった。そこで、BOOTX64.EFIBOOTX64.dumpファイルにリダイレクトしたものと、mikanosのリポジトリにあるものをdiffコマンドで差異を確認した。
https://zenn.dev/nnabeyang/scraps/f9151dfbe4f294https://zenn.dev/nnabeyang/scraps/f9151dfbe4f294

無事差分を発見してusbにファイルをコピーし、BIOS起動順序でusbを選択することで「Hello, World!」が画面に表示された!

第2章

19.10を使っていたせいか、EDK IIのビルドがどうしても完了しなかった。EDK IIについては別記事でまとめることにする。