自作カーネルにMinixのファイルシステム(V2)実装できました。ソースはいつもながらこちらです。
主要な実装はfs/minix/minixfs.cの以下の関数です。
- minix_get_sb():スーパーブロックを読む
- read_file():指定したファイルのデータを取得
- find_file():ファイル名からファイルを検索して、そのinodeを返す
呼び出しかたがまだ、テストコードな域ですが、こんな感じで呼び出して、
read_file(vmount, &minix_sb, "/dir_a/dir_b/foobar.txt");
こんな結果になります。
ファイルシステム上のfoobar.txtは以下のようになってます。
00036440 07 00 66 6f 6f 62 61 72 2e 74 78 74 00 00 00 00 |..foobar.txt....| 00036450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00036800 04 00 2e 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00036810 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00036820 01 00 2e 2e 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00036830 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00036840 05 00 64 69 72 5f 42 00 00 00 00 00 00 00 00 00 |..dir_B.........| 00036850 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00036c00 05 00 2e 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00036c10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00036c20 04 00 2e 2e 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00036c30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00037000 41 42 43 44 45 0a 00 00 00 00 00 00 00 00 00 00 |ABCDE...........| 00037010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00037400 66 6f 6f 62 61 72 0a 00 00 00 00 00 00 00 00 00 |foobar..........| 00037410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|