From: Quentin Schulz <quentin.schulz@cherry.de>
To: antonin.godard@bootlin.com, docs@lists.yoctoproject.org
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Alejandro <alejandro@enedino.org>
Subject: Re: [docs] [yocto-docs][PATCH] dev-manual/building: document the initramfs-framework recipe
Date: Tue, 14 Jan 2025 10:11:10 +0100 [thread overview]
Message-ID: <bdbdaed6-415f-4f67-8fd8-52cf90608104@cherry.de> (raw)
In-Reply-To: <20250103-initramfs-framework-v1-1-bfc2cf950842@bootlin.com>
Hi Antonin,
On 1/3/25 5:34 PM, Antonin Godard via lists.yoctoproject.org wrote:
> [ YOCTO #14747 ]
>
> Adding a initramfs is a common task, and the way oe-core offers to do so
> is by using the initramfs-framework recipe and companion modules. There
> was already documentation on adding an initramfs but the documentation
> was lacking details on this framework. Add it before the multiconfig
> section because it is a bit more important IMO.
>
> Reported-by: Alejandro <alejandro@enedino.org>
> Signed-off-by: Antonin Godard <antonin.godard@bootlin.com>
> ---
> documentation/dev-manual/building.rst | 74 ++++++++++++++++++++++++++++++++++-
> 1 file changed, 73 insertions(+), 1 deletion(-)
>
> diff --git a/documentation/dev-manual/building.rst b/documentation/dev-manual/building.rst
> index fe502690ddc45694a9b0ae2d5e98894fe5153d74..fe720fcacc562c70bb886062153b587f5df11651 100644
> --- a/documentation/dev-manual/building.rst
> +++ b/documentation/dev-manual/building.rst
> @@ -280,7 +280,9 @@ Follow these steps to create an :term:`Initramfs` image:
> #. *Create the Initramfs Image Recipe:* You can reference the
> ``core-image-minimal-initramfs.bb`` recipe found in the
> ``meta/recipes-core`` directory of the :term:`Source Directory`
> - as an example from which to work.
> + as an example from which to work. The ``core-image-minimal-initramfs`` recipe
> + is based on the :ref:`initramfs-framework <dev-manual/building:Customizing an
> + Initramfs using \`\`initramfs-framework\`\`>` recipe described below.
>
> #. *Decide if You Need to Bundle the Initramfs Image Into the Kernel
> Image:* If you want the :term:`Initramfs` image that is built to be bundled
> @@ -308,6 +310,76 @@ Follow these steps to create an :term:`Initramfs` image:
> and bundled with the kernel image if you used the
> :term:`INITRAMFS_IMAGE_BUNDLE` variable described earlier.
>
> +Customizing an Initramfs using ``initramfs-framework``
> +------------------------------------------------------
> +
> +The ``core-image-minimal-initramfs.bb`` recipe found in
> +:oe_git:`meta/recipes-core/images
> +</openembedded-core/tree/meta/recipes-core/images>` uses the
> +:oe_git:`initramfs-framework_1.0.bb
> +</openembedded-core/tree/meta/recipes-core/initrdscripts/initramfs-framework_1.0.bb>`
> +recipe as its base component. The goal of the ``initramfs-framework`` recipe is
> +to provide the building blocks to build a customized :term:`Initramfs`.
> +
> +The ``initramfs-framework`` recipe relies on shell initialization scripts
> +defined in :oe_git:`meta/recipes-core/initrdscripts/initramfs-framework
> +</openembedded-core/tree/meta/recipes-core/initrdscripts/initramfs-framework>`. Since some of
> +these scripts do not apply for all use cases, the ``initramfs-framework`` recipe
> +defines different packages:
> +
> +- ``initramfs-framework-base``: this package installs the basic components of
> + an :term:`Initramfs`, such as the ``init`` script or the ``/dev/console``
> + character special file. This package should always be installed if using any
> + of the additional modules below.
Not sure the last sentence is necessary as it's listed in the RDEPENDS
of each package, so the user doesn't need to do anything. I can suggest
to either remove it or change it to something like "As this package is a
runtime dependency of all modules listed below, it is automatically
pulled in when one of the modules is installed in the image."?
This package should be added as a runtime dependency of custom initramfs
modules but that is specified at the end of the section, so I don't
think we need to specify it here?
> +- ``initramfs-module-exec``: support for execution of applications.
> +- ``initramfs-module-mdev``: support for `mdev
> + <https://wiki.gentoo.org/wiki/Mdev>`__.
> +- ``initramfs-module-udev``: support for :wikipedia:`Udev <Udev>`.
> +- ``initramfs-module-e2fs``: support for :wikipedia:`ext4/ext3/ext2
> + <Extended_file_system>` filesystems.
> +- ``initramfs-module-nfsrootfs``: support for locating and mounting the root
> + partition via :wikipedia:`NFS <Network_File_System>`.
> +- ``initramfs-module-rootfs``: support for locating and mounting the root
> + partition.
> +- ``initramfs-module-debug``: dynamic debug support.
> +- ``initramfs-module-lvm``: :wikipedia:`LVM <Logical_volume_management>` rootfs support.
> +- ``initramfs-module-overlayroot``: support for mounting a read-write overlay
> + on top of a read-only root filesystem.
> +
> +In addition to the packages defined by the ``initramfs-framework`` recipe
> +itself, the following packages are defined by the recipes present in
> +:oe_git:`meta/recipes-core/initrdscripts </openembedded-core/tree/meta/recipes-core/initrdscripts>`:
> +
> +- ``initramfs-module-install``: module to create and install a partition layout
> + on a selected block device.
> +- ``initramfs-module-install-efi``: module to create and install an EFI
> + partition layout on a selected block device.
> +- ``initramfs-module-setup-live``: module to start a shell in the
> + :term:`Initramfs` if ``root=/dev/ram0`` in passed in the `Kernel command-line
> + <https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html>`__
> + or the ``root=`` parameter was not passed.
> +
> +To customize the :term:`Initramfs`, you can add or remove packages listed
> +earlier from the :term:`PACKAGE_INSTALL` variable with a :ref:`bbappend
> +<dev-manual/layers:Appending Other Layers Metadata With Your Layer>` on the
> +``core-image-minimal-initramfs`` recipe, or create a custom recipe for the
> +:term:`Initramfs` taking ``core-image-minimal-initramfs`` as example.
> +
> +Custom scripts can be added to the :term:`Initramfs` by writing your own
> +recipes. The recipes are conventionally named ``initramfs-module-<module name>``
> +where ``<module name>`` is the name of the module. The recipe should set its
> +variable :term:`RDEPENDS` to ``initramfs-framework-base`` and the packages on
s/the packages/the other packages/ ?
> +which the module depends on at runtime.
> +
s/on// as it's duplicated by "on which"
So either,
the packages which the module depends on at runtime
or
the packages on which the module depends at runtime
> +The recipe must install shell initialization scripts in :term:`${D} <D>`\
> +``/init.d`` and must follow the ``<number>-<script name>`` naming where:
s/naming/naming scheme/ ? or "convention"?
> +
> +- ``<number>`` is a two-digit number that affects the execution order of the
We should make it very clear that it needs to be a two-digit number,
yes, even between 0 and 9 as it's sorted alphabetically, so 10-something
would be called before 8-else (because 1 < 8), hence why it needs to be
08-else instead.
> + script compared to others. For example, the script ``80-setup-live`` would be
> + executed after ``01-udev`` because 80 is greater than 01.
> +
> +- ``<script name>`` is the script name which can you can choose freely.
-can
Yes, BUT, if there are more than one script using the same number, the
order in which the scripts are run is the alphabetical order I believe.
Looks good to me otherwise,
Cheers,
Quentin
prev parent reply other threads:[~2025-01-14 9:11 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-03 16:34 [yocto-docs][PATCH] dev-manual/building: document the initramfs-framework recipe Antonin Godard
2025-01-14 9:11 ` Quentin Schulz [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bdbdaed6-415f-4f67-8fd8-52cf90608104@cherry.de \
--to=quentin.schulz@cherry.de \
--cc=alejandro@enedino.org \
--cc=antonin.godard@bootlin.com \
--cc=docs@lists.yoctoproject.org \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox