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.23-rc4 238 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 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 60usefree -- Use the "free clusters" value stored on FSINFO. It'll 61 be used to determine number of free clusters without 62 scanning disk. But it's not used by default, because 63 recent Windows don't update it correctly in some 64 case. If you are sure the "free clusters" on FSINFO is 65 correct, by this option you can avoid scanning disk. 66 67quiet -- Stops printing certain warning messages. 68 69check=s|r|n -- Case sensitivity checking setting. 70 s: strict, case sensitive 71 r: relaxed, case insensitive 72 n: normal, default setting, currently case insensitive 73 74shortname=lower|win95|winnt|mixed 75 -- Shortname display/create setting. 76 lower: convert to lowercase for display, 77 emulate the Windows 95 rule for create. 78 win95: emulate the Windows 95 rule for display/create. 79 winnt: emulate the Windows NT rule for display/create. 80 mixed: emulate the Windows NT rule for display, 81 emulate the Windows 95 rule for create. 82 Default setting is `lower'. 83 84<bool>: 0,1,yes,no,true,false 85 86TODO 87---------------------------------------------------------------------- 88* Need to get rid of the raw scanning stuff. Instead, always use 89 a get next directory entry approach. The only thing left that uses 90 raw scanning is the directory renaming code. 91 92 93POSSIBLE PROBLEMS 94---------------------------------------------------------------------- 95* vfat_valid_longname does not properly checked reserved names. 96* When a volume name is the same as a directory name in the root 97 directory of the filesystem, the directory name sometimes shows 98 up as an empty file. 99* autoconv option does not work correctly. 100 101BUG REPORTS 102---------------------------------------------------------------------- 103If you have trouble with the VFAT filesystem, mail bug reports to 104chaffee@bmrc.cs.berkeley.edu. Please specify the filename 105and the operation that gave you trouble. 106 107TEST SUITE 108---------------------------------------------------------------------- 109If you plan to make any modifications to the vfat filesystem, please 110get the test suite that comes with the vfat distribution at 111 112 http://bmrc.berkeley.edu/people/chaffee/vfat.html 113 114This tests quite a few parts of the vfat filesystem and additional 115tests for new features or untested features would be appreciated. 116 117NOTES ON THE STRUCTURE OF THE VFAT FILESYSTEM 118---------------------------------------------------------------------- 119(This documentation was provided by Galen C. Hunt <gchunt@cs.rochester.edu> 120 and lightly annotated by Gordon Chaffee). 121 122This document presents a very rough, technical overview of my 123knowledge of the extended FAT file system used in Windows NT 3.5 and 124Windows 95. I don't guarantee that any of the following is correct, 125but it appears to be so. 126 127The extended FAT file system is almost identical to the FAT 128file system used in DOS versions up to and including 6.223410239847 129:-). The significant change has been the addition of long file names. 130These names support up to 255 characters including spaces and lower 131case characters as opposed to the traditional 8.3 short names. 132 133Here is the description of the traditional FAT entry in the current 134Windows 95 filesystem: 135 136 struct directory { // Short 8.3 names 137 unsigned char name[8]; // file name 138 unsigned char ext[3]; // file extension 139 unsigned char attr; // attribute byte 140 unsigned char lcase; // Case for base and extension 141 unsigned char ctime_ms; // Creation time, milliseconds 142 unsigned char ctime[2]; // Creation time 143 unsigned char cdate[2]; // Creation date 144 unsigned char adate[2]; // Last access date 145 unsigned char reserved[2]; // reserved values (ignored) 146 unsigned char time[2]; // time stamp 147 unsigned char date[2]; // date stamp 148 unsigned char start[2]; // starting cluster number 149 unsigned char size[4]; // size of the file 150 }; 151 152The lcase field specifies if the base and/or the extension of an 8.3 153name should be capitalized. This field does not seem to be used by 154Windows 95 but it is used by Windows NT. The case of filenames is not 155completely compatible from Windows NT to Windows 95. It is not completely 156compatible in the reverse direction, however. Filenames that fit in 157the 8.3 namespace and are written on Windows NT to be lowercase will 158show up as uppercase on Windows 95. 159 160Note that the "start" and "size" values are actually little 161endian integer values. The descriptions of the fields in this 162structure are public knowledge and can be found elsewhere. 163 164With the extended FAT system, Microsoft has inserted extra 165directory entries for any files with extended names. (Any name which 166legally fits within the old 8.3 encoding scheme does not have extra 167entries.) I call these extra entries slots. Basically, a slot is a 168specially formatted directory entry which holds up to 13 characters of 169a file's extended name. Think of slots as additional labeling for the 170directory entry of the file to which they correspond. Microsoft 171prefers to refer to the 8.3 entry for a file as its alias and the 172extended slot directory entries as the file name. 173 174The C structure for a slot directory entry follows: 175 176 struct slot { // Up to 13 characters of a long name 177 unsigned char id; // sequence number for slot 178 unsigned char name0_4[10]; // first 5 characters in name 179 unsigned char attr; // attribute byte 180 unsigned char reserved; // always 0 181 unsigned char alias_checksum; // checksum for 8.3 alias 182 unsigned char name5_10[12]; // 6 more characters in name 183 unsigned char start[2]; // starting cluster number 184 unsigned char name11_12[4]; // last 2 characters in name 185 }; 186 187If the layout of the slots looks a little odd, it's only 188because of Microsoft's efforts to maintain compatibility with old 189software. The slots must be disguised to prevent old software from 190panicking. To this end, a number of measures are taken: 191 192 1) The attribute byte for a slot directory entry is always set 193 to 0x0f. This corresponds to an old directory entry with 194 attributes of "hidden", "system", "read-only", and "volume 195 label". Most old software will ignore any directory 196 entries with the "volume label" bit set. Real volume label 197 entries don't have the other three bits set. 198 199 2) The starting cluster is always set to 0, an impossible 200 value for a DOS file. 201 202Because the extended FAT system is backward compatible, it is 203possible for old software to modify directory entries. Measures must 204be taken to ensure the validity of slots. An extended FAT system can 205verify that a slot does in fact belong to an 8.3 directory entry by 206the following: 207 208 1) Positioning. Slots for a file always immediately proceed 209 their corresponding 8.3 directory entry. In addition, each 210 slot has an id which marks its order in the extended file 211 name. Here is a very abbreviated view of an 8.3 directory 212 entry and its corresponding long name slots for the file 213 "My Big File.Extension which is long": 214 215 <proceeding files...> 216 <slot #3, id = 0x43, characters = "h is long"> 217 <slot #2, id = 0x02, characters = "xtension whic"> 218 <slot #1, id = 0x01, characters = "My Big File.E"> 219 <directory entry, name = "MYBIGFIL.EXT"> 220 221 Note that the slots are stored from last to first. Slots 222 are numbered from 1 to N. The Nth slot is or'ed with 0x40 223 to mark it as the last one. 224 225 2) Checksum. Each slot has an "alias_checksum" value. The 226 checksum is calculated from the 8.3 name using the 227 following algorithm: 228 229 for (sum = i = 0; i < 11; i++) { 230 sum = (((sum&1)<<7)|((sum&0xfe)>>1)) + name[i] 231 } 232 233 3) If there is free space in the final slot, a Unicode NULL (0x0000) 234 is stored after the final character. After that, all unused 235 characters in the final slot are set to Unicode 0xFFFF. 236 237Finally, note that the extended name is stored in Unicode. Each Unicode 238character takes two bytes.