[OE-core] [PATCH 1/1] INITRD var: make it a list of filesystem images

Hart, Darren darren.hart at intel.com
Mon Aug 4 16:38:26 UTC 2014


On 7/29/14, 11:34, "Kamble, Nitin A" <nitin.a.kamble at intel.com> wrote:

>From: Nitin A Kamble <nitin.a.kamble at intel.com>

Hi Nitin,

Generally speaking this looks like a good improvement. I don't have any
major technical concerns, but we do need to address some grammatical
issues in the commit and the docs below to make sure people can follow the
intent here.

>
>The initrd image used by the Linux kernel is list of file system images
>concatenated together and presented as a single initrd file at boot time.
>
>So far the initrd is a single filesystem image. But in cases like to
>support
>early microcode loading, the initrd image need to have multiple filesystem
>images concatenated together.

Consider:

Currently, the INITRD variable is a single filesystem image. For optional
early boot features, such as microcode loading, a modular approach would
provide the most flexibility and is minimally invasive. Converting INITRD
to a list of images to be concatenated accomplishes this.

>
>This commit is extending the INITRD variable from a single filesystem
>image
>to a list of filesystem images to satisfy the need mentioned above.

Can now drop this paragraph.

>
>Signed-off-by: Nitin A Kamble <nitin.a.kamble at intel.com>
>---
> documentation/ref-manual/ref-classes.xml   |  4 ++--
> documentation/ref-manual/ref-variables.xml |  2 +-
> meta/classes/boot-directdisk.bbclass       | 13 ++++++++++---
> meta/classes/bootimg.bbclass               | 27
>++++++++++++++++++++++-----
> meta/classes/grub-efi.bbclass              |  2 +-
> meta/classes/syslinux.bbclass              |  2 +-
> meta/conf/documentation.conf               |  2 +-
> 7 files changed, 38 insertions(+), 14 deletions(-)
>
>diff --git a/documentation/ref-manual/ref-classes.xml
>b/documentation/ref-manual/ref-classes.xml
>index e7e9942..0bf3546 100644
>--- a/documentation/ref-manual/ref-classes.xml
>+++ b/documentation/ref-manual/ref-classes.xml
>@@ -881,7 +881,7 @@
>         <itemizedlist>
>             <listitem><para>
>                 <link
>linkend='var-INITRD'><filename>INITRD</filename></link>:
>-                Indicates a filesystem image to use as an initrd
>(optional).
>+                Indicates list of filesystem images to concatenate and
>use as an initrd (optional).


Missing article:            ^ a


>                 </para></listitem>
>             <listitem><para>
>                 <link
>linkend='var-ROOTFS'><filename>ROOTFS</filename></link>:
>@@ -2864,7 +2864,7 @@
>         The class supports the following variables:
>         <itemizedlist>
>             <listitem><para><emphasis><link
>linkend='var-INITRD'><filename>INITRD</filename></link>:</emphasis>
>-                Indicates a filesystem image to use as an initial RAM
>disk
>+                Indicates list of filesystem images to concatenate and
>use as an initial RAM disk

Missing article:             ^ a

>                 (initrd).
>                 This variable is optional.</para></listitem>
>             <listitem><para><emphasis><link
>linkend='var-ROOTFS'><filename>ROOTFS</filename></link>:</emphasis>
>diff --git a/documentation/ref-manual/ref-variables.xml
>b/documentation/ref-manual/ref-variables.xml
>index b4d6e71..16e3ed6 100644
>--- a/documentation/ref-manual/ref-variables.xml
>+++ b/documentation/ref-manual/ref-variables.xml
>@@ -4020,7 +4020,7 @@ recipes-graphics/xorg-font/font-alias_1.0.3.bb:PR =
>"${INC_PR}.3"
>         <glossentry id='var-INITRD'><glossterm>INITRD</glossterm>
>             <glossdef>
>                 <para>
>-                    Indicates a filesystem image to use as an initial RAM
>+                    Indicates list of filesystem images to concatenate
>and use as an initial RAM

ditto

