USFilesPlus

TM

Filesystem Utility
User’s Manual
Revision 1.02
July 2009

USFilesPlus Filesystem Utility User's Manual

はじめに
この度は、USFilesPlus Filesystem Utility をお買い上げ頂き有り難うございます。
このマニュアルは、USFilesPlus Filesystem Utility の導入をスムーズに行って頂く為のマニュアルです。
USFilesPlus の詳細につきましては、User’s Manual、USFilesPlus Quick Start Guide をご覧く
ださい。

所有権についての注意事項：
USFilesPlus は米国 Lantronix 社（旧 USSoftware 社）との業務提携により、（株）日新シ
ステムズが独自に製品化したものです。
このマニュアルとソフトウェアには、（株）日新システムズとのライセンスの中で規定されているものを除いて、コピーおよび開示は禁じられております。このマニュアルに含まれている内容については予告無しに変更する事があり、（株）日新システムズは、その内容を保証するものではありません。記載の会社名、商品名は各社の登録商標です。

1

USFilesPlus Filesystem Utility User's Manual

改訂履歴

2

日付

Revision

改訂内容

2004 年 7 月 21 日

1.00

初版

2006 年 3 月 27 日

1.01

Ver.3.10 に対応

2009 年 7 月 21 日

1.02

Ver.3.21 に対応
SD フォーマット機能に関して追記USFilesPlus Filesystem Utility User's Manual

目
1.

次

USFilesPlus Filesystem Utilityについて........................................................................................... 5
1.1.
1.2.

USFilesPlus Filesystem Utilityとは............................................................................................ 5
USFilesPlus Filesystem Utilityの制限事項................................................................................ 62.

インストール...................................................................................................................................... 7

3.

設定...................................................................................................................................................... 8
3.1.
3.2.
3.3.
3.4.

Config.makの設定 ...................................................................................................................... 8
Compiler.makの設定 ................................................................................................................ 10
Sio.makの設定.......................................................................................................................... 11
devtab.c の設定........................................................................................................................ 12

4.

コンパイル........................................................................................................................................ 13

5.

ライブラリのビルド........................................................................................................................ 136.

詳細内容............................................................................................................................................ 14
6.1.
diskdump機能 ........................................................................................................................... 14
6.1.1.
概要................................................................................................................................... 14
6.1.2.
getd_total_sects ................................................................................................................. 14
6.1.3.
mt_diskdump..................................................................................................................... 15
6.1.4.
diskdumpサンプルプログラム ....................................................................................... 15
6.2.
format機能 ................................................................................................................................ 16
6.2.1.
概要................................................................................................................................... 16
6.2.2.
フォーマット形式........................................................................................................... 16
6.2.3.
クラスタサイズについて............................................................................................... 16
6.2.4.
ボリュームラベル........................................................................................................... 17
6.2.5.
SDフォーマットについて.............................................................................................. 18
6.2.6.
mt_format.......................................................................................................................... 19
6.2.7.
formatサンプルプログラム ............................................................................................ 20
6.3.
scandisk機能 ............................................................................................................................. 21
6.3.1.
概要................................................................................................................................... 21
6.3.2.
エラーと修復内容........................................................................................................... 21
6.3.3.
mt_scandisk....................................................................................................................... 23
6.3.4.
scandiskサンプルプログラム ......................................................................................... 256.4.
電源断対策 ............................................................................................................................... 26
6.4.1.
概要................................................................................................................................... 26
6.4.2.
fopen( ) 時のscandisk 実行............................................................................................. 26
6.4.3.
ファイルリネーム時のデータ保証改善 ....................................................................... 27
3

USFilesPlus Filesystem Utility User's Manual

6.4.4.
エントリ作成時の属性フラグ .......................................................................................28
6.4.5.
キャッシュデータ書き込み順の変更............................................................................28
6.4.6.
設定 ...................................................................................................................................28
6.5.
ライトスルーモード................................................................................................................29
6.5.1.
概要 ...................................................................................................................................29
6.5.2.
設定 ...................................................................................................................................30

4

USFilesPlus Filesystem Utility User's Manual

1. USFilesPlus Filesystem Utility について
1.1. USFilesPlus Filesystem UtilityとはUSFilesPlus Filesystem Utility は、下表に示す機能を実装するための
USFilesPlus FAT ファイルシステム専用のユーティリティです。
機能diskdump 機能
format 機能
scandisk 機能
電源断対応

ライトスルーモード

概要
ディスク内のダンプデータの取得／書込を行います。
デバイスの初期化（フォーマット）を行います。
デバイスの不整合の修正を行います。
FAT のクリーンフラグを使用して、電源断後の再起動時にscandisk の実行を行います。
ファイルリネーム時の電源断によるリネーム途中のファイルの消滅防止を行います。
バッファ（キャッシュ）を使用せず、直接デバイスに書き込みを行います。

