Embedded File Systems
A high performance UNIX-like flash-friendly file system with a configurable fixed RAM footprint that performs well with all volume sizes, up to and including Terabytes, TargetXFS includes the following features:
- A reliable, re-entrant file system with a full POSIX and ANSI C compliant application program interface, including links, file access permissions, long file names, and numerous extensions for embedded systems use.
- Guaranteed file system integrity across unexpected shutdowns. Only data written since the last synchronizing operation can be lost. Closed files, directory structures, and files open for reading are never at risk. An unexpected powerloss rolls the volume back to its state at the most recent synchronization, except for any user data that has been overwritten.
- Optionally, overwrites are made to new locations, so that in between explicit synchronizations, file system updates are atomic. Applications call vstat() to determine how much can be written before a synchronization is required and call fflush(), fsync(), sync(), or vsync() to perform a synchronization.
- Supports flash memory via the TargetFTL-NDM and TargetFTL-NOR flash translation layers. For optimal performance, the sector size is based on the natural page size of the underlying flash. TargetXFS is not restricted to small 512 byte sectors.
- Designed for fast powerfail recovery, similar to TargetFFS. FAT file systems require the entire volume contents to be checked. TargetXFS only requires a fast comparison between two sector tables stored in known locations.
- Separate optimized caches for user data and metadata, resulting in a configurable fixed RAM footprint and, by adjusting the cache size, excellent performance for volume sizes up to Terabytes. Interactive Web-based calculator shows RAM footprint based on configuration options.
- Supports concurrent use of multiple volumes. Volumes can be permanently installed at start up, or added and deleted during operation.
- Per-task current working directories. The current working directory (CWD) is specified by two 32-bit variables. TargetXFS calls application functions to read and write the CWD state variables. If a real time operating system is used and these variables are accessed in a task specific way, each task has its own CWD.
- Supports the POSIX "owner", "group", "other" file permissions, allowing applications to restrict some accesses to privileged tasks. TargetXFS calls FsGetId(), implemented by the application, to get the running task's user and group ID.
- Supports Unicode file/directory names.
- Tightly coupled with TargetFTL-NDM and TargetFTL-NOR via report mechanism to ensure power fail safeness, background garbage collection via vclean() API, and valid mappings only for used sectors inside the FTL.
- Supports file numbers: persistent associations between 32-bit numbers and files/directories that are valid even for closed files. File numbers are assigned at file creation and can be used to obtain the file name and path, allowing fixed database entries to reference file names and paths of arbitrary length.
- Binary image tool creates preformatted volume image files, for pre-production programming of flash devices using automated programmers from Data I/O, BP Microsystems, etc.
- Shell tool for loading and mounting binary images taken of target volumes. Used for trouble shooting target problems. The uploaded image can be examined using shell commands ('ls', 'chdir', etc.) and files can be extracted to the Windows file system.
- Sample applications include a binary search application, a power-loss recovery test, a shell that supports "cd", "ls", "mkdir", "pwd", etc, and other applications that test assorted file system calls. The shell may be extended with user commands.
- Shares same API library and current working directory implementation as TargetFAT (Windows compatible), TargetFFS (flash), TargetRFS (RAM), and TargetZFS (compressed read-only images), interworking seamlessly with these file systems.
- Developed using TargetOS™, Blunk Microsystems' full-featured royalty-free real time operating system (RTOS). Easily ported to other operating systems or to polling environments that do not use a kernel. Uses per-volume access semaphores to allow independent concurrent access to multiple volumes.
- Source code is 100% ANSI C and has been tested using ANSI C compilers from ARM, Diab Data, GNU, Metrowerks, and WindRiver.
- Royalty-free license. Includes ANSI C source code, manuals, sample applications, and one year of technical support.