>                     disk (<filename>initrd</filename>).
>                 </para>
> 
>diff --git a/meta/classes/boot-directdisk.bbclass
>b/meta/classes/boot-directdisk.bbclass
>index 0da9932..995d3e7 100644
>--- a/meta/classes/boot-directdisk.bbclass
>+++ b/meta/classes/boot-directdisk.bbclass
>@@ -71,10 +71,17 @@ boot_direct_populate() {
> 	# Install bzImage, initrd, and rootfs.img in DEST for all loaders to
>use.
> 	install -m 0644 ${STAGING_KERNEL_DIR}/bzImage $dest/vmlinuz
> 
>-	if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then
>-		install -m 0644 ${INITRD} $dest/initrd
>+	# initrd is made of concatenation of multiple filesystem images

# Assemble the initrd from the list of filesystem images

>+	if [ -n "${INITRD}" ]; then
>+		rm -f $dest/initrd
>+		for fs in ${INITRD}
>+		do
>+			if [ -n "${fs}" ] && [ -s "${fs}" ]; then


The -n test is unnecessary here. How would "for fs in ${INITRD}" result in
an fs of "" ?


>+				cat ${fs} >> $dest/ignited
>+			fi

Some kind of a warning at least is warranted if a file appears in the
INITRD list but is either 0-size or non-existent.

>+		done
>+		chmod 0644 $dest/initrd
> 	fi
>-
> }
> 
> build_boot_dd() {
>diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass
>index d52aace..7b3ce65 100644
>--- a/meta/classes/bootimg.bbclass
>+++ b/meta/classes/bootimg.bbclass
>@@ -18,7 +18,7 @@
> # an hdd)
> 
> # External variables (also used by syslinux.bbclass)
>-# ${INITRD} - indicates a filesystem image to use as an initrd (optional)
>+# ${INITRD} - indicates a list of filesystem images to concatenate and
>use as an initrd (optional)
> # ${COMPRESSISO} - Transparent compress ISO, reduce size ~40% if set to 1
> # ${NOISO}  - skip building the ISO image if set to 1
> # ${NOHDD}  - skip building the HDD image if set to 1
>@@ -67,9 +67,17 @@ populate() {
> 
> 	# Install bzImage, initrd, and rootfs.img in DEST for all loaders to
>use.
> 	install -m 0644 ${STAGING_KERNEL_DIR}/bzImage ${DEST}/vmlinuz
>-
>-	if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then
>-		install -m 0644 ${INITRD} ${DEST}/initrd
>+	
>+	# initrd is made of concatenation of multiple filesystem images
>+	if [ -n "${INITRD}" ]; then
>+		rm -f ${DEST}/initrd
>+		for fs in ${INITRD}
>+		do
>+			if [ -s "${fs}" ]; then
>+				cat ${fs} >> ${DEST}/initrd
>+			fi
>+		done

Same test commentary here.

>+		chmod 0644 ${DEST}/initrd
> 	fi
> 
> 	if [ -n "${ROOTFS}" ] && [ -s "${ROOTFS}" ]; then
>@@ -80,10 +88,19 @@ populate() {
> 
> build_iso() {
> 	# Only create an ISO if we have an INITRD and NOISO was not set
>-	if [ -z "${INITRD}" ] || [ ! -s "${INITRD}" ] || [ "${NOISO}" = "1" ];
>then
>+	if [ -z "${INITRD}" ] || [ "${NOISO}" = "1" ]; then
> 		bbnote "ISO image will not be created."
> 		return
> 	Fi

Perhaps the -s test should be replaced with a -s of $dest/initrd?

>+	# ${INITRD} is a list of multiple filesystem images
>+	for fs in ${INITRD}
>+	do
>+		if [ ! -s "${fs}" ]; then
>+			bbnote "ISO image will not be created. ${fs} is invalid."
>+			return
>+		fi
>+	done

This additional loop could be eliminated by including this test above.
Right? Or am I missing something subtle here?

>+
> 
> 	populate ${ISODIR}
> 
>diff --git a/meta/classes/grub-efi.bbclass b/meta/classes/grub-efi.bbclass
>index 505d032..47bd35e 100644
>--- a/meta/classes/grub-efi.bbclass
>+++ b/meta/classes/grub-efi.bbclass
>@@ -7,7 +7,7 @@
> # Provide grub-efi specific functions for building bootable images.
> 
> # External variables
>-# ${INITRD} - indicates a filesystem image to use as an initrd (optional)
>+# ${INITRD} - indicates a list of filesystem images to concatenate and
>use as an initrd (optional)

Used the "a" here, good :-)

> # ${ROOTFS} - indicates a filesystem image to include as the root
>filesystem (optional)
> # ${GRUB_GFXSERIAL} - set this to 1 to have graphics and serial in the
>boot menu
> # ${LABELS} - a list of targets for the automatic config
>diff --git a/meta/classes/syslinux.bbclass b/meta/classes/syslinux.bbclass
>index b9701bf..d6498d9 100644
>--- a/meta/classes/syslinux.bbclass
>+++ b/meta/classes/syslinux.bbclass
>@@ -5,7 +5,7 @@
> # Provide syslinux specific functions for building bootable images.
> 
> # External variables
>-# ${INITRD} - indicates a filesystem image to use as an initrd (optional)
>+# ${INITRD} - indicates a list of filesystem images to concatenate and
>use as an initrd (optional)
> # ${ROOTFS} - indicates a filesystem image to include as the root
>filesystem (optional)
> # ${AUTO_SYSLINUXMENU} - set this to 1 to enable creating an automatic
>menu
> # ${LABELS} - a list of targets for the automatic config
>diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
>index 7fa3f31..31fbd6c 100644
>--- a/meta/conf/documentation.conf
>+++ b/meta/conf/documentation.conf
>@@ -225,7 +225,7 @@ INHIBIT_PACKAGE_STRIP[doc] = "If set to "1", causes
>the build to not strip binar
> INHERIT[doc] = "Causes the named class to be inherited at this point
>during parsing. The variable is only valid in configuration files."
> INHERIT_DISTRO[doc] = "Lists classes that will be inherited at the
>distribution level. It is unlikely that you want to edit this variable."
> INITRAMFS_FSTYPES[doc] = "Defines the format for the output image of an
>initial RAM disk (initramfs), which is used during boot."
>-INITRD[doc] = "Indicates a filesystem image to use as an initial RAM
>disk (initrd)."
>+INITRD[doc] = "Indicates list of filesystem images to concatenate and
>use as an initial RAM disk (initrd)."

"a list"

> INITSCRIPT_NAME[doc] = "The filename of the initialization script as
>installed to ${sysconfdir}/init.d."
> INITSCRIPT_PACKAGES[doc] = "A list of the packages that contain
>initscripts. This variable is used in recipes when using
>update-rc.d.bbclass. The variable is optional and defaults to the PN
>variable."
> INITSCRIPT_PARAMS[doc] = "Specifies the options to pass to update-rc.d.
>The variable is mandatory and is used in recipes when using
>update-rc.d.bbclass."
>-- 
>1.8.1.4
>
>

Thanks,

-- 
Darren Hart					Open Source Technology Center
darren.hart at intel.com				            Intel Corporation





More information about the Openembedded-core mailing list