makefs(8) コマンド MSDOSFS(FAT)実装検討メモ

NetBSDのクロスビルドにおいてインストール用ディスクイメージのファイルシステムを作成するコマンドである makefs(8) に MSDOSFS(FAT)の対応を追加するにあたっての個人的検討メモです。 主に hpcmips, hpcarm, hpcsh のインストール済みイメージで hpcboot.exe を置くためのDOS領域の作成用。 例によって車輪の再発明実装ですが、こういうのをSoC的ネタにすべきなんですかね
1
Izumi Tsutsui @tsutsuii

なんというか、「FATの構造は全部頭の中に入っているから後はデフォルト値の計算だけ考えて後は一気に書き殴る」みたいなビミョーな読みにくさがアレ

2012-01-02 14:57:52
Izumi Tsutsui @tsutsuii

FATの簡単な解説ページとかあるんかな。むかし色々いじったけれど細かいところは忘れた。

2012-01-02 15:02:45
Izumi Tsutsui @tsutsuii

backup boot sector ってなんだ

2012-01-02 15:11:06
Izumi Tsutsui @tsutsuii

用途的にはFAT32いらんのだけど実装しないと怒られるんだろうか

2012-01-02 15:17:39
Izumi Tsutsui @tsutsuii

file system info sector と backup boot sector の場所って決まっているのか任意なのか

2012-01-02 15:18:46
Izumi Tsutsui @tsutsuii

http://t.co/RQE7Gi4M これを落として読めということか

2012-01-02 15:24:41
Izumi Tsutsui @tsutsuii

"Sector number of FSINFO structure in the reserved area..." つーことで file system info sector と backup boot sector の場所は reserved sector の中。

2012-01-02 15:30:47
Izumi Tsutsui @tsutsuii

つーわけで boot sector, reserved sector, FAT×N個 を書くだけ。ボリュームラベル指定時はルートディレクトリの先頭エントリとしてボリュームラベルを書く。FFSなどとは違って先頭だけごそごそすればいいので楽と言えば楽。

2012-01-02 15:32:41
Izumi Tsutsui @tsutsuii

どっちかっつーとオプションをparseする部分のほうがよっぽどめんどいな

2012-01-02 15:33:15
Izumi Tsutsui @tsutsuii

http://t.co/M2diGJaD FATエントリの初期化が果てしなく分かりにくい件

2012-01-02 15:40:59
Izumi Tsutsui @tsutsuii

N88-BASICなどと違いDOS(?)のFATエントリは予約領域は関係なくルートディレクトリ領域以降のデータ格納領域のクラスタ番号のエントリから始まる。よってFATの種類で初期化の内容は決まる。

2012-01-02 15:51:23
Izumi Tsutsui @tsutsuii

FAT32だと3クラスタ分でFAT12,16だと2クラスタ分、ってどこの仕様だ

2012-01-02 15:51:58
Izumi Tsutsui @tsutsuii

クラスタ0,1は常に予約で、FAT32の場合のみルートディレクトリが通常クラスタに割り当てられててそれが通常クラスタ2なのでそこもFATエントリセットが必要ということか。それならそうと分かる初期化コードを書こうよ……

2012-01-02 16:04:53
Izumi Tsutsui @tsutsuii

読みやすさはともかくとして、ソース共用とか考えなければ newfs 部分はほぼそのまま流用できるっぽい。

2012-01-02 16:13:03
isaki @isaki68k

oO( @tsutsuii さんの脳内にFAT12がある間にHumanFSを操るツールを書くべきだろうか…

2012-01-02 16:13:43
Izumi Tsutsui @tsutsuii

@isaki68k DOSフロッピーはまだ十分現役なので誰の脳内にも残っているような

2012-01-02 16:16:43
isaki @isaki68k

@tsutsuii こちらも以前調べてルートディレクトリエントリが読めるまでは行ったんですが、そこらへんで放置…。

2012-01-02 16:19:12
Izumi Tsutsui @tsutsuii

問題はファイルを実際に書き込むところだけど。mtools を読むのがいいのか カーネルの msdosfs_vnops.c あたりを読むのがいいのか

2012-01-02 16:15:38
Izumi Tsutsui @tsutsuii

N88-BASIC((86)なしの方)のフロッピーで mon コマンドの ^D ^R ^W を駆使して手動デフラグとかしたのが懐かしい(そんなネタ誰にも分かりません

2012-01-02 16:18:18
Izumi Tsutsui @tsutsuii

makefsの場合、write once かつインストールイメージ用途なので、フラグメントも特に考慮せず先頭から詰めて割り当てればいいと思うけど、ディレクトリエントリが一杯になった時に拡張する処理がめんどい? それも何も考えず一杯になった時点で空いてるクラスタを新規割り当て?

2012-01-02 16:23:22
Izumi Tsutsui @tsutsuii

起動イメージ用途だと MSDOSFS に hpcboot.exe とカーネルが置ければいいのでサブディレクトリのサポートなんかいらないんだけど、不要な仕様の実装が一番面倒くさい罠

2012-01-02 16:27:13
Izumi Tsutsui @tsutsuii

なんかサクっと流用できるソースないんかな(´・ω・`)

2012-01-02 16:27:53
1 ・・ 4 次へ