【OS自作入門】知識ゼロからの学習記録:エンジニア初心者の奮闘と挑戦(Part1)

ごえ
2023-10-11
2023-10-11

こんにちは。見習いエンジニアのごえです。
先日本屋さんにいったときに以下の書籍を見つけました。

『ゼロからのOS自作入門|内田 公太 著』

20231010_blog_1

日々サーバーの勉強をしていく中で、もっと根本的なところから理解を進めていきたいと思っていたところで、この本を見つけました。初心者にとって難しい箇所も少なくありませんが、読者を気遣った語り口調で楽しく勉強できそうです。

本の趣旨は、電源を入れてOSを呼び出してから様々なアプリケーションを動かせるようになるまでを、自分の手を動かして体験するというものです。

文字を表示させたりマウス入力を導入させたりと、当たり前な機能がどのような原理で備わっているかを学ぶことができます。

また、公式のサポートサイトがあり、読者間の質疑応答や読書記録、成果物の紹介などが見られるようになっています。議論の場もあるようなので書籍と並行して読んでいきたいと思います。

『ゼロからのOS自作入門』サポートサイト
https://zero.osdev.jp/

本ブログの趣旨

勉強の最終目標は書籍の読了&開発完了で、本ブログで学習記録(試行錯誤してもがいている様子)を残していきたいと思います。将来自分が読み返すためや、OS自作に興味がある方の参考になれば幸いです。

もう一つの意味として、「あ、こんな初心者でも勉強続けてるヤツがいるんだ」と思ってもらえると嬉しいです。ネット上のブログでは、すでに多大な経験がおありなベテランの方々が高度な話題を展開されています。もちろん勉強になるのですが、私のような初心者にとっては「自分と同じくらいのレベルの学習者の存在」も欲しいところです。

勉強を始めたての頃は、何をやってもチンプンカンプンプンの介で、キーボードをクラッシュしたくなることが日常茶飯事だと思います。

そんなときに自分と同じレベル感で奮闘している存在は、なんやかんや助けになる気がします。私は特に知識が浅いので、「そんなことで詰まるんだ」と思われるかもしれませんが、やったるぞ精神を書き残したいなと思います。

自作スタート

さっそくOS自作スタートです。

20230714_blog_ouen

書籍に沿うと、バイナリエディタを使って〝実行ファイル〟を作成し、USBに保存してPCを起動させ、「Hello,world!」と表示したら成功です。

 

実行ファイルとは、コンピュータがタスクを実行するための解釈可能な命令を含むファイルである

(Wikipedia:https://ja.wikipedia.org/ |実行ファイル)

 

とのことで、CPUが理解できる機械語が書かれているファイルを指します。OSを自作するにあたって、キー入力をどのようにコンピューターが理解するのか学ぶ章です。

私が実際に作成した実行ファイルの一部が以下です。

20231010_blog_3

16進数で1536600行の数字を入力しました。

機械語という言葉を聞いたことはありましたが、「Hello,world!」と表示させるだけなのにこれだけ苦労しないといけない言語だとは思っていませんでした。

人間にとって分かりやすい言語であるPythonC言語のありがたみが分かります。。。

 

学習記録1-1USBがフォーマットできない編(書籍 第1章)

 

さて、作成した実行ファイルを特定の名前でUSBに保存すると、PC起動時に「Hello,world!」が表示されるとのことなのでやってみます。

 

USBにファイルを保存する前に、「USBのフォーマット」が必要になります。

FAT形式にフォーマットしたいので「CentOS7 exFAT フォーマット」で検索しました。

たくさん記事が表示されましたが、みんな揃って「CentOSではデフォルトでexFATは認識しません」とおっしゃいます。

 

私「使えるようにしとけ~い」

サイト「パッケージを入れると使えます!」

私「パッケージを入れるぞ!(インストールコマンド実行)」

PC「そのパッケージは使えません」

私「なんでやねん」

20231010_blog_2

この時点で3時間は経過。

どうやらリポジトリの不整合や依存関係の問題が関係しているかもとのことなので、リポジトリの一時無効化をしました。そしてインストールコマンドを再度実行

#sudo yum install exfat-fuse exfat-utils

エラー: パッケージ: wdpassport-utils-0.2-4.el7.x86_64 (forensics)

要求: rh-python38-python

エラー: パッケージ: hindsight-2023.03-1.el7.x86_64 (forensics)
要求: rh-python38-python

エラー: パッケージ: plaso-20230717-1.el7.x86_64 (forensics)
要求: rh-python38-python

エラー: パッケージ: mac_apt-1.5.0.dev-3.el7.x86_64 (forensics)
要求: libpython3.8.so.rh-python38-1.0()(64bit)

エラー: パッケージ: python3-oletools-0.60.1-2.el7.x86_64 (forensics)
要求: libpython3.8.so.rh-python38-1.0()(64bit)

 

よくわかりませんが、Pythonさんを要求しているみたいです。

リポジトリを一覧表示して正確な名前を確認してみて再度インストールを試みると

PC「パッケージ exfat-fuse は利用できません。」

PC「パッケージ exfat-utils は利用できません。」

PC「エラー: 何もしません」

私「何かして」

 

学習記録1-2:USBフォーマットできた編(書籍 第1章)

 使いたいアプリケーションが標準のリポジトリに含まれていない場合、EPELというリポジトリを使うことで解決される場合があるそうです。

 ということで、

私「EPELパッケージをインストール!(yum実行)」
PC「インストールできません」

 もはやエラーを浴びすぎて驚かなくなりました。

 冷静になって、公式サイトからリポジトリをダウンロードしてみました。

https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/

 格闘し続け、累計30時間が経過して

ようやくUSBをフォーマットできました(泣)

学習記録1-3:実行ファイルが実行できない編(書籍 第1章)

 本来の目的である「実行ファイルを実行する」ですが、

フォーマットしたUSBに実行ファイルを保存しましたが、「Hello,world!」は表示されませんでした。なにか根本的に勘違いしているようなのですが、考え抜いたのでいったん終了します。

 本記事の締め切りぎりぎりまで奮闘しましたがうまくいかなかったので、いったんここまでとさせていただきます。

まだ書籍の第1章も終わっていませんが、リポジトリの概念や記録デバイスの形式についてなど、本筋とに付随して知識が身についた気がします。

ベストは尽くしたので、ベテランの先輩方のお知恵をお借りしたいと思います。

 

ちょっとした反省ですが、具体的なエラーメッセージをもっと詳細に記録していたらいいなと思いました。のちのち復習になりますし、誰かに相談するときに具体的にエラー内容が分からないと相談にも行けません。。

次回の投稿までにはきっと素晴らしいOSができている(といいな)。

お読みいただきありがとうございました。