本ユーティリティは、C 言語のソースコード提供となっており、各機能は、diskdump、format、scandisk は C 言語の関数として、また電源断対応およびライトスルーモードは、メイクファイル等の設定により FAT ファイルシステム内に実装する構成となっております。下図にモジュール構成イメージ図を記載します。

アプリケーション

USFilesPlus
ANSI C File I/O

Filesystem Utility
電源断対応

scandisk

ライトスルーモード

diskdump
formatFAT Filesystem

デバイスドライバ

ストレージデバイス
5

USFilesPlus Filesystem Utility User's Manual

1.2. USFilesPlus Filesystem Utilityの制限事項
・本ユーティリティは、USFilesPlus Ver.3.10 以降でのみ動作します。
・本ユーティリティの保証範囲は、USFilesPlus 上での動作のみとします。
・他のシステムにて電源断および不正書き込みが行われたストレージデバイスでは、電源断対応処理が正常に動作しない場合があります。
・電源断時に書き込みを行っていたファイルのデータは消滅する場合があります。

6

USFilesPlus Filesystem Utility User's Manual

2. インストール
USFilesPlus Filesystem Utility をインストールする前に、下記の 2 つの必要事項をチェッ
クしてください。
※以降に示す手順は、開発環境を Windows2000/XP 上とした場合の説明です。
また、作業用ドライブを C ドライブ、CD-ROM ドライブを E ドライブとしています。

開発環境に Opus make がインストールされているかどうか。
USFilesPlus の makefile は Opus make を使用して動作するように設計されています。
USFilesPlus 製品 CD-ROM があるかどうか。

上記の条件がそろっている場合、下記の手順でインストールを行います。
1.

USFilesPlus の CD-ROM を CD-ROM ドライブ（E:）に挿入してください。

2.

USFilesPlus FAT ファイルシステム（E:¥disk1¥usf ディレクトリ下のファイル）を
全て C:¥ussw ディレクトリ以下にコピーします。また、VFAT（E:¥disk1¥usfvfat）、
FAT32（E:¥disk1¥usf32）等が必要な場合は、各ディレクトリ下のファイルを
全て C:¥ussw ディレクトリ以下にコピーします。

3.

USFilesPlus Filesystem Utility（E:¥disk1¥usfut ディレクトリ下のファイル）を
全て C:¥ussw ディレクトリ以下にコピーします。

4.

BSP ソースコード（E:¥disk2¥i8086 ディレクトリ下のファイル）を全てC:¥ussw ディレクトリ下にコピーします。
（ここでは、i8086 プラットフォームとして説明しています。）

5.

C:¥ussw ディレクトリ下の属性を書き込み可能に変更します。

7

USFilesPlus Filesystem Utility User's Manual

3. 設定
USFilesPlus にて、お客様の環境にて開発を可能にするには、３つのメイクファイル、「Config.mak」、「Compiler.mak」、「sio.mak」および「devtab.c」を編集する必要があります。

3.1. Config.makの設定
USFilesPlus をインストールしたディレクトリの直下にある「Config.mak」を下記のように編集します。
1.

USFilesPlus をインストールしたディレクトリを指定するために、USROOTDIR 宣言
部分をインストールしたディレクトリに変更します。ここでは、インストールディ
レクトリを「C:¥ussw」としています。
USROOTDIR = C:¥ussw

2.

CPU 宣言部分にターゲットの CPU を指定します。先頭の「#」は、コメントアウト
シンボルを示しており、先頭の「#」を消去することで宣言が有効となり、先頭に「#」をつけることで宣言が無効となります。
ここでは、「i8086」をターゲットの CPU として指定します。
CPU = i8086# Intel real mode,
COMPILERS: borland, msoft, cadul

3.

COMPILER 宣言部分にコンパイラを指定します。
ここでは、コンパイラを Borland C/C++として指定します。
COMPILER = borland # Borland C/C++

8

USFilesPlus Filesystem Utility User's Manual

4.

PRODLIST 宣言部分に使用する機能を指定します。
最低限 USFilesPlus FAT ファイルシステムが必要ですので、「#」にてコメントアウト
されている場合はこれを除去してください。
FAT32 プロダクトが必要な場合は、同様にコメントアウトを除去してください。
また、これら以外の必要のないプロダクトはコメントアウトしてください。
PRODLIST += usf
PRODLIST += usf32

5.

PRODLIST 宣言部分に USFilesPlus Filesystem Utility 宣言を追記します。
PRODLIST += usfut

6.

# USFiles Filesystem Utility

RTOS 宣言部分に使用する RTOS を指定します。
ここでは RTOS を使用しない「none」を指定します。
RTOS = none

7.

# USFiles file system# USFiles FAT32 support# No RTOS used

