OS の勉強を始めました。作ってみるのに若くはなし、ということでみかん本を参考にOSの自作を進めています。
概要
Hello, World! と表示するだけのOSをバイナリとして記述し、
フォーマットしたUSBメモリに保存
BIOS設定をいじった物理PCに挿して起動する
環境
2台の物理パソコンを用意して、開発用と検証用をわけます。
開発用(OSを作るための)PC:Windows 11、WSL上でUbuntu 18.01 (みかん本準推奨)
検証用(自作OSブート用)PC:NEC製パソコン。使わなくなったので検証用にお下がり
手順
1. USBメモリの準備
まず、USBメモリをフォーマットします。
みかん本ではexFAT形式を推奨していますが、私の環境ではFAT形式でフォーマットしないとOSが正しく起動しませんでした。
フォーマットすると中身が全部消えてしまうので、いらないUSBメモリで試してください。
フォーマット手順
USBメモリを開発用PCに挿します。
ファイルエクスプローラーでUSBメモリを右クリックして「フォーマット」を選択。
ファイルシステムを「FAT」に設定してフォーマットを実行します。
exFAT形式だと起動しない場合があるため、必ずFAT形式でフォーマットしてください!
2. バイナリ形式でOSを記述
Hello, World! を表示するだけのOSをバイナリで書きます。
VS Code の"Hexeditor" という拡張機能を使いました。
使い方がわかりにくいんですが、拡張子を".hex" にしたファイルをVS Code で開くと自動的にHexeditorが起動するようになってるようです。
※コードの記述方法についてはみかん本をご参照ください。
3. USBメモリにOSを保存
作成したバイナリファイルをUSBメモリにコピーします。
4. BIOS設定の変更
次に、物理PCのBIOS設定を変更してUSBブートができるようにします。
パソコンの電源を付けるときにF2を連打すると設定メニューが開きますね。
私の環境では以下の設定を行いました:
- Boot Mode をUEFIに指定。これはみかん本の通り。
- 起動優先順位をUSBメモリに変更
私の検証用PCだと、もともとの優先順位1位がUSB CD/DVD、2位がHardDisk OS(Ubuntu)、3位がUSB Hard Diskだったので、初期設定のままではUbuntu が立ち上がって失敗しました。
あと、"Security" タブで"Secure Boot" がEnabled になっているとだめなので、Disable にしてください。
保存して終了します(F10キー)。
USBのフォーマット形式にexFATを選択しているとBIOS設定をどういじっても自作OSが起動しませんでした。FATにフォーマットしなおすとあっけなく成功したので、私の検証用PCがexFATに対応していないだけだったかもしれないです。
5. 起動確認
USBメモリを物理PCに挿して再起動します。うまくいけば、「Hello, World!」と表示されるはずです。
奇妙ですが、起動時の画面の左上に小さく表示されました!

そもそも「起動する」とは?
パソコンの電源ボタンを押せば勝手に起動すると思いますが、OSが起動するのとパソコンに物理的に通電して電源が入るのでは大きく違います。BIOSやOSの関係を勉強しなおしたので記述しておきます。
OS (Windows など)の働きのお陰で、CPUやメモリなどのハードウェアを人間が扱えるようになります。
OSも抽象的に言えばCPUにより実行されるプログラムのひとつ。
CPUはメモリに記憶されているプログラムを実行する。
メモリは電源が切れると中身が空になるようにできているため、起動時はOS含め何も書かれていない。
電源が入るとOSよりも先にBIOSが起動して、メモリにOSの重要部分(カーネル)を読み込む。
CPUがカーネルを読み込んで実行することでOSが起動する。
上記で、電源がなくても記録できる装置にOSを記録しておけば、OSが起動できそうですね。
普段起動されるOSは、HDDやSDSに記録された状態です。今回はそれをUSBに記録して、BIOSが読みだす優先順位を変えることで、USB側を起動した、ということになります。
ただ、「電源を入れるとBIOSが起動して」とはいうものの、OSが立ち上がってない状態でBIOSがどうやって働くのかについては、まだよくわからないです。
みかん本には、次のように書いてあります。
メインメモリと同様に扱えて電源を切っても消えないメモリ (ROM)にBIOSを書き込んでおき、CPUがそのままBIOSを機実行できる仕組みがパソコンに備わっています。
とりあえず今はこの理解レベルで先に進めたいと思います。
まとめ
この記事では、簡単なOSを作成して物理PCで起動するまでの手順を紹介しました。特に、USBメモリのフォーマット形式に注意が必要です。ぜひ試してみてください!
