Книга: Embedded Linux Primer: A Practical, Real-World Approach

6.5. Using initramfs

6.5. Using initramfs

initramfs is a relatively new (Linux 2.6) mechanism for executing early user space programs. It is conceptually similar to initrd, as described in the previous section. Its purpose is also similar: to enable loading of drivers that might be required before mounting the real root file system. However, it differs in significant ways from the initrd mechanism.

The technical implementation details differ significantly between initrd and initramfs. For example, initramfs is loaded before the call to do_basic_setup(),[55] which provides a mechanism for loading firmware for devices before its driver has been loaded. For more details, the Linux kernel documentation for this subsystem is relatively up-to-date. See .../Documentation/filesystems/ramfs-rootfs-initramfs.txt.

From a practical perspective, initramfs is much easier to use. initramfs is a cpio archive, whereas initrd is a gzipped file system image. This simple difference contributes to the easy of use of initramfs. It is integrated into the Linux kernel source tree and is built automatically when you build the kernel image. Making changes to it is far easier than building and loading a new initrd image. Listing 6-13 shows the contents of the Linux kernel .../usr directory, where the initramfs image is built. The contents of Listing 6-13 are shown after a kernel has been built.

Listing 6-13. Kernel initramfs Build Directory

$ ls -l
total 56
-rw-rw-r--  1 chris chris   834 Mar 25 11:13 built-in.o
-rwxrwxr-x  1 chris chris 11512 Mar 25 11:13 gen_init_cpio
-rw-rw-r--  1 chris chris 10587 Oct 27  2005 gen_init_cpio.c
-rw-rw-r--  1 chris chris   512 Mar 25 11:13 initramfs_data.cpio
-rw-rw-r--  1 chris chris   133 Mar 25 11:13 initramfs_data.cpio.gz
-rw-rw-r--  1 chris chris   786 Mar 25 11:13 initramfs_data.o
-rw-rw-r--  1 chris chris  1024 Oct 27  2005 initramfs_data.S
-rw-rw-r--  1 chris chris   113 Mar 25 11:13 initramfs_list
-rw-rw-r--  1 chris chris  1619 Oct 27  2005 Kconfig
-rw-rw-r--  1 chris chris  2048 Oct 27  2005 Makefile

The file initramfs_list contains a list of files that will be included in the initramfs archive. The default for recent Linux kernels looks like this:

dir /dev 0755 0 0
nod /dev/console 0600 0 0 c 5 1
dir /root 0700 0 0

This produces a small default directory structure containing the /root and /dev top-level directories, as well as a single device node representing the console. Add to this file to build your own initramfs. You can also specify a source for your initramfs files via the kernel-configuration facility. Enable INITRAMFS_SOURCE in your kernel configuration and point it to a location on your development workstation; the kernel build system will use those files as the source for your initramfs image.

The final output of this build directory is the initramfs_data_cpio.gz file. This is a compressed archive containing the files you specified (either through the initramfs_list or via the INITRAMFS_SOURCE kernel-configuration option). This archive is linked into the final kernel image. This is another advantage of initramfs over initrd : There is no need to load a separate initrd image at boot time, as is the case with initrd.

Оглавление книги


Генерация: 1.483. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз