Section 9.6. cramfs


9.6. cramfs

From the README file in the cramfs project, the goal of cramfs is to "cram a file system into a small ROM." The cramfs file system is very useful for embedded systems that contain a small ROM or FLASH memory that holds static data and programs. Borrowing again from the cramfs README file, "cramfs is designed to be simple and small, and compress things well."

The cramfs file system is read only. It is created with a command line utility called mkcramfs. If you don't have it on your development workstation, you can download it from the link at the end of this chapter. As with JFFS2, mkcramfs builds a file system image from a directory specified on the command line. Listing 9-10 details the procedure for building a cramfs image. We use the same file system structure from Listing 9-8 that we used to build the JFFS2 image.

Listing 9-10. mkcramfs Command Example

# mkcramfs usage: mkcramfs [-h] [-v] [-b blksize] [-e edition] [-i file] [-n name] dirname outfile  -h         print this help  -E         make all warnings errors (non-zero exit status)  -b blksize use this blocksize, must equal page size  -e edition set edition number (part of fsid)  -i file    insert a file image into the filesystem (requires >= 2.4.0)  -n name    set name of cramfs filesystem  -p         pad by 512 bytes for boot code  -s         sort directory entries (old option, ignored)  -v         be more verbose  -z         make explicit holes (requires >= 2.3.39)  dirname    root of the directory tree to be compressed  outfile    output file # # mkcramfs . ../cramfs.image warning: gids truncated to 8 bits (this may be a security concern) # ls -l ../cramfs.image -rw-rw-r--  1 chris chris 1019904 Sep 19 18:06 ../cramfs.image

The mkcramfs command was initially issued without any command line parameters to reproduce the usage message. Because there is no man page for this utility, this is the best way to understand its usage. We subsequently issued the command specifying the current directory, ., as the source of the files for the cramfs file system, and a file called cramfs.image as the destination. Finally, we listed the file just created, and we see a new file called cramfs.image.

Note that if your kernel is configured with cramfs support, you can mount this file system image on your Linux development workstation and examine its contents. Of course, because it is a read-only file system, you cannot modify it. Listing 9-11 demonstrates mounting the cramfs file system on a mount point called /mnt/flash.

Listing 9-11. Examining the cramfs File System

# mount -o loop cramfs.image /mnt/flash # ls -l /mnt/flash total 6 drwxr-xr-x  1 root  root 704 Dec 31  1969 bin drwxr-xr-x  1 root  root   0 Dec 31  1969 dev drwxr-xr-x  1 root  root 416 Dec 31  1969 etc drwxr-xr-x  1 root  root   0 Dec 31  1969 home drwxr-xr-x  1 root  root 172 Dec 31  1969 lib drwxr-xr-x  1 root  root   0 Dec 31  1969 proc drws------  1 root  root   0 Dec 31  1969 root drwxr-xr-x  1 root  root 272 Dec 31  1969 sbin drwxrwxrwt  1 root  root   0 Dec 31  1969 tmp drwxr-xr-x  1 root  root 124 Dec 31  1969 usr drwxr-xr-x  1 root  root 212 Dec 31  1969 var #

You might have noticed the warning message regarding group ID (GID) when the mkcramfs command was executed. The cramfs file system uses very terse metadata to reduce file system size and increase the speed of execution. One of the "features" of the cramfs file system is that it truncates the group ID field to 8 bits. Linux uses 16-bit group ID field. The result is that files created with group IDs greater than 255 are truncated with the warning issued in Listing 9-10.

Although somewhat limited in terms of maximum file sizes, maximum number of files, and so on, the cramfs file system is ideal for boot ROMS, in which read-only operation and fast compression are ideally suited.



Embedded Linux Primer(c) A Practical Real-World Approach
Embedded Linux Primer: A Practical Real-World Approach
ISBN: 0131679848
EAN: 2147483647
Year: 2007
Pages: 167

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net