</section>
</section>
+ <section id='building-an-initramfs-image'>
+ <title>Building an Initial RAM Filesystem (initramfs) Image</title>
+
+ <para>
+ initramfs is the successor of Initial RAM Disk (initrd).
+ It is a "copy in and out" (cpio) archive of the initial file system
+ that gets loaded into memory during the Linux startup process.
+ Because Linux uses the contents of the archive during
+ initialization, the initramfs needs to contain all of the device
+ drivers and tools needed to mount the final root filesystem.
+ </para>
+
+ <para>
+ To build an initramfs image and bundle it into the kernel, set the
+ following variables:
+ <literallayout class='monospaced'>
+ INITRAMFS_IMAGE_BUNDLE = "1"
+ INITRAMFS_IMAGE = "<replaceable>image_recipe_name</replaceable>"
+ </literallayout>
+ Setting the
+ <ulink url='&YOCTO_DOCS_REF_URL;#var-INITRAMFS_IMAGE_BUNDLE'><filename>INITRAMFS_IMAGE_BUNDLE</filename></ulink>
+ flag causes the initramfs created by the recipe
+ and defined by
+ <ulink url='&YOCTO_DOCS_REF_URL;#var-INITRAMFS_IMAGE'><filename>INITRAMFS_IMAGE</filename></ulink>
+ to be unpacked into the <filename>${B}/usr/</filename> directory.
+ The unpacked initramfs is then passed to the kernel's
+ <filename>Makefile</filename> using the
+ <ulink url='&YOCTO_DOCS_REF_URL;#var-CONFIG_INITRAMFS_SOURCE'><filename>CONFIG_INITRAMFS_SOURCE</filename></ulink>
+ variable, allowing initramfs to be built in to the kernel
+ normally.
+ <note>
+ The preferred method is to use the
+ <filename>INITRAMFS_IMAGE</filename> variable rather than the
+ <filename>INITRAMFS_TASK</filename> variable.
+ Setting <filename>INITRAMFS_TASK</filename> is supported for
+ backward compatibility.
+ However, use of this variable has circular dependency
+ problems.
+ See the
+ <ulink url='&YOCTO_DOCS_REF_URL;#var-INITRAMFS_IMAGE_BUNDLE'><filename>INITRAMFS_IMAGE_BUNDLE</filename></ulink>
+ variable for additional information on these dependency
+ problems.
+ </note>
+ </para>
+
+ <para>
+ The recipe that <filename>INITRAMFS_IMAGE</filename>
+ points to must produce a <filename>.cpio.gz</filename>,
+ <filename>.cpio.tar</filename>, <filename>.cpio.lz4</filename>,
+ <filename>.cpio.lzma</filename>, or
+ <filename>.cpio.xz</filename> file.
+ You can ensure you produce one of these <filename>.cpio.*</filename>
+ files by setting the
+ <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></ulink>
+ variable in your configuration file to one or more of the above
+ file types.
+ <note>
+ If you add items to the initramfs image by way of its recipe,
+ you should use
+ <ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_INSTALL'><filename>PACKAGE_INSTALL</filename></ulink>
+ rather than
+ <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>.
+ <filename>PACKAGE_INSTALL</filename> gives more direct control
+ of what is added to the image as compared to the defaults you
+ might not necessarily want that are set by the
+ <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-image'><filename>image</filename></ulink>
+ or
+ <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-core-image'><filename>core-image</filename></ulink>
+ classes.
+ </note>
+ </para>
+ </section>
+
<section id='configuring-the-kernel'>
<title>Configuring the Kernel</title>
</para>
<para>
- This means that each built kernel module is packaged separately and inter-module
- dependencies are created by parsing the <filename>modinfo</filename> output.
- If all modules are required, then installing the <filename>kernel-modules</filename>
- package installs all packages with modules and various other kernel packages
- such as <filename>kernel-vmlinux</filename>.
+ This means that each built kernel module is packaged separately and
+ inter-module dependencies are created by parsing the
+ <filename>modinfo</filename> output.
+ If all modules are required, then installing the
+ <filename>kernel-modules</filename> package installs all packages with
+ modules and various other kernel packages such as
+ <filename>kernel-vmlinux</filename>.
+ </para>
+
+ <para>
+ The <filename>kernel</filename> class contains logic that allows
+ you to embed an initial RAM filesystem (initramfs) image when
+ you build the kernel image.
+ For information on how to build an initramfs, see the
+ "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
+ section in the Yocto Project Development Manual.
</para>
<para>
<glossentry id='var-CONFIG_INITRAMFS_SOURCE'><glossterm>CONFIG_INITRAMFS_SOURCE</glossterm>
<info>
- CONFIG_INITRAMFS_SOURCE[doc] = "Identifies the initial RAM disk (initramfs) source files. The OpenEmbedded build system receives and uses this kernel Kconfig variable as an environment variable."
+ CONFIG_INITRAMFS_SOURCE[doc] = "Identifies the initial RAM filesystem (initramfs) source files. The OpenEmbedded build system receives and uses this kernel Kconfig variable as an environment variable."
</info>
<glossdef>
<para role="glossdeffirst">
<!-- <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
- Identifies the initial RAM disk (initramfs) source files.
+ Identifies the initial RAM filesystem (initramfs) source
+ files.
The OpenEmbedded build system receives and uses
this kernel Kconfig variable as an environment variable.
By default, the variable is set to null ("").
If you specify multiple directories and files, the
initramfs image will be the aggregate of all of them.
</para>
+
+ <para>
+ For information on creating an initramfs, see the
+ "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
+ section in the Yocto Project Development Manual.
+ </para>
</glossdef>
</glossentry>
variable to specify packages for installation.
Instead, use the
<link linkend='var-PACKAGE_INSTALL'><filename>PACKAGE_INSTALL</filename></link>
- variable, which allows the initial RAM disk (initramfs)
- recipe to use a fixed set of packages and not be
- affected by <filename>IMAGE_INSTALL</filename>.
+ variable, which allows the initial RAM filesystem
+ (initramfs) recipe to use a fixed set of packages and
+ not be affected by <filename>IMAGE_INSTALL</filename>.
+ For information on creating an initramfs, see the
+ "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
+ section in the Yocto Project Development Manual.
</note>
</para>
<glossentry id='var-INITRAMFS_FSTYPES'><glossterm>INITRAMFS_FSTYPES</glossterm>
<info>
- INITRAMFS_FSTYPES[doc] = "Defines the format for the output image of an initial RAM disk (initramfs), which is used during boot."
+ INITRAMFS_FSTYPES[doc] = "Defines the format for the output image of an initial RAM filesystem (initramfs), which is used during boot."
</info>
<glossdef>
<para role="glossdeffirst">
<!-- <para role="glossdeffirst"><imagedata fileref="figures/define-generic.png" /> -->
Defines the format for the output image of an initial
- RAM disk (initramfs), which is used during boot.
+ RAM filesystem (initramfs), which is used during boot.
Supported formats are the same as those supported by the
<link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
variable.
<ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
is "cpio.gz".
The Linux kernel's initramfs mechanism, as opposed to the
- initial RAM disk
+ initial RAM filesystem
<ulink url='https://en.wikipedia.org/wiki/Initrd'>initrd</ulink>
mechanism, expects an optionally compressed cpio
archive.
<glossentry id='var-INITRAMFS_IMAGE'><glossterm>INITRAMFS_IMAGE</glossterm>
<info>
- INITRAMFS_IMAGE[doc] = "Specifies the PROVIDES name of an image recipe that is used to build an initial RAM disk (initramfs) image."
+ INITRAMFS_IMAGE[doc] = "Specifies the PROVIDES name of an image recipe that is used to build an initial RAM filesystem (initramfs) image."
</info>
<glossdef>
<para role="glossdeffirst">
Specifies the
<link linkend='var-PROVIDES'><filename>PROVIDES</filename></link>
name of an image recipe that is used to build an initial
- RAM disk (initramfs) image.
+ RAM filesystem (initramfs) image.
An initramfs provides a temporary root filesystem used for
early system initialization (e.g. loading of modules
needed to locate and mount the "real" root filesystem).
</para>
<para>
- Finally, for more information you can also see the
+ For more information, you can also see the
<link linkend='var-INITRAMFS_IMAGE_BUNDLE'><filename>INITRAMFS_IMAGE_BUNDLE</filename></link>
variable, which allows the generated image to be bundled
inside the kernel image.
+ Additionally, for information on creating an initramfs, see
+ the
+ "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
+ section in the Yocto Project Development Manual.
</para>
</glossdef>
</glossentry>
<glossentry id='var-INITRAMFS_IMAGE_BUNDLE'><glossterm>INITRAMFS_IMAGE_BUNDLE</glossterm>
<info>
- INITRAMFS_IMAGE_BUNDLE[doc] = "Controls whether or not the image recipe specified by INITRAMFS_IMAGE is run through an extra pass (do_bundle_initramfs) during kernel compilation in order to build a single binary that contains both the kernel image and the initial RAM disk (initramfs)."
+ INITRAMFS_IMAGE_BUNDLE[doc] = "Controls whether or not the image recipe specified by INITRAMFS_IMAGE is run through an extra pass (do_bundle_initramfs) during kernel compilation in order to build a single binary that contains both the kernel image and the initial RAM filesystem (initramfs)."
</info>
<glossdef>
<para role="glossdeffirst">
is run through an extra pass
(<link linkend='ref-tasks-bundle_initramfs'><filename>do_bundle_initramfs</filename></link>)
during kernel compilation in order to build a single binary
- that contains both the kernel image and the initial RAM disk
- (initramfs).
+ that contains both the kernel image and the initial RAM
+ filesystem (initramfs) image.
This makes use of the
<link linkend='var-CONFIG_INITRAMFS_SOURCE'><filename>CONFIG_INITRAMFS_SOURCE</filename></link>
kernel feature.
See the
<ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta-poky/conf/local.conf.sample.extended'><filename>local.conf.sample.extended</filename></ulink>
file for additional information.
+ Also, for information on creating an initramfs, see the
+ "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
+ section in the Yocto Project Development Manual.
</para>
</glossdef>
</glossentry>
the
<link linkend='images-core-image-minimal-initramfs'><filename>core-image-minimal-initramfs</filename></link>
image.
- When working with an initial RAM disk (initramfs)
+ When working with an initial RAM filesystem (initramfs)
image, use the <filename>PACKAGE_INSTALL</filename>
variable.
+ For information on creating an initramfs, see the
+ "<ulink url='&YOCTO_DOCS_DEV_URL;#building-an-initramfs-image'>Building an Initial RAM Filesystem (initramfs) Image</ulink>"
+ section in the Yocto Project Development Manual.
</para>
</glossdef>
</glossentry>