TRACE_DEBUG 宣言部分にデバッグトレース出力モードを指定します。デフォルト
は、３が指定されています。ターゲットのデバッグトレース出力をなしにするには０を、冗長な出力が必要な場合は９を指定してください。
TRACE_DEBUG = 3

ここで設定した内容にしたがって、U S Software のライブラリ「ussw.lib」がビルドされます。その他の詳細な宣言については、「USFiles User’s Manual」を参照してください。

9

USFilesPlus Filesystem Utility User's Manual

3.2. Compiler.makの設定
USFilesPlus は、コマンドラインでのコンパイラ、アセンブラ、リンカ、ライブラリア
ン等を必要とします。
<USFilesPlus インストールディレクトリ>¥config¥<CPU>¥<コンパイラ>ディレクトリ
下にある「Compiler.mak」を編集して、これらの開発ツールを適切に指定する必要があります。CPU およびコンパイラディレクトリは「Config.mak」にて指定した CPU および
コンパイラとなります。
その他のターゲットでのユーザオプションには、違ったオプションが存在します。
このオプションは、ボードレベルのサポートとなり、開始アドレス、ベースアドレス、
クロックレート、エンディアン等々の設定があります。
ここで、最も重要な項目は、ツールチェーンパスの宣言部分です。
PTH にツールチェーンがインストールされているパスを指定します。
ここでは、Borland C/C++が C ドライブの c:¥bc5 にインストールされているものとして、
PTH を下記のように指定します。
PTH = C:¥bc5# Where the compiler is

コンパイラ、アセンブラ、リンカ、ライブラリアンについても、PTH に基づいて指定され、下記の項目に宣言しています。必要であれば、これらの部分も編集してください。
CC
AS
LNK
LIBR

：コンパイラ：アセンブラ：リンカ：ライブラリアン

また、各ツールチェーンのオプションも下記の項目にて指定してください。
CFLAGS
AFLAGS
LFLAGS

10：コンパイラオプション：アセンブラオプション：リンカオプション

USFilesPlus Filesystem Utility User's Manual

3.3. Sio.makの設定
USFilesPlus は、詳細機能選択を、<USFilesPlus インストールディレクトリ>¥config¥sio.mak
を編集することで行います。ここでは、C:¥ussw¥config¥sio.mak となります。

1.

USFilesPlus VFAT を使用する場合、VFAT 宣言を１に変更します。
デフォルトは０となっています。
## Set VFAT = 1 if long file names and/or Joliet extensions are desired.
#
VFAT = 0# 0 No long file name support# 1 Include long file names

2.

USFilesPlus にて、漢字コード（Shift-JIS）を使用する場合、FAKEUNICODE 宣言を０に変更します。デフォルトは１となっています。
## Set FAKEUNICODE = 0 if you want Kanji support with long file names#
FAKEUNICODE = 1# 0 Kanji supported in Unicode long file names# 1 Only ASCII supported in Unicode long file names

3.

ライトスルーモードを使用する場合、WRITETHROUGH 宣言を１に変更します。
デフォルトは０となっています。
## Set WRITETHROUGH = 1 if you want writing through buffers mode#
WRITETHROUGH = 0# 0 Write through mode OFF# 1 Write through mode ON

11

USFilesPlus Filesystem Utility User's Manual

3.4. devtab.c の設定
ストレージデバイス情報の宣言を＜USFilesPlusインストールディレクトリ＞¥siosrc¥devtab.c
ファイルに記載する必要があります。
設定方法および詳細な宣言については、「USFilesPlus Quick Start Guide」および「USFiles User’s Manual」を参照してください。

12

USFilesPlus Filesystem Utility User's Manual

4. コンパイル
前述の通り、USFilesPlus はライブラリおよびテストプログラムを作成するためにOpus make ユーティリティを使用します。
その他の make ユーティリティを使用する場合は、Opus make の実行名部分を宣言しなおす必要があります。違ったアプローチとしては、簡単なバッチファイルを作成する方法があります。この場合、make ユーティリティのコマンドラインオプションに留意する必要があります。
通常、makefile はライブラリをコンパイルするようになっています。
特定のプログラムをコンパイルしたい場合は、make コマンドの引数にプログラム名を指定してください。また、全てのライブラリを削除したい場合は、make コマンドの引数として「clean」と指定してください。この引数を指定することで、ライブラリファイル、
オブジェクトファイル、実行ファイル、マップファイルを全て削除します。
なお、詳細については、「USFilesPlus Quick Start Guide」および「USFiles User’s Manual」を参照してください。

5. ライブラリのビルド
config.mak、compiler.mak および sio.mak が正しく指定されていれば、USFilesPlus ライ
ブラリをビルドすることができます。ビルドは、下記の手順にて行います。
1.

USFilesPlus がインストールされているディレクトリに移動します。
ここでは、「c:¥ussw」に USFilesPlus がインストールされているものとします。
c:¥>cd2.

ussw

make コマンドを実行してください。
ここでは、make コマンドを「make」とします。
c:¥ ussw >make13

USFilesPlus Filesystem Utility User's Manual

6. 詳細内容
以降に USFilesPlus Filesystem Utility の詳細について記載します。

6.1. diskdump機能
USFilesPlus Filesystem Utility での diskdump 機能に関する詳細を以下に記載します。

6.1.1. 概要
diskdump 機能とは、ストレージデバイスの特定論理セクタ位置からのダンプデータ取得／書き込みを行う機能です。この操作を行うために、USFilesPlus Filesystem Utility では、以降に示す２つの関数があります。

6.1.2. getd_total_sects
関数名
getd_total_sects

宣言
uint32 getd_total_sects(const char *drive)

引数
drive

デバイステーブルに指定されているドライブ文字

戻り値
０以外の数値０

正常終了（全セクタ数を返します。）
異常終了（errno にエラー情報が設定されます。）

説明
drive にて指定したストレージデバイス上の全論理セクタ数の取得を行います。

ファイル＜USFilesPlus インストールディレクトリ＞¥usfut¥diskdump.c

14

USFilesPlus Filesystem Utility User's Manual

6.1.3. mt_diskdump
関数名
mt_diskdump

宣言
int mt_diskdump(const char *drive, uint16 options,
uint32 lsect, byte *buf, int len)

引数
drive
options

デバイステーブルに指定されているドライブ文字
オプションフラグ
オプションフラグ
DMP_OPT_READ
DMP_OPT_WRITEDMP_OPT_MBR

lsect
buf
len

詳細
ダンプデータの取得を行います。
ダンプデータの書き込みを行います。
MBR（Master Boot Record）領域を操作可能にします。

開始論理セクタ
ダンプデータバッファへのポインタ
ダンプデータバッファのサイズ（bytes）

戻り値
0 以上の数値－１

正常終了（取得したダンプデータのバイト数を返します。
）
異常終了（errno にエラー情報が設定されます。）

説明
drive にて指定したストレージデバイスにおいて、lsect にて指定した論理セク
タを起点として、ダンプデータの取得および書き込みを行います。

ファイル＜USFilesPlus インストールディレクトリ＞¥usfut¥diskdump.c

6.1.4. diskdump サンプルプログラム
diskdump にはサンプルプログラムがあり、サンプルプログラムのソースファイルは＜USFilesPlus インストールディレクトリ＞¥appsrc ディレクトリ下にある「dmptest.c」となっています。

15

USFilesPlus Filesystem Utility User's Manual

6.2. format機能
USFilesPlus Filesystem Utility での format 機能に関する詳細を以下に記載します。

6.2.1. 概要
format 機能とは、ストレージデバイスの初期化を行う機能です。
この操作を行うために、USFilesPlus Filesystem Utility では、mt_format 関数を使用します。

6.2.2. フォーマット形式
FAT のフォーマット形式には、大きく分けて「標準フォーマット」、「物理フォーマット」の 2 種類存在し、標準フォーマットにもクラスタチェックを行う／行わない等の種別があります。よって、USFilesPlus Filesystem Utility としては下表に示す種別を設けることで、
フォーマット形式の分類を行います。
BPB 初期化
FAT 初期化
ルートディレクトリ
領域初期化
クラスタチェック
物理フォーマット

通常フォーマット○○○

クイックフォーマット
△※１○○

フルフォーマット
○
○
○

×
×

×
○
×
○
○：処理を行う、×：処理を行わない※１ FAT12/16 の場合は、BPB のボリュームシリアル ID およびボリュームラベルのみを変更します。また、FAT32 の場合は、これに加えてディスク空きクラスタ数を変更します。

また、ハードディスク等の ATA デバイスにおいては、メディアメーカー毎に物理フォーマット形式が異なるため、USFilesPlus のサンプルデバイスドライバ（BIOS／LBA デバ
イスドライバ）では format はインプリメントされていません。
これらのことから、USFilesPlus Filesystem Utility での物理フォーマット処理は、デバイ
スドライバの format を呼び出す構成としております。
したがいまして、実際には、デバイスドライバの format がインプリメントされていな
い場合、物理フォーマットは行われません。

6.2.3. クラスタサイズについて
ハードディスク（ATA デバイス）に対してフォーマットを行った場合は、MBR（Master Boot
Record）または EBR（Extended Boot Record）からハードディスクのパーティションに割り当てられたセクタ数（論理セクタ数）を取得することで、クラスタサイズを決定します。
また、FAT タイプは、システム ID をもとに決定します。
FAT タイプ

16システム ID

FAT12

0x01

FAT16

0x04、0x06、0x0e

FAT32

0x0b、0x0c

