diff --git a/Documentation/README.html b/Documentation/README.html index bad25c87e1..cbf33411f2 100644 --- a/Documentation/README.html +++ b/Documentation/README.html @@ -8,7 +8,7 @@

NuttX README Files

-

Last Updated: January 8, 2018

+

Last Updated: March 22, 2018

@@ -369,6 +369,8 @@ nuttx/ |- fs/ | |- binfs/ | | `- README.txt + | |- cromfs/ + | | `- README.txt | |- mmap/ | | `- README.txt | |- nxffs/ diff --git a/README.txt b/README.txt index bc81c5be1b..57b46522cc 100644 --- a/README.txt +++ b/README.txt @@ -1937,6 +1937,8 @@ nuttx/ |- fs/ | |- binfs/ | | `- README.txt + | |- cromfs/ + | | `- README.txt | |- mmap/ | | `- README.txt | |- nxffs/ diff --git a/fs/cromfs/README.txt b/fs/cromfs/README.txt new file mode 100644 index 0000000000..6e27145698 --- /dev/null +++ b/fs/cromfs/README.txt @@ -0,0 +1,120 @@ +README +====== + +This directory contains the the CROMFS file system. This is an in-memory +(meaning no block driver), read-only (meaning that can lie in FLASH) file +system. It uses LZF decompression on data only (meta data is not +compressed). + +It accesses the in-memory file system via directory memory reads and, hence, +can only reside in random access NOR-like FLASH. It is intended for use +with on-chip FLASH available on most MCUs (the design could probably be +extended to access non-random-access FLASH as well, but those extensions +are not yet in place). + +I do not have a good way to measure how much compression we get use LZF. I +have seen 37% compression reported in other applications, so I have to +accept that for now. That means, for example, that you could have a file +system with 512Kb of data in only 322Kb of FLASH, giving you 190Kb to do + other things with. + +LZF compression is not known for its high compression rations, but rather +for fast decompression. According to the author of the LZF decompression +routine, it is nearly as fast as a memcpy! + +There is also a new tool at /tools/gencromfs.c that will generate binary +images for the NuttX CROMFS file system and and an example CROMFS file +system image at apps/examples/cromfs. That example includes a test file +system that looks like: + + $ ls -Rl ../apps/examples/cromfs/cromfs + ../apps/examples/cromfs/cromfs: + total 2 + -rwxr--r--+ 1 spuda spuda 171 Mar 20 08:02 BaaBaaBlackSheep.txt + drwxrwxr-x+ 1 spuda spuda 0 Mar 20 08:11 emptydir + -rwxr--r--+ 1 spuda spuda 118 Mar 20 08:05 JackSprat.txt + drwxrwxr-x+ 1 spuda spuda 0 Mar 20 08:06 testdir1 + drwxrwxr-x+ 1 spuda spuda 0 Mar 20 08:10 testdir2 + drwxrwxr-x+ 1 spuda spuda 0 Mar 20 08:05 testdir3 + ../apps/examples/cromfs/cromfs/emptydir: + total 0 + ../apps/examples/cromfs/cromfs/testdir1: + total 2 + -rwxr--r--+ 1 spuda spuda 249 Mar 20 08:03 DingDongDell.txt + -rwxr--r--+ 1 spuda spuda 247 Mar 20 08:06 SeeSawMargorieDaw.txt + ../apps/examples/cromfs/cromfs/testdir2: + total 5 + -rwxr--r--+ 1 spuda spuda 118 Mar 20 08:04 HickoryDickoryDock.txt + -rwxr--r--+ 1 spuda spuda 2082 Mar 20 08:10 TheThreeLittlePigs.txt + ../apps/examples/cromfs/cromfs/testdir3: + total 1 + -rwxr--r--+ 1 spuda spuda 138 Mar 20 08:05 JackBeNimble.txt + +When built into NuttX and deployed on a target, it looks like: + + NuttShell (NSH) NuttX-7.24 + nsh> mount -t cromfs /mnt/cromfs + nsh> ls -Rl /mnt/cromfs + /mnt/cromfs: + dr-xr-xr-x 0 . + -rwxr--r-- 171 BaaBaaBlackSheep.txt + dr-xr-xr-x 0 emptydir/ + -rwxr--r-- 118 JackSprat.txt + dr-xr-xr-x 0 testdir1/ + dr-xr-xr-x 0 testdir2/ + dr-xr-xr-x 0 testdir3/ + /mnt/cromfs/emptydir: + drwxrwxr-x 0 . + dr-xr-xr-x 0 .. + /mnt/cromfs/testdir1: + drwxrwxr-x 0 . + dr-xr-xr-x 0 .. + -rwxr--r-- 249 DingDongDell.txt + -rwxr--r-- 247 SeeSawMargorieDaw.txt + /mnt/cromfs/testdir2: + drwxrwxr-x 0 . + dr-xr-xr-x 0 .. + -rwxr--r-- 118 HickoryDickoryDock.txt + -rwxr--r-- 2082 TheThreeLittlePigs.txt + /mnt/cromfs/testdir3: + drwxrwxr-x 0 . + dr-xr-xr-x 0 .. + -rwxr--r-- 138 JackBeNimble.txt + nsh> + +Everything I have tried works: examining directories, catting files, etc. +The "." and ".." hard links also work: + + nsh> cd /mnt/cromfs + nsh> cat emptydir/../testdir1/DingDongDell.txt + Ding, dong, bell, + Pussy's in the well. + Who put her in? + Little Johnny Green. + + Who pulled her out? + Little Tommy Stout. + What a naughty boy was that, + To try to drown poor pussy cat, + Who never did him any harm, + And killed the mice in his father's barn. + + nsh> + +To build the CROMFS file system, you would add the following to your +configuration: + +1. Enable LZF + + CONFIG_LIBC_LZF=y + CONFIG_LIBC_LZF_ALIGN=y + CONFIG_LIBC_LZF_HLOG=13 + CONFIG_LIBC_LZF_SMALL=y + +2. Enable the CROMFS file system: + + CONFIG_FS_CROMFS=y + +3. Enable the apps/examples/cromfs example: + + CONFIG_EXAMPLES_CROMFS=y