DENX . DULG . RootFileSystemDesignAndBuilding

9.5. Root File System: Design and Building

It is not an easy task to design the root file system for an embedded system. There are three major problems to be solved:

  1. what to put in it
  2. which file system type to use
  3. where to store and how to boot it

For now we will assume that the contents of the root file system is aready known; for example, it is given to us as a directory tree or a tarball which contains all the required files.

We will also assume that our system is a typical resource-limited embedded system so we will especially look for solutions where the root file system can be stored on on-board flash memory or other flash memory based devices like CompactFlash or SD cards, MMC or USB memory sticks.

A widespread approach to build a root file system is to use some Linux distribution (like the ELDK) and to remove things not needed. This approach may be pretty common, but it is almost always terribly wrong. You also don't build a family home by taking a skyscraper and removing parts. Like a house, a root file system should be built bottom up, starting from scratch and adding things you know you need. Never add anything where you don't exactly know what it's needed for.

But our focus here is on the second item: the options we have for chosing a file system type and the consequences this has.

In all cases we will base our experiments on the same content of the root filesystem; we use the images of the SELF (Simple Embedded Linux Framework) that come with the ELDK. In a first step we will transform the SELF images into a tarball to meet the requirements mentioned above:

In a ELDK installation, the SELF images can be found in the /opt/eldk/<architecture>/images/ directory. There is already a compressed ramdisk image in this directory, which we will use (ramdisk_image.gz):

  1. Uncompress ramdisk image:
    bash$ gzip -d -c -v /opt/eldk/ppc_8xx/images/ramdisk_image.gz >/tmp/ramdisk_image
    /opt/eldk/ppc_8xx/images/ramdisk_image.gz:       61.4%

    ALERT! Note: The following steps require root permissions!
  2. Mount ramdisk image:
    bash# mount -o loop /tmp/ramdisk_image /mnt/tmp
  3. Create tarball; to avoid the need for root permissions in the following steps we don't include the device files in our tarball:
    bash# cd /mnt/tmp
    bash# tar -zc --exclude='dev/*' -f /tmp/rootfs.tar.gz *
  4. Instead, we create a separate tarball which contains only the device entries so we can use them when necessary (with cramfs):
    bash# tar -zcf /tmp/devices.tar.gz dev/
    bash# cd /tmp
  5. Unmount ramdisk image:
    bash# umount /mnt/tmp
We will use the /tmp/rootfs.tar.gz tarball as master file in all following experiments.

----- Revision r1.4 - 01 Sep 2008 - 10:45 - WolfgangDenk
Copyright © 2002-2021 by DENX Software Engineering