USFilesPlus Filesystem Utility User's Manualシステム ID に対応した FAT タイプの最大セクタ数よりも取得したセクタ数が大きい場
合は、最大セクタ数からクラスタサイズを計算します。
最大セクタ数は、FAT タイプから求められ、各 FAT タイプの最大クラスタサイズを超えないようにクラスタあたりのセクタ数を計算します。
最大クラスタサイズは、FAT12 は 4085（212-11）、FAT16 は 65525（216-11）と規定されています。FAT32 の最大クラスタ数は 262144（218）～67108853（226 - 11）の間でディス
クサイズ毎に決定します。ディスクサイズ毎のクラスタサイズ・クラスタあたりのセク
タ数、およびクラスタサイズ・最大クラスタ数をそれぞれ下表に記載します。
クラスタサイズ /クラスタあたりのセクタ数
ディスクサイズ

FAT12

16MB 未満

4KB(4096bytes) /8

FAT16
-

16～127MB

2KB(2048bytes) /4

128～255MB

4KB(4096bytes) /8

256～511MB

8KB(8192bytes) /16

512～1023MB

16KB(16384bytes) /32

1024～2047MB
2～4GB 未満-FAT32

32KB(32768bytes) /64-

4KB(4096bytes) /8

4～8GB 未満
8～16GB 未満-

8KB(8192bytes) /16

16～32GB 未満

16KB(16384bytes) /32

32GB 以上

32KB(32768bytes) /64

ディスクサイズクラスタサイズ262144（218）512～1023MB
1024～2047MB
2～4GB 未満最大クラスタ数

4KB(4096bytes) /8

524288（219）1048576（220）4～8GB 未満
8～16GB 未満

8KB(8192bytes) /16

16～32GB 未満

16KB(16384bytes) /32

32～64GB 未満

32KB(32768bytes) /64

：

：

：

512GB～1TB 未満

32KB(32768bytes) /64

33554432（225）

1～2TB 未満32KB(32768bytes) /64

67108864（226）2097152（221）6.2.4. ボリュームラベル
ボリュームラベルの設定は、BPB（Bios Parameter Block）のボリュームラベルとルート
ディレクトリ領域の最初のエントリにボリュームラベルのエントリを追記することで行います。ボリュームラベルは、11 bytes まで記載可能ですが、Shift-JIS の全角文字は 5 文
字までとし、11 bytes 目が全角文字の先頭であった場合はエラーとなります。

17

USFilesPlus Filesystem Utility User's Manual

6.2.5. SD フォーマットについてバージョン 3.21 より、SD アソシエーションに準拠した SD フォーマットにも対応しました。但し、使用する場合は SD ドライバおよび、SPI ドライバが必要になります。また、物理フォーマットに関しましては、ご使用の SD ドライバおよび、SPI ドライバが
ERASE コマンドに対応している場合に限ります。
尚、本 SD フォーマットのクイックフォーマットは、既存のフォーマットとは異なり、無条件で MBR の各パラメータの算出を行い、正常な値に書き換えます。
弊社より提供しているサンプルの SD ドライバの対応状況は下記になります。

SPI ドライバ
標準ホストコントロータ対応
SD ドライバ
TE4301/4300 ※通常
フォーマット○○クイック
フォーマット○○フル
フォーマット
○
○

○

○

×

※ 東京エレクトロンデバイス株式会社製 TE4300 ファームウェア及び TE4301 ファーム
ウェアに対応したドライバです。

18

USFilesPlus Filesystem Utility User's Manual

6.2.6. mt_format
関数名
mt_format

宣言
int mt_format(const char *drive, uint16 option, char *label)

引数
drive
option

デバイステーブルに指定されているドライブ文字
オプションフラグ
オプションフラグ
FMT_OPT_NORMAL
FMT_OPT_QUICKFMT_OPT_UNCON
FMT_OPT_INTERACTIVE
FMT_OPT_ACTIVE
FMT_OPT_IS_FDD
FMT_OPT_IS_SD

詳細
通常フォーマットを行います。
クイックフォーマットを行います。
フルフォーマットを行います。
Character I/O を使用して対話形式でフォーマットを実行します。
アクティブドライブとしてフォーマット
を実行します。
1.44MB フロッピーディスクとして
フォーマットを実行します。
SD カードとしてフォーマットを実行しま
す。

label

ボリュームラベル文字列（最大 11 bytes）
ボリュームラベルが必要ない場合は、NULL を指定します。

0
－１

正常終了
異常終了（errno にエラー情報が設定されます。）

戻り値

説明
drive にて指定した書き込み可能なストレージデバイスに対して options に指定した内容で初期化を行います。また、ボリュームラベル名は、label に指定
します。

ファイル
＜USFilesPlus インストールディレクトリ＞¥usfut¥format.c

19

USFilesPlus Filesystem Utility User's Manual

