devf-i365sl

Flash filesystem for 82365SL-compatible PCMCIA host adapter (QNX Neutrino)


Note:
  • This driver runs only on ISA hardware. If you have PCI hardware, try programming your CardBus controller in legacy ISA mode.
  • You must be root to start this driver.

Syntax:

devf-i365sl
    [-a] [-b priority]
    [-E] [-f verifylevel] [-i arrayindex[,partindex]]
    [-l] [-m mountover
    [-p backgroundpercent[,superlimit]] [-r]
    [-s base[,wsize[,aoffset[,asize[,usize[,bwidth[,ileave]]]]]]]
    [-t threads] [-u update] [-V] [-v]
    [-w buffersize]

Runs on:

x86

Options:

-a
Don't auto-mount filesystem partitions present on the media. See also the -R option.
-b priority
Enable background reclaim at the specified priority. By default, background reclamation is disabled.
-E
Do not daemonize. Exit on EBADFSYS with partition num + 1 of corrupt filesystem.
-f verifylevel
Enable flash verify. (default=0, 0=none, write=1, erase=2, all=3)
-i arrayindex[,partindex]
Starting socket index and first partition index; 0 >= index >=15. The default is 0,0. Use this to give multiple drivers unique IDs. The -i option is just a suggestion for the resource database manager; the selected indexes can be larger.
-l
List the available flash databases and exit.
-m mountover
Override the mountpoints assigned to a file system that are formatted with an empty (i.e. flashctl -p/dev/fs0p0 -f -n "") mountpoint. The mountover argument can include two %X format specifiers (like those for printf()) that are replaced by the socket index and the partition index.

Note: The -m option doesn't override a mountpoint specified with mkefs.

-p backgroundpercent[,superlimit]
Set the background-reclaim percentage trigger (stale space over free space) and, optionally, the superseded extent limit before reclaim. The default is 100,16.
-R
Mount the automount filesystem as read-only. It doesn't affect raw partition mounts. The -R option has an effect only at startup and initialization. Any subsequent mounting (with either flashctl or mount) ignores the -R option. If you use -a option, the -R option is ignored.
-r
Specify this option always. Enable fault recovery for dirty extents, dangling extents, and partial reclaims. If you don't specify -r, recovery isn't performed, which, when power faults are likely, can waste space on the media or make the media read-only. You should always specify the -r option unless you're trying to debug a flash corruption issue or you don't have the time to repair a damage.
-s base[,wsize[,aoffset[,asize[,usize[,bwidth[,ileave]]]]]]
Set socket options, normally the base physical address, window size, array offset, array size, unit size, bus width, and interleave. The format is left flexible for socket services with customized drivers.

The arguments are:

base
Physical base address of the flash part. This value is board-specific.
wsize
Size of the physically contiguous flash part.
aoffset
For SRAM, the offset from the base address to the start of the flash array.
asize
For SRAM, the size of the flash array. The default is equal to wsize.
usize
The size of a physical erase sector. For SRAM, this number can be any power of two. 64K should be the minimum, for performance reasons.
bwidth
The total width of the data bus, as seen from the microprocessor's perspective. This is the width of one flash chip multiplied by the interleave. The value is specified as a power of 2 (1,2,4,8).
ileave
The number of flash chips arranged on the data bus. Two 16-bit wide chips used as the upper and lower halves of a 32-bit databus give an interleave of 2. This number is specified as a power of 2 (1,2,4).

You can specify the base physical address, sizes, and offset in octal (0777), hexadecimal (0x1ff), or decimal (511). The sizes must be a power of two, and you can specify them with any of the following suffixes:

-t threads
Number of threads; 1 >= threads >= 4 (default is 2). Extra threads increase performance when background reclaim is enabled (with the -b option) and when multiple chips and/or spare blocks are available.
-u update
Update level for timestamps; 0 for never update, 1 to update files only, and 2 to update files and directories. The default update is 0.
-V
Display filesystem and MTD version information.
-v
Display verbose information.
-w buffersize
Write (append) buffer size in bytes. The default buffersize is 512. Using a larger write-buffer prevents the creation of very small extents, reducing overhead. If buffersize is 0, appending is disabled.

Description:

The devf-i365sl manager provides Flash filesystem support for memory cards accessed via 82365SL host adapters using the following default filenames (the ID, n, appended to /dev/fs can be changed via the -i option):

/dev/fsn
Default mountpoint for socket n.
/dev/fsnp0
Raw access for socket n, partition 0.
mountpoint
Flash filesystem mountpoint for socket n, partition 0 with transparent decompression.

Note: You should always specify the -r option unless you're trying to debug a flash corruption issue or you don't have the time to repair a damage. See the background information for this:
  1. If an erase was happening when the power is cut off, it results in a number of dangling extents at the next power on. These extents continue to occupy space forever, until they are deleted. Using the -r option will cause them to be deleted. If you start the the driver with -vv, it prints dangle for every dangling extent found.
  2. If the filesystem detects an error, and the -r isn't specified, the driver marks the partition read-only, so that more damage isn't done. The second case is when a reclaim was interrupted by a power-loss. In this case the spare block may be unusable and the driver prints partial to the console. The partition is still read-write, but reclaims are turned off, which means overwriting of files will eventually fill up the filesystem with stale data.

You can specify the mountpoint above with the mount attribute of the mkefs command, and override it with the -n option to flashctl. By default, it's /fsnp0.


Note: This driver doesn't support removal and insertion of the card. In general, it doesn't support cards that need 12V on Vpp (Voltage programming pulse).

The driver probes the hardware to determine its block size. If you need to know the block size, you can:

Examples:

Start devf-i365sl and automatically mount the Flash filesystem partitions, with an initial fault recovery process, most POSIX semantics enabled and background reclaim at priority 5:

devf-i365sl -r -u2 -b5 &

Create a 32MB flash partition, with a 64KB unit (sector) size:

devf-i365sl -s0,32m,,,64k  -v -r

Create a 128MB flash partition, with large block sizes (to speed formatting):

devf-i365sl -s0,128m,,,512k -v -r

Create a 4MB partition:

devf-i365sl -s0,4m,,,64k -v -r

Create a 16MB flash partition, from a given physical address, with a 128KB unit size, and a 16-bit wide data bus:

devf-generic -s0xa4000000,16m,,,128k,2 -v -r

Create a 16MB flash partition, from a given physical address, with a 256KB unit size, and a 32-bit-wide data bus, with an interleave of two:

devf-generic -s0,16m,,,256k,4,2 -v -r

Caveats:

Although the Flash filesystem supports most POSIX semantics, some functionality isn't implemented in order to keep the driver simple and efficient. The unsupported POSIX semantics include:

QNX Neutrino flash filesystem version 3 no longer provides built-in decompression. The flash filesystem's decompression functionality has moved into the inflator resource manager. You should now use the deflate utility to compress files.

Performance might be slow when multiple writers are writing randomly to a shared file or to a shared directory (e.g. using unlink or rename). In these cases, the offset pointers have to be rewound for every access. There's no performance penalty when appending to a file, or when creating files with open(O_CREAT), mkdir, mknod, or link.

See also:

deflate, devf-800fads, devf-mtx600-w8, devf-p5064, devf-ppaq, devf-ram, devf-rpx-lite, devf-sc400, devf-vr41xx, flashctl, flashcmp, inflator, mkefs

"Flash filesystems" in the Working With Filesystems chapter of the User's Guide