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.