fs/cromfs: Update README

This commit is contained in:
Gregory Nutt 2018-03-22 08:41:59 -06:00
parent 3b3ca1373c
commit 1d72f7afea
1 changed files with 45 additions and 11 deletions

View File

@ -1,6 +1,14 @@
README
======
o Overview
o gencromfs
o Architecture
o Configuration
Overview
========
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
@ -12,8 +20,8 @@ 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
I do not have a good way to measure how much compression we get using 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.
@ -101,14 +109,39 @@ The "." and ".." hard links also work:
nsh>
gencromfs
=========
The genromfs program can be found in tools/. It is a single C file called
gencromfs.c. It can be built in this way:
cd tools
make -f Makefile.host gencromfs
The genromfs tool used to generate CROMFS file system images. Usage is
simple:
gencromfs <dir-path> <out-file>
Where:
<dir-path> is the path to the directory will be at the root of the
new CROMFS file system image.
<out-file> the name of the generated, output C file. This file must
be compiled in order to generate the binary CROMFS file system
image.
All of these steps are automated in the apps/examples/cromfs/Makefile.
Refer to that Makefile as an reference.
Architecture
============
The CROMFS file system is represented by an in-memory data structure. This
structure is a tree. At the root of the tree is a "volume" node that
structure is a tree. At the root of the tree is a "volume node" that
describes the overall operating system. Other entities within the file
system are presented by other nodes: hard links, directories, and files.
These nodes are all described in fs/cromfs/cromfs.h.
system are presented by other types of nodes: hard links, directories, and
files. These nodes are all described in fs/cromfs/cromfs.h.
In addition to general volume information, the volume node provides an
offset to the the "root directory". The root directory, like all other
@ -120,7 +153,7 @@ same directory. This directory list is terminated with a zero offset.
Hard link, directory, and file nodes all include such a "peer offset". Hard
link nodes simply refer to other others and are more or less contained.
Directory nodes contain, in addition, a "child offset" to the first entry in
another singly linked list of nodes comprising the directory.
another singly linked list of nodes comprising the sub-directory.
File nodes provide file data. They are followed by a variable length list
of compressed data blocks. Each compressed data block contains an LZF
@ -166,17 +199,18 @@ Configuration
To build the CROMFS file system, you would add the following to your
configuration:
1. Enable LZF
1. Enable LZF (The other LZF settings apply only to compression
and, hence, have no impact on CROMFS which only decompresses):
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:
3. Enable the apps/examples/cromfs example if you like:
CONFIG_EXAMPLES_CROMFS=y
Or implement your own custom CROMFS file system that example as a
guideline.