6.2.7. format サンプルプログラム
format にはサンプルプログラムがあり、サンプルプログラムのソースファイルは＜USFilesPlus インストールディレクトリ＞¥appsrc ディレクトリ下にある「fmttest.c」となっています。

20

USFilesPlus Filesystem Utility User's Manual

6.3. scandisk機能
USFilesPlus Filesystem Utility での scandisk 機能の詳細を以下に記載します。

6.3.1. 概要
scandisk 機能とは、FAT ファイルシステムとして不正な状態となっているストレージデ
バイスを修復する機能です。この操作を行うために、USFilesPlus Filesystem Utility では、
mt_scandisk 関数を使用します。

6.3.2. エラーと修復内容
FAT ファイルシステムとして、下表に示すファイルシステム異常に関連する様々なエラーが存在します。USFilesPlus Filesystem Utility では、それぞれのエラーに対して修復が行えるように、エラー毎に mt_scandisk の修復オプションを設けています。
エラー内容

エラーコード（errno）

scandisk 修復オプション

FAT1 と FAT2 が異なる場合

EBADFATSCN_OPT_EBADFAT

メディアディスクリプタが不正

EMEDIADESCSCN_OPT_EMEDIADESC

ディレクトリ構造が不正

EDIRTREE

SCN_OPT_EDIRTREE

short エントリ名が不正

ESNAMESCN_OPT_ESNAME

long エントリ名が不正

ELNAMESCN_OPT_ELNAMEEBIGPATHSCN_OPT_EBIGPATH

EENTRYSIZESCN_OPT_EENTRYSIZE

エントリ内のクラスタ番号が不正

ECLUSTNUMSCN_OPT_ECLUSTNUM

FAT チェーンが不正

ECLUSTLINKSCN_OPT_ECLUSTLINK

破損クラスタがあった場合

ELOSTCLUSTSCN_OPT_ELOSTCLUST

破損クラスタを保存する際、ルートディレクト

ERDFULLSCN_OPT_ERDFULL

クロスリンクがあった場合

ECROSSLINKSCN_OPT_ECROSSLINK

クロスリンクの修復時にディスクに空きがない

EDSKFULSCN_OPT_EDSKFUL

空き領域が不正（FAT32 のみ）

EFREECLUSTSCN_OPT_EFREECLUST

long エントリと short エントリのチェックサムがEDIRCHKSUM

SCN_OPT_EDIRCHKSUMELINKENDSCN_OPT_ELINKEND

long エントリが 256 文字以上ある場合
FAT ：パスが 80 文字以上ある場合
VFAT：パスが 256 文字以上ある場合エントリ内のファイルサイズが不正およびディレクトリエントリのサイズが 0 でない場合

リエントリに空きがない場合

場合

異なる場合
ディレクトリエントリ内のファイルサイズとFAT チェーン数が異なる場合

21

USFilesPlus Filesystem Utility User's Manual

これらの修復オプションに加えて、以下のオプションを付加することで様々な設定にてscandisk を実行することが可能です。
オプション

SCN_OPT_CHECKONLY
SCN_OPT_INTERACTIVESCN_OPT_SAVESCN_OPT_SURFACE

詳細
エラーチェックのみを行い、修復は行いません。
Character I/O を使用して対話形式で scandisk を実行します。
破損クラスタをファイルに保存します。
クラスタスキャンを実行します。

また、全ての修復オプションを簡単に指定したり、一般的なオプションを指定した
オプション
SCN_OPT_FORCESCN_OPT_AUTOFIX

詳細
全てのエラーを自動的に修復します。
特定のエラーを自動的に修復します。

を設けることでより簡単に指定できるようにしております。
SCN_OPT_FORCE、SCN_OPT_AUTOFIX を指定した場合に修復される内容を下表に記載
します。

22

scandisk 修復オプション
SCN_OPT_EBADFATSCN_OPT_FORCESCN_OPT_AUTOFIX○○SCN_OPT_EMEDIADESC○○SCN_OPT_EDIRTREE○○

SCN_OPT_ESNAME○○

SCN_OPT_ELNAME○○SCN_OPT_EBIGPATH○×

SCN_OPT_EENTRYSIZE○○SCN_OPT_ECLUSTNUM○○SCN_OPT_ECLUSTLINK○○SCN_OPT_ELOSTCLUST○○SCN_OPT_ERDFULL○×

SCN_OPT_ECROSSLINK○○SCN_OPT_EDSKFUL○×

SCN_OPT_EFREECLUST○○SCN_OPT_EDIRCHKSUM○○

SCN_OPT_ELINKEND○○USFilesPlus Filesystem Utility User's Manual

6.3.3. mt_scandisk
関数名
mt_scandisk

宣言
int mt_scandisk(const char * drive, uint32 options)

引数
drive
option

デバイステーブルに指定されているドライブ文字
オプションフラグ

