Ferenc Havasi
2004-10-07 12:40:44 UTC
Hi David,
I finished the implementation of model based compressor support for JFFS2.
David, I would like to ask you: may I commit it to CVS? (certainly after
it you can modify there anything you like/dont't like)
We had some discussion about it some month ago, I tried to follow that:
model files now aren't "normal" files. They have no dentry only inode. I
introduced a new kind of node:
#define JFFS2_NODETYPE_MODELINFO (JFFS2_FEATURE_INCOMPAT |
JFFS2_NODE_ACCURATE | 5)
This node only stores an array with the inode numbers (and sizes) of the
model files. After scaning of the flash the nlink of the inodes of model
files are setted to 1. At the end of the mount process model files will
be loaded "by hand". (the method is simililar the method of
jffs2_read_dnode()).
Model files have an 8 bytes header: the first 4 is a magic 'J2MF', the
next two is the compr and serial (usercompr), next two is reserved to 0.
After loading the model file the corresponding compressor is called to
initilize it (if that wants).
I modified gc to handle this MODELINFO correctly (just copy if
neccesarry). I found a "FIXME" to handle JFFS2_NODETYPE_RWCOMPAT_COPY
nodes, too, I implemented it in the same function.
I exended the Kconfig with the ability for users to set the priority of
the compressor modules, too. Certainly this model support is also only
an option, and if not enabled everything works as before.
I moved the JFFS2_COMPR_XXX defines from jffs2.h to compr.h. I think it
is better place for them - if you not agree we can move back them.
In mkfs.jffs2 I intoduced a "compression configuration" concept. It is a
string with comma separated words. Every word can be a name of the
compressor (with priority, optoinally), or a compression mode. The
default value of it is "priority,zlib:70,rtime:60". It equals the
behavior of the original mkfs.jffs2. New switches of the mkfs.jffs2:
-C, --default-compr-config=CONFIG: Set the default compression
configuration.
-F, --compressor-config-file=FILENAME: Specifies a compression config
file. In this config file every line must be in format
"FILENAME;TYPE;COMPRESSION_CONFIG", where FILENAME is a relative file
name, TYPE can be only one of the file or model keywords, and
COMPRESSOIN_CONFIG must be a valid compression configuration. This
specified file will be compressed the specified compressor
configuration. All of the non specified files will be compressed by
the default compression configuration. For example a line of this
config file can be: "boot/zImage;file;priority,zlib:60,rtime:50", an
other example: "model.armlib;model;zlib:60".
Certainly it is documented in its man page and if you don't use the new
options mkfs.jffs2 will produce exactly the same image than the "old"
mkfs.jffs2.
The attached patch contains the fix of the problem I wrote about
yesterday but does not contains compr_armlib.c and modelgen_armlib.c
(CVS will contain). Armlib is a special model based ARM code compressor
designed by us.
I also modified jffs2dump.c to handle the new modelinfo node type.
Regards,
Ferenc
I finished the implementation of model based compressor support for JFFS2.
David, I would like to ask you: may I commit it to CVS? (certainly after
it you can modify there anything you like/dont't like)
We had some discussion about it some month ago, I tried to follow that:
model files now aren't "normal" files. They have no dentry only inode. I
introduced a new kind of node:
#define JFFS2_NODETYPE_MODELINFO (JFFS2_FEATURE_INCOMPAT |
JFFS2_NODE_ACCURATE | 5)
This node only stores an array with the inode numbers (and sizes) of the
model files. After scaning of the flash the nlink of the inodes of model
files are setted to 1. At the end of the mount process model files will
be loaded "by hand". (the method is simililar the method of
jffs2_read_dnode()).
Model files have an 8 bytes header: the first 4 is a magic 'J2MF', the
next two is the compr and serial (usercompr), next two is reserved to 0.
After loading the model file the corresponding compressor is called to
initilize it (if that wants).
I modified gc to handle this MODELINFO correctly (just copy if
neccesarry). I found a "FIXME" to handle JFFS2_NODETYPE_RWCOMPAT_COPY
nodes, too, I implemented it in the same function.
I exended the Kconfig with the ability for users to set the priority of
the compressor modules, too. Certainly this model support is also only
an option, and if not enabled everything works as before.
I moved the JFFS2_COMPR_XXX defines from jffs2.h to compr.h. I think it
is better place for them - if you not agree we can move back them.
In mkfs.jffs2 I intoduced a "compression configuration" concept. It is a
string with comma separated words. Every word can be a name of the
compressor (with priority, optoinally), or a compression mode. The
default value of it is "priority,zlib:70,rtime:60". It equals the
behavior of the original mkfs.jffs2. New switches of the mkfs.jffs2:
-C, --default-compr-config=CONFIG: Set the default compression
configuration.
-F, --compressor-config-file=FILENAME: Specifies a compression config
file. In this config file every line must be in format
"FILENAME;TYPE;COMPRESSION_CONFIG", where FILENAME is a relative file
name, TYPE can be only one of the file or model keywords, and
COMPRESSOIN_CONFIG must be a valid compression configuration. This
specified file will be compressed the specified compressor
configuration. All of the non specified files will be compressed by
the default compression configuration. For example a line of this
config file can be: "boot/zImage;file;priority,zlib:60,rtime:50", an
other example: "model.armlib;model;zlib:60".
Certainly it is documented in its man page and if you don't use the new
options mkfs.jffs2 will produce exactly the same image than the "old"
mkfs.jffs2.
The attached patch contains the fix of the problem I wrote about
yesterday but does not contains compr_armlib.c and modelgen_armlib.c
(CVS will contain). Armlib is a special model based ARM code compressor
designed by us.
I also modified jffs2dump.c to handle the new modelinfo node type.
Regards,
Ferenc