EFSL
Embedded Filesystems Library

Project aims

The EFSL project aims to create a library for filesystems, to be used on various embedded systems. Currently we support the Microsoft FAT filesystem family. It is our intention to create pure ANSI C code that compiles on anything that bears the name 'C compiler'. We don't make assumptions about endianness or how the memory alignement is arranged on your architecture.

Adding code for your specific hardware is straightforward, just add code that fetches or writes a 512 byte sector, and the library will do the rest. Existing code can offcourse be used, own code is only required when you have hardware for which no target exists. For example, we support secure digital cards in SPI mode.

News

[18 January 2006] : Starting with version 0.2.6, EFSL has changed its license from the lesser General Public License to the regular Public License with an exception clause.
This clause states that you are allowed to statically link against the library without having to license your own code as GPL as well. The Lesser General Public License said the same thing, but it required you to release the object files of your program so that users could re-link it.
Becase it is extremely unpractical to do so, and offers no real added benefit or freedom to the user we searched for a new license and found the eCos license to be particularly suiting for embedded libraries.

[01 July 2005] : I've forked to code into 0.3-devel. This release contains the first set of changes toward supporting multiple different hardware endpoints.

[26 June 2005] : Version 0.2 stable is released!

[21 June 2005] : Version 0.1.21 of the EFSL library is feature complete. Now a series of tests will be run, to test al kinds of conditions. The bugs that will be fixed here will be the first step to the 0.2 stable release. Testing will consume a lot of time, in a few weeks a new version 0.1.22 should get released containing all fixes we will find. Testing will then continue and I hope our userbase will assist us in this. If I am satisfied with the stability of the system at that point we will release 0.2 - STABLE.

The 0.2 codebase will then be forked, and a 0.3 branche will be started. There will be MAJOR structural modifications to the code, so backwards compatibility will not be possible. We will however try to break everything at once, so that the new 0.3 codebase can be used for a longer time.

Planned new features in 0.3 -> 0.4

  • Support for different hardware endpoints in the same project
  • Support for a VFS layer, to support multiple filesystems transparantly
  • Reduction of memory consumption by the FAT fs unit, and the base objects
  • Support for an IOMan Lite, a very small and simple IOMan for people with place constraints
  • Cleanup of the fopen code in the FAT fs
  • Possibility to export IOMan buffers to userspace
  • Relocation of files to a more logical place
  • Cleanup the structure names/function names
  • Proper support for big endian
  • Project status

    We have support for FAT12, FAT16 and FAT32. Read and write has been tested and is stable. Our code runs on PC (GNU/Linux, development enviroment), TMS C6000 DSP's from Texas instruments, and ATMega's from Atmel.
    You can use this code with as little as 1.5 kilobyte RAM, however if you have more at your disposal, an infinite amount can be used as cache memory. The more memory you commit, the better the performance will be.

    In order to minimise IO to the hardware 2 caching mechanism are in place on different layers. The first layer is the IO Manager which does "dumb" caching of sectors. This will offcourse work better if you have RAM to spare. The second level is higherup in the library, where some tricks are in place to minimise redundant reading of the FAT table (which is the primary bottleneck of the FAT filesystem, especially with hardware which has seek times).

    License

    This project is released under the Lesser General Public license, which, in short, means that you may use the library and it's sourcecode for any purpose that you want, that you may link with it and use it commercially, but that ANY change to the code must be released under the same license.
    That means, if you add hardware suport, you share it, so that the community may benefit from access to all kinds of hardware.

    Download

    You can download the latest release, user and system documentation from sourceforge.