OS作成 - ファイルシステム編
FD上のマップをどうしようかと悩み中。
いろいろ調べてみるとLinuxのレスキューディスクのように1枚のFDにカーネルとファイルシステムを入れる場合、vmlinuz(kernel)とinitrd(FS)を別々のファイルとして用意し、GRUBやLILOのようなブートローダーがそのディスクのフォーマットを理解(Ext2などを理解し)/boot/vmlinuzからはカーネルを、/boot/initrdからはファイルシステムをそれぞれロードしinitrdをルートファイルシステムとして「メモリ上」に配置している。-
- 追記 GRUBやLILOを入れる場合、カーネルを認識するための小さなファイルシステムを用意している(ext2などで)。GRUB、LILOを入れない場合はファイルシステムを用意せずにカーネル直後にinitrdのようなファイルシステムを直結させている。
今回はメモリ上のみで操作するようなファイルシステムは考えていないのでFDを一つのファイルシステムとしてカーネルも読み込みたいんだけど、その場合GRUBの代わりになる部分「bootmiddle.S」でファイルシステムを理解するコードを書かなくてはいけなくなるのでかなり面倒な事になる。
別な方法としてはFD上に以下のようなマップ
ブート | セカンドブート | カーネル | ファイルシステム |
bootacient | bootmiddle | kernel | ext3 |
のようにカーネルの直後にファイルシステムを配置して完全に別個にしてカーネル自体はファイルとして扱わない事にする方法も考えられる。
結局ファイルシステムは完全に「ソフトウェア」による制御なんで好きなように出来るんだけど果たしてそれが正しい配置なのかどうかがわからない。
- 追記 別にどう配置してもいいような気がしてきた。