makefs(8) コマンド MSDOSFS(FAT)実装検討メモ
なんというか、「FATの構造は全部頭の中に入っているから後はデフォルト値の計算だけ考えて後は一気に書き殴る」みたいなビミョーな読みにくさがアレ
2012-01-02 14:57:52file system info sector と backup boot sector の場所って決まっているのか任意なのか
2012-01-02 15:18:46"Sector number of FSINFO structure in the reserved area..." つーことで file system info sector と backup boot sector の場所は reserved sector の中。
2012-01-02 15:30:47つーわけで boot sector, reserved sector, FAT×N個 を書くだけ。ボリュームラベル指定時はルートディレクトリの先頭エントリとしてボリュームラベルを書く。FFSなどとは違って先頭だけごそごそすればいいので楽と言えば楽。
2012-01-02 15:32:41N88-BASICなどと違いDOS(?)のFATエントリは予約領域は関係なくルートディレクトリ領域以降のデータ格納領域のクラスタ番号のエントリから始まる。よってFATの種類で初期化の内容は決まる。
2012-01-02 15:51:23クラスタ0,1は常に予約で、FAT32の場合のみルートディレクトリが通常クラスタに割り当てられててそれが通常クラスタ2なのでそこもFATエントリセットが必要ということか。それならそうと分かる初期化コードを書こうよ……
2012-01-02 16:04:53問題はファイルを実際に書き込むところだけど。mtools を読むのがいいのか カーネルの msdosfs_vnops.c あたりを読むのがいいのか
2012-01-02 16:15:38N88-BASIC((86)なしの方)のフロッピーで mon コマンドの ^D ^R ^W を駆使して手動デフラグとかしたのが懐かしい(そんなネタ誰にも分かりません
2012-01-02 16:18:18makefsの場合、write once かつインストールイメージ用途なので、フラグメントも特に考慮せず先頭から詰めて割り当てればいいと思うけど、ディレクトリエントリが一杯になった時に拡張する処理がめんどい? それも何も考えず一杯になった時点で空いてるクラスタを新規割り当て?
2012-01-02 16:23:22起動イメージ用途だと MSDOSFS に hpcboot.exe とカーネルが置ければいいのでサブディレクトリのサポートなんかいらないんだけど、不要な仕様の実装が一番面倒くさい罠
2012-01-02 16:27:13