2016-05-10 5 views
3

現在、Xillinx Kintex 7カードのC言語でFATシステムをコーディングしようとしています。 MicroBlazeが装備されており、すでに必要な機能のほとんどを作成できました。FAT32ディレクトリごとのファイル数の制限

私が直面している問題は、フォルダの総容量についてです.FAT32では、フォルダには65,000以上のファイルが格納できるはずですが、私が入れたシステム私はフォルダごとに509ファイルに制限されています。私はそれが理由な方法のFAT32の作品の私の理解のだが、ここで私がこれまでに作ってきたものだと思う:

  • 私はMBRで正しいデータを書き込み、フォーマット機能(セクタ0)とボリュームを作成しましたID(私のディスク上のセクタ2048)。
  • 私はルートディレクトリ(セクタ124 148で始まる最初のクラスタ)の内容を書き込む関数を作成しました
  • サイズXのN個のファイルを含む新しいフォルダを作成する関数を作成しました。フォルダの名前はルートディレクトリ(セクタ124148)に書き込まれ、ファイル名は次のクラスタ(セクタ124212にはクラスタサイズが64セクタに設定されているため)に書き込まれます。最後に、セクタ124276から始まる次のクラスタにファイルの内容(単純なカウンタ)が書き込まれます。

ここで、フォルダは1クラスタのサイズ64セクタの容量= 32KBで、ディレクトリに512(マイナス2)のファイルしか作成できません!それから私の質問は:クラスタの数でフォルダのサイズを変更することは可能ですか?現在私は1つのクラスターしか使用していないので、どのように変更するのか分かりません。それはドライブのFATに関連していますか?

ご協力いただきありがとうございます。

注:ドライブを接続するとWindowsが認識し、すべてのファイル(510を超えるファイルを除く)にアクセスして読み取ることができ、Windowsエクスプローラで新しいファイルを作成できます。明らかに私はファイルの作成とフォルダの作成を理解する方法から来ています!

+0

1つのクラスタよりも大きなファイルをどのように処理しますか? – Neil

+0

私はそれを単純にして、すべてのファイルを断片化することを避けようとしました。現在、ファイルは順番に格納され、FATは次のクラスタを直接指しています(ファイル0xFFFFFF0Fの終わりまで6番目から7番目まで)最初にファイルのためのスペースがクラスタ内に確保され、それに応じてFATが書き込まれ、ファイルにデータが書き込まれます。 あなたの質問から、私はフォルダが同じように動作することを理解しています、そうですか?それでは、16クラスタ(約8160ファイル)を予約し、それに応じてFATを設定することは可能ですか? ありがとう! –

答えて

3

FATファイルシステム内のディレクトリは、特別な種類のファイルです。したがって、他のファイルと同じように、この「ファイル」にはより多くのクラスタを使用してください。 FAT32ヘッダの0x2cオフセットと通常をクラスタである時

ルートディレクトリのクラスタ番号が格納されます。これがルートディレクトリの唯一のクラスタである場合、クラスタ2のクラスタマップのエントリには値0x0FFFFFFF(クラスタの終わり)が含まれます。クラスターマップのクラスター3をクラスター2の次のクラスターとして設定した場合(クラスターマップのクラスター2のエントリの値として0x00000003を設定)、ルートディレクトリに2つのクラスター(たとえば、クラスター2と3)を使用できます。ここで、クラスタ3は最後のクラスタ(エントリを0x0FFFFFFFに設定することによって)か、別のクラスタをポイントしてルートディレクトリの領域をさらに大きくすることができます。

クラスタは後続する必要はありませんが、通常は順次読み取りでパフォーマンスが向上します(ボリュームを最適化するとパフォーマンスが大幅に向上することがあります)。

+0

ファイル作成のために作成したものと同じ機能を再現しようとしましたが、すべてが正常に機能しています。 –

関連する問題