Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.18-rc4 231 lines 11 kB view raw
1USING VFAT 2---------------------------------------------------------------------- 3To use the vfat filesystem, use the filesystem type 'vfat'. i.e. 4 mount -t vfat /dev/fd0 /mnt 5 6No special partition formatter is required. mkdosfs will work fine 7if you want to format from within Linux. 8 9VFAT MOUNT OPTIONS 10---------------------------------------------------------------------- 11umask=### -- The permission mask (for files and directories, see umask(1)). 12 The default is the umask of current process. 13 14dmask=### -- The permission mask for the directory. 15 The default is the umask of current process. 16 17fmask=### -- The permission mask for files. 18 The default is the umask of current process. 19 20codepage=### -- Sets the codepage number for converting to shortname 21 characters on FAT filesystem. 22 By default, FAT_DEFAULT_CODEPAGE setting is used. 23 24iocharset=name -- Character set to use for converting between the 25 encoding is used for user visible filename and 16 bit 26 Unicode characters. Long filenames are stored on disk 27 in Unicode format, but Unix for the most part doesn't 28 know how to deal with Unicode. 29 By default, FAT_DEFAULT_IOCHARSET setting is used. 30 31 There is also an option of doing UTF-8 translations 32 with the utf8 option. 33 34 NOTE: "iocharset=utf8" is not recommended. If unsure, 35 you should consider the following option instead. 36 37utf8=<bool> -- UTF-8 is the filesystem safe version of Unicode that 38 is used by the console. It can be be enabled for the 39 filesystem with this option. If 'uni_xlate' gets set, 40 UTF-8 gets disabled. 41 42uni_xlate=<bool> -- Translate unhandled Unicode characters to special 43 escaped sequences. This would let you backup and 44 restore filenames that are created with any Unicode 45 characters. Until Linux supports Unicode for real, 46 this gives you an alternative. Without this option, 47 a '?' is used when no translation is possible. The 48 escape character is ':' because it is otherwise 49 illegal on the vfat filesystem. The escape sequence 50 that gets used is ':' and the four digits of hexadecimal 51 unicode. 52 53nonumtail=<bool> -- When creating 8.3 aliases, normally the alias will 54 end in '~1' or tilde followed by some number. If this 55 option is set, then if the filename is 56 "longfilename.txt" and "longfile.txt" does not 57 currently exist in the directory, 'longfile.txt' will 58 be the short alias instead of 'longfi~1.txt'. 59 60quiet -- Stops printing certain warning messages. 61 62check=s|r|n -- Case sensitivity checking setting. 63 s: strict, case sensitive 64 r: relaxed, case insensitive 65 n: normal, default setting, currently case insensitive 66 67shortname=lower|win95|winnt|mixed 68 -- Shortname display/create setting. 69 lower: convert to lowercase for display, 70 emulate the Windows 95 rule for create. 71 win95: emulate the Windows 95 rule for display/create. 72 winnt: emulate the Windows NT rule for display/create. 73 mixed: emulate the Windows NT rule for display, 74 emulate the Windows 95 rule for create. 75 Default setting is `lower'. 76 77<bool>: 0,1,yes,no,true,false 78 79TODO 80---------------------------------------------------------------------- 81* Need to get rid of the raw scanning stuff. Instead, always use 82 a get next directory entry approach. The only thing left that uses 83 raw scanning is the directory renaming code. 84 85 86POSSIBLE PROBLEMS 87---------------------------------------------------------------------- 88* vfat_valid_longname does not properly checked reserved names. 89* When a volume name is the same as a directory name in the root 90 directory of the filesystem, the directory name sometimes shows 91 up as an empty file. 92* autoconv option does not work correctly. 93 94BUG REPORTS 95---------------------------------------------------------------------- 96If you have trouble with the VFAT filesystem, mail bug reports to 97chaffee@bmrc.cs.berkeley.edu. Please specify the filename 98and the operation that gave you trouble. 99 100TEST SUITE 101---------------------------------------------------------------------- 102If you plan to make any modifications to the vfat filesystem, please 103get the test suite that comes with the vfat distribution at 104 105 http://bmrc.berkeley.edu/people/chaffee/vfat.html 106 107This tests quite a few parts of the vfat filesystem and additional 108tests for new features or untested features would be appreciated. 109 110NOTES ON THE STRUCTURE OF THE VFAT FILESYSTEM 111---------------------------------------------------------------------- 112(This documentation was provided by Galen C. Hunt <gchunt@cs.rochester.edu> 113 and lightly annotated by Gordon Chaffee). 114 115This document presents a very rough, technical overview of my 116knowledge of the extended FAT file system used in Windows NT 3.5 and 117Windows 95. I don't guarantee that any of the following is correct, 118but it appears to be so. 119 120The extended FAT file system is almost identical to the FAT 121file system used in DOS versions up to and including 6.223410239847 122:-). The significant change has been the addition of long file names. 123These names support up to 255 characters including spaces and lower 124case characters as opposed to the traditional 8.3 short names. 125 126Here is the description of the traditional FAT entry in the current 127Windows 95 filesystem: 128 129 struct directory { // Short 8.3 names 130 unsigned char name[8]; // file name 131 unsigned char ext[3]; // file extension 132 unsigned char attr; // attribute byte 133 unsigned char lcase; // Case for base and extension 134 unsigned char ctime_ms; // Creation time, milliseconds 135 unsigned char ctime[2]; // Creation time 136 unsigned char cdate[2]; // Creation date 137 unsigned char adate[2]; // Last access date 138 unsigned char reserved[2]; // reserved values (ignored) 139 unsigned char time[2]; // time stamp 140 unsigned char date[2]; // date stamp 141 unsigned char start[2]; // starting cluster number 142 unsigned char size[4]; // size of the file 143 }; 144 145The lcase field specifies if the base and/or the extension of an 8.3 146name should be capitalized. This field does not seem to be used by 147Windows 95 but it is used by Windows NT. The case of filenames is not 148completely compatible from Windows NT to Windows 95. It is not completely 149compatible in the reverse direction, however. Filenames that fit in 150the 8.3 namespace and are written on Windows NT to be lowercase will 151show up as uppercase on Windows 95. 152 153Note that the "start" and "size" values are actually little 154endian integer values. The descriptions of the fields in this 155structure are public knowledge and can be found elsewhere. 156 157With the extended FAT system, Microsoft has inserted extra 158directory entries for any files with extended names. (Any name which 159legally fits within the old 8.3 encoding scheme does not have extra 160entries.) I call these extra entries slots. Basically, a slot is a 161specially formatted directory entry which holds up to 13 characters of 162a file's extended name. Think of slots as additional labeling for the 163directory entry of the file to which they correspond. Microsoft 164prefers to refer to the 8.3 entry for a file as its alias and the 165extended slot directory entries as the file name. 166 167The C structure for a slot directory entry follows: 168 169 struct slot { // Up to 13 characters of a long name 170 unsigned char id; // sequence number for slot 171 unsigned char name0_4[10]; // first 5 characters in name 172 unsigned char attr; // attribute byte 173 unsigned char reserved; // always 0 174 unsigned char alias_checksum; // checksum for 8.3 alias 175 unsigned char name5_10[12]; // 6 more characters in name 176 unsigned char start[2]; // starting cluster number 177 unsigned char name11_12[4]; // last 2 characters in name 178 }; 179 180If the layout of the slots looks a little odd, it's only 181because of Microsoft's efforts to maintain compatibility with old 182software. The slots must be disguised to prevent old software from 183panicking. To this end, a number of measures are taken: 184 185 1) The attribute byte for a slot directory entry is always set 186 to 0x0f. This corresponds to an old directory entry with 187 attributes of "hidden", "system", "read-only", and "volume 188 label". Most old software will ignore any directory 189 entries with the "volume label" bit set. Real volume label 190 entries don't have the other three bits set. 191 192 2) The starting cluster is always set to 0, an impossible 193 value for a DOS file. 194 195Because the extended FAT system is backward compatible, it is 196possible for old software to modify directory entries. Measures must 197be taken to ensure the validity of slots. An extended FAT system can 198verify that a slot does in fact belong to an 8.3 directory entry by 199the following: 200 201 1) Positioning. Slots for a file always immediately proceed 202 their corresponding 8.3 directory entry. In addition, each 203 slot has an id which marks its order in the extended file 204 name. Here is a very abbreviated view of an 8.3 directory 205 entry and its corresponding long name slots for the file 206 "My Big File.Extension which is long": 207 208 <proceeding files...> 209 <slot #3, id = 0x43, characters = "h is long"> 210 <slot #2, id = 0x02, characters = "xtension whic"> 211 <slot #1, id = 0x01, characters = "My Big File.E"> 212 <directory entry, name = "MYBIGFIL.EXT"> 213 214 Note that the slots are stored from last to first. Slots 215 are numbered from 1 to N. The Nth slot is or'ed with 0x40 216 to mark it as the last one. 217 218 2) Checksum. Each slot has an "alias_checksum" value. The 219 checksum is calculated from the 8.3 name using the 220 following algorithm: 221 222 for (sum = i = 0; i < 11; i++) { 223 sum = (((sum&1)<<7)|((sum&0xfe)>>1)) + name[i] 224 } 225 226 3) If there is free space in the final slot, a Unicode NULL (0x0000) 227 is stored after the final character. After that, all unused 228 characters in the final slot are set to Unicode 0xFFFF. 229 230Finally, note that the extended name is stored in Unicode. Each Unicode 231character takes two bytes.