これは、同人誌「バイナリ生物学入門」で紹介したPoC実装です。
設計や実行結果などは同人誌の方で説明していますのでそちらをご覧ください。
本プログラムはDebianあるいはUbuntuのLinux環境上でビルド/実行可能です。(筆者の環境は「Debian GNU/Linux 9.11 (stretch)」)
ビルド/実行には以下のパッケージが必要です。
- build-essential
- qemu-system-x86
- ovmf
以下のようにインストールしてください。
$ sudo apt install build-essential qemu-system-x86 ovmfまた、このプログラムでは、ovmfパッケージに含まれるファームウェアバイナリがホームディレクトリ直下に配置されていることを想定しています。
ovmfパッケージインストール後、以下のコマンドでホームディレクトリ直下にファームウェアバイナリを配置してください。
$ cp -r /usr/share/OVMF ~/以下のコマンドでビルドできます。
$ cd intelligent_life_in_the_binary_samples/
$ makeビルドが成功すると、fsというディレクトリに以下のようにファイルが配置されています。
intelligent_life_in_the_binary_samples/
|-- ...
`-- fs/
|-- efi/
| `-- boot/
| `-- bootx64.efi
|-- fs.img
`-- kernel.bin
同梱のMakefileにQEMU実行用のターゲットrunを用意していますので、以下のコマンドで実行可能です。
$ make runfsディレクトリ以下をUSBフラッシュメモリ等のストレージへコピーし、そのストレージから起動することで実機での実行も可能です。(ただし、筆者は自分のPCでしか試せていないため、もしかしたら上手く動作できないPCもあるかもしれません。)
なお、ストレージは予めFATあるいはGPTでフォーマットしておいてください。(ここで使用している自作のブートローダーはUEFI上で動作するのですが、UEFIはFATあるいはGPTのファイルシステムを認識するためです。)
同梱のbootx64.efiとkernel.binという2つのバイナリが、それぞれ「ブートローダー」と「カーネル」です。
これらの実装については、下記の同人誌で説明しています。
- 「フルスクラッチで作る!UEFIベアメタルプログラミング」シリーズ
- PCのUEFIファームウェアを直接制御してブートローダーを作る
- パート1: UEFIの機能を呼び出してOSっぽいものを作る
- パート2: ブートローダーとしてLinuxをブートする等のTIPS本
- 「フルスクラッチで作る!x86_64自作OS」シリーズ
- ブートされる側であるカーネルを作る
- パート1: ベースとなるシングルタスクOSを作る
- パート2: スケジューラを実装しマルチタスク対応
- パート3: システムコールを実装しカーネルとアプリをバイナリレベルで分離
- パート4: NICドライバを実装しイーサネットフレーム送受信
- パート5: マルチコア対応
これらも全て筆者のウェブページで公開しています。