オプションフラグ
SCN_OPT_FORCESCN_OPT_AUTOFIXSCN_OPT_CHECKONLY
SCN_OPT_INTERACTIVESCN_OPT_SAVESCN_OPT_SURFACE

詳細
全てのエラーを自動的に修復します。
特定のエラーを自動的に修復します。
エラーチェックのみを行います。
Character I/O を使用して対話形式でスキャンディ
スクを実行します。
破損クラスタをファイルに保存します。
クラスタスキャンを実行します。

また、SCN_OPT_FORCE、SCN_OPT_AUTOFIX、SCN_OPT_CHECKONLYの代わりに以下のオプションを個別に指定することも可能です。
オプションフラグ
SCN_OPT_EBADFATSCN_OPT_EMEDIADESCSCN_OPT_EDIRTREE
SCN_OPT_ESNAME
SCN_OPT_ELNAMESCN_OPT_EBIGPATHSCN_OPT_EENTRYSIZESCN_OPT_ECLUSTNUMSCN_OPT_ECLUSTLINKSCN_OPT_ELOSTCLUSTSCN_OPT_ERDFULLSCN_OPT_ECROSSLINKSCN_OPT_EDSKFULSCN_OPT_EFREECLUSTSCN_OPT_EDIRCHKSUM
SCN_OPT_ELINKEND

詳細
FAT1 と FAT2 の差異を修復します。
メディアディスクリプタのエラーを修復します。
ディレクトリ構造のエラーを修復します。
不正な short エントリ名のエントリを削除します。
不正な long エントリ名のエントリを削除します。
パス名の長さを修復します。
不正なファイルサイズのエントリを削除します。
不正なクラスタ番号のエントリを削除します。
不正な FAT チェーンの存在するエントリを削除します。
破損クラスタを修復します。
破損クラスタを保存する際、ルートディレクトリエ
ントリに空きがない場合、破損クラスタを削除します。
クロスリンクを修復します。
クロスリンクの修復時にディスクに空きがない場
合、クロスリンクしているエントリを削除します。
FAT32 の空き領域の不整合を修復します。
long エントリと short エントリのチェックサムの不整合があった場合、そのエントリを削除します。
FAT チェーンをファイルサイズと合致するように修正します。

23

USFilesPlus Filesystem Utility User's Manual

戻り値
0
－１

正常終了
異常終了（errno にエラー情報が設定されます。）

説明
drive にて指定したストレージデバイスに対して、options に指定した内容で修復を行います。

ファイル＜USFilesPlus インストールディレクトリ＞¥usfut¥scandisk.c

24

USFilesPlus Filesystem Utility User's Manual

6.3.4. scandisk サンプルプログラム
scandisk にはサンプルプログラムがあり、サンプルプログラムのソースファイルは＜USFilesPlus インストールディレクトリ＞¥appsrc ディレクトリ下にある「scdtest.c」となっています。

25

USFilesPlus Filesystem Utility User's Manual

6.4. 電源断対策
6.4.1. 概要
電源断対策として、USFilesPlus に以下の機能の追加、および修正を行っております。
・・・・

fopen( ) 時の scandisk 実行
ファイルリネーム時のデータ保証改善
エントリ作成時の属性フラグ
キャッシュデータ書き込み順の変更

6.4.2. fopen( ) 時の scandisk 実行
FAT の２つ目のエントリ（予約領域）のビットをクリーンフラグとして使用します。
各ファイルシステムにおいて、クリーンフラグとして使用されるビットは下表の通りです。
フォーマット形式

クリーンフラグのビット位置
ビット 11（=MSB）
ビット 15（=MSB）
ビット 27

FAT12
FAT16
FAT32

クリーンフラグは FAT ファイルシステムの利用開始時に“0”に設定し、終了時に“1”に設定するものとします。
ファイルオープン時に、デバイステーブルに設定されている書き込み可能なストレージ
デバイスのクリーンフラグが“0”として検出された場合、電源断が発生したものとみなし、自動的に scandisk を実行します。

開始時

開始前
1

dac_cnt++0

dac_cnt--

正常終了時（dac_cnt = 0）
1

異常終了時
（dac_cnt ≠ 0）0

また、複数のアプリケーションによるファイルシステム利用の開始／終了を判別するた
めに、デバイステーブルに新たにディスクアクセスカウンタ（dac_cnt）を追加します。
ディスクアクセスカウンタにて、ファイルシステムの利用を開始（fopen）するときにカウントアップし、利用を終了（fclose）するときにカウントダウンすることで、クリーンフラ
グが現在デバイスに対してアクセスがない場合にのみ変更されるようにしています。
26

USFilesPlus Filesystem Utility User's Manual

6.4.3. ファイルリネーム時のデータ保証改善
通常の FAT ファイルシステムでは、ファイルリネーム時に電源断が発生すると、旧ファ
イル、および新ファイルの両方のディレクトリエントリが消滅してしまう現象が発生していました。
a:（void）pcfm_delete（fp）;
b:nfp->mode &= ~MODE_ALTERED;
c:（void）update_dir（nfp）;
d:UNLOCK_FILESYSTEM（）;/* delete old dir entry *//* don't change file time */図 6.1 リネーム処理（修正前）

この現象は、修正前のリネーム処理（図 6.1）は、旧ファイルのディレクトリエントリを削除（a行）した後、新ファイルのディレクトリエントリを追加（c行）しているために、発生する可能性がありました。
そこで、これを回避するために、現状のリネーム処理から図 3-5 で示す内容に修正することで、エントリが消滅しないようにしています。
a:nfp->mode &= ~MODE_ALTERED;b:（void）update_dir（nfp）;
c:（void）pcfm_delete（fp）;
d:UNLOCK_FILESYSTEM（）;/* don't change file time *//* delete old dir entry */図 6.2 リネーム処理（修正後）

図 6.2 の修正では、新ファイルのディレクトリエントリを追加（b行）した後、旧ファイルのディレクトリエントリを削除（c行）しているため、最悪の場合でも、旧ファイルのディレクトリエントリは残ることが保証され、下表のようにファイルの消滅を回避することができます。
電源断位置
a
b
c
d

旧ファイル
あり
あり
あり
なし

新ファイル
なし
なし
あり
あり

27

USFilesPlus Filesystem Utility User's Manual

6.4.4. エントリ作成時の属性フラグ
エントリが作成される場合、まず空のエントリが作成されます。
この状態で電源断が発生し、ストレージデバイス上に旧ファイル・新ファイルの両エントリが存在する状態となった場合、どちらが正しいエントリかが判断できません。
これを回避するため、エントリの作成時に属性の上位から 2 ビット目を 1 に設定（0x40）
し、属性・クラスタ番号・ファイルサイズ設定時にこのビットを 0 に戻すことで、正しいエントリを判断可能となるようにしています。

6.4.5. キャッシュデータ書き込み順の変更
現在キャッシュデータをストレージデバイスに書き込む際、キャッシュに格納された順
序に関わらず、キャッシュエリアの先頭から書き込んでいます。このとき、本来のデータ
書き込み順序と異なる場合が存在し、この時点で電源断が発生すると不正なエントリとして検出されない場合が存在します。
この現象を回避するため、キャッシュエリアの書き込み順を、キャッシュに格納された順にストレージデバイスに書き込むように変更しています。

6.4.6. 設定
電源断対策の設定は、3設定における設定以外は、特に他の設定およびアプリケーション
での操作等の必要はありません。

28

USFilesPlus Filesystem Utility User's Manual

6.5. ライトスルーモード
6.5.1. 概要
ファイルシステムには、アクセス速度を改善するためにキャッシュを使用しています。
キャッシュデータは、以下タイミングでストレージデバイスに書き込まれます。
・ fclose()時・ fflush()時
しかし、ストレージデバイスに書き込まれる前に電源断が発生すると、それまでにキャッシュに保持していたデータは破棄されてしまいます。
このようなデータ破棄を回避するために、キャッシュに格納するのではなく、直接スト
レージデバイスに書き込むモードを追加しています。
ただし、アクセス速度が低下するため、本モードの処理を追加するかはコンパイル時に設定し、また、デバイスごとに使用するかを設定可能としています。

アプリケーション
fopen

fwritefcloseFAT Filesystem
キャッシュ

ライトスルーモード

キャッシュデータの書込み

ストレージデバイス

29

USFilesPlus Filesystem Utility User's Manual

6.5.2. 設定
ライトスルーモードを有効にするためにはまず、ライトスルーモードの処理をビルドする必要があります。ライトスルーモードの処理のビルドは sio.mak の WRITETHROUGHを設定してコンパイルすることで行います。
詳細につきましては3.3Sio.makの設定を参照ください。
ライトスルーモードを有効にするかどうかは、デバイスごとに設定することが可能で、デフォルトでは無効な設定となっています。
有効にするためには<USFilesPlus インストールディレクトリ>¥siosrc ディレクトリ下にある「devtab.c」のデバイステーブルで、有効にしたいデバイスの flag の値に DVF_WTM
を設定します。
C ドライブでライトスルーモードを有効にしたい場合のデバイステーブルの例は以下の通りです。
{&pcparmC,"C",
FM_PCFM,
0xf,
0x84,
0,
(DRIVER *)&lbadrv_s,&pcfm,NULL,
DVF_WTM,0#ifdef USF_UTILITY,
0#endif}30/* device dependent data *//* name *//* device type = PC device *//* bits: text write read *//* unit# *//* partition *//* pointer to driver *//* pointer to file manager *//* pointer to FILE *//* flags *//* # open paths (RAM) *//* write counter for clean flag */