diff mbox series

[meta-arago,master/kirkstone,v3,1/2] tisdk-tiny-initramfs: Create a smaller dedicated initramfs for tiny

Message ID 20230806043948.19613-1-reatmon@ti.com
State Superseded
Delegated to: Ryan Eatmon
Headers show
Series [meta-arago,master/kirkstone,v3,1/2] tisdk-tiny-initramfs: Create a smaller dedicated initramfs for tiny | expand

Commit Message

Ryan Eatmon Aug. 6, 2023, 4:39 a.m. UTC
The initramfs does not need grub-efi or the /boot directory since it
does not have to boot the system itself.  So create a version of the
tiny-image that strips those out and follow the oe-core methodology for
initramfs.

Signed-off-by: Ryan Eatmon <reatmon@ti.com>
---
 .../classes/remove-boot-dir.bbclass           |  8 ++++++
 .../images/tisdk-tiny-initramfs.bb            | 26 +++++++++++++++++++
 .../packagegroup-arago-initramfs.bb           |  4 +++
 3 files changed, 38 insertions(+)
 create mode 100644 meta-arago-distro/classes/remove-boot-dir.bbclass
 create mode 100644 meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb
 create mode 100644 meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb

Comments

Denys Dmytriyenko Aug. 14, 2023, 5:59 p.m. UTC | #1
On Sat, Aug 05, 2023 at 11:39:47PM -0500, Ryan Eatmon via lists.yoctoproject.org wrote:
> The initramfs does not need grub-efi or the /boot directory since it
> does not have to boot the system itself.  So create a version of the
> tiny-image that strips those out and follow the oe-core methodology for
> initramfs.

So, kernel.bbclass has a default weak dependency from kernel-base to 
kernel-image, which is meant to be broken/cleared if you don't need to 
pull kernel images into a rootfs.

To simplify, it looked like this some time ago:
RDEPENDS:kernel-base ?= "kernel-image"

Well, these days it's ${KERNEL_PACKAGE_NAME}-base and 
${KERNEL_PACKAGE_NAME}-image

So one can prevent pulling kernel images into rootfs:
https://git.openembedded.org/openembedded-core/tree/meta/conf/machine/include/qemu.inc#n19

But, this is a kernel variable that controls how kernel packages get 
generated with their dependencies. You can modify it either in the kernel 
recipe itself, ot globally in either <machine>.conf or <distro>.conf.

We also use the same mechanism to pull in kernel-devicetree package with 
DTBs and other required FW images.

Unfortunately, that also means it cannot be adjusted on a per-image basis.

Hence, in the past we used to do exactly the same by removing /boot directory 
for a initramfs image (you don't need to create a separate class though):
https://git.yoctoproject.org/meta-arago/tree/meta-arago-distro/recipes-bsp/netboot-initrd/netboot-initrd_0.0.1.bb?id=f9cf73fd8821af096fed7ad4d485af72c8ecc3ce


Oh, and RDEPENDS was recently replaced with RRECOMMENDS:
https://git.openembedded.org/openembedded-core/tree/meta/classes-recipe/kernel.bbclass#n708

Supposedly, this should make the dependency even weaker and allow 
breaking it inside image recipe with BAD_RECOMMENDATIONS, but my 
quick testing didn't work for some reason...


> Signed-off-by: Ryan Eatmon <reatmon@ti.com>
> ---
>  .../classes/remove-boot-dir.bbclass           |  8 ++++++
>  .../images/tisdk-tiny-initramfs.bb            | 26 +++++++++++++++++++
>  .../packagegroup-arago-initramfs.bb           |  4 +++
>  3 files changed, 38 insertions(+)
>  create mode 100644 meta-arago-distro/classes/remove-boot-dir.bbclass
>  create mode 100644 meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb
>  create mode 100644 meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb
> 
> diff --git a/meta-arago-distro/classes/remove-boot-dir.bbclass b/meta-arago-distro/classes/remove-boot-dir.bbclass
> new file mode 100644
> index 00000000..bd0c09fc
> --- /dev/null
> +++ b/meta-arago-distro/classes/remove-boot-dir.bbclass
> @@ -0,0 +1,8 @@
> +# Add a ROOTFS_POSTPROCESS_COMMAND that will remove some files from the
> +# rootfs for initramfs images.
> +
> +ROOTFS_POSTPROCESS_COMMAND += "remove_boot_dir;"
> +
> +remove_boot_dir () {
> +    rm -rf ${IMAGE_ROOTFS}/boot
> +}
> diff --git a/meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb b/meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb
> new file mode 100644
> index 00000000..0bea8276
> --- /dev/null
> +++ b/meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb
> @@ -0,0 +1,26 @@
> +SUMMARY = "Arago TI SDK super minimal base image for initramfs"
> +
> +DESCRIPTION = "Image meant for basic boot of linux kernel. Intended as\
> + bare system, this image does not package the kernel in the\
> + standard /boot folder in rootfs. Instead, it provides a base\
> + rootfs allowing kernel to be deployed elsewhere\
> + (tftp/separate boot partition/jtag log etc..) and boot\
> + the image.\
> +"
> +
> +LICENSE = "MIT"
> +
> +inherit core-image
> +inherit remove-boot-dir
> +
> +IMAGE_FEATURES:remove = "package-management"
> +
> +INITRAMFS_FSTYPES = "cpio cpio.xz"
> +INITRAMFS_MAXSIZE = "65536"
> +IMAGE_OVERHEAD_FACTOR = "1"
> +
> +IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
> +
> +PACKAGE_INSTALL = "packagegroup-arago-initramfs"
> +
> +export IMAGE_BASENAME = "tisdk-tiny-initramfs"
> diff --git a/meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb b/meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb
> new file mode 100644
> index 00000000..380cc0e3
> --- /dev/null
> +++ b/meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb
> @@ -0,0 +1,4 @@
> +
> +require recipes-core/packagegroups/packagegroup-core-boot.bb
> +
> +RDEPENDS:${PN}:remove = "grub-efi kernel"
> -- 
> 2.17.1
Ryan Eatmon Aug. 14, 2023, 6:02 p.m. UTC | #2
On 8/14/2023 12:59 PM, Denys Dmytriyenko wrote:
> On Sat, Aug 05, 2023 at 11:39:47PM -0500, Ryan Eatmon via lists.yoctoproject.org wrote:
>> The initramfs does not need grub-efi or the /boot directory since it
>> does not have to boot the system itself.  So create a version of the
>> tiny-image that strips those out and follow the oe-core methodology for
>> initramfs.
> 
> So, kernel.bbclass has a default weak dependency from kernel-base to
> kernel-image, which is meant to be broken/cleared if you don't need to
> pull kernel images into a rootfs.
> 
> To simplify, it looked like this some time ago:
> RDEPENDS:kernel-base ?= "kernel-image"
> 
> Well, these days it's ${KERNEL_PACKAGE_NAME}-base and
> ${KERNEL_PACKAGE_NAME}-image
> 
> So one can prevent pulling kernel images into rootfs:
> https://git.openembedded.org/openembedded-core/tree/meta/conf/machine/include/qemu.inc#n19
> 
> But, this is a kernel variable that controls how kernel packages get
> generated with their dependencies. You can modify it either in the kernel
> recipe itself, ot globally in either <machine>.conf or <distro>.conf.
> 
> We also use the same mechanism to pull in kernel-devicetree package with
> DTBs and other required FW images.
> 
> Unfortunately, that also means it cannot be adjusted on a per-image basis.
> 
> Hence, in the past we used to do exactly the same by removing /boot directory
> for a initramfs image (you don't need to create a separate class though):
> https://git.yoctoproject.org/meta-arago/tree/meta-arago-distro/recipes-bsp/netboot-initrd/netboot-initrd_0.0.1.bb?id=f9cf73fd8821af096fed7ad4d485af72c8ecc3ce

I thought I tried something like that... Maybe I had something else 
wrong that prevented it from working.  I'll try again.


> 
> Oh, and RDEPENDS was recently replaced with RRECOMMENDS:
> https://git.openembedded.org/openembedded-core/tree/meta/classes-recipe/kernel.bbclass#n708
> 
> Supposedly, this should make the dependency even weaker and allow
> breaking it inside image recipe with BAD_RECOMMENDATIONS, but my
> quick testing didn't work for some reason...
> 
> 
>> Signed-off-by: Ryan Eatmon <reatmon@ti.com>
>> ---
>>   .../classes/remove-boot-dir.bbclass           |  8 ++++++
>>   .../images/tisdk-tiny-initramfs.bb            | 26 +++++++++++++++++++
>>   .../packagegroup-arago-initramfs.bb           |  4 +++
>>   3 files changed, 38 insertions(+)
>>   create mode 100644 meta-arago-distro/classes/remove-boot-dir.bbclass
>>   create mode 100644 meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb
>>   create mode 100644 meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb
>>
>> diff --git a/meta-arago-distro/classes/remove-boot-dir.bbclass b/meta-arago-distro/classes/remove-boot-dir.bbclass
>> new file mode 100644
>> index 00000000..bd0c09fc
>> --- /dev/null
>> +++ b/meta-arago-distro/classes/remove-boot-dir.bbclass
>> @@ -0,0 +1,8 @@
>> +# Add a ROOTFS_POSTPROCESS_COMMAND that will remove some files from the
>> +# rootfs for initramfs images.
>> +
>> +ROOTFS_POSTPROCESS_COMMAND += "remove_boot_dir;"
>> +
>> +remove_boot_dir () {
>> +    rm -rf ${IMAGE_ROOTFS}/boot
>> +}
>> diff --git a/meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb b/meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb
>> new file mode 100644
>> index 00000000..0bea8276
>> --- /dev/null
>> +++ b/meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb
>> @@ -0,0 +1,26 @@
>> +SUMMARY = "Arago TI SDK super minimal base image for initramfs"
>> +
>> +DESCRIPTION = "Image meant for basic boot of linux kernel. Intended as\
>> + bare system, this image does not package the kernel in the\
>> + standard /boot folder in rootfs. Instead, it provides a base\
>> + rootfs allowing kernel to be deployed elsewhere\
>> + (tftp/separate boot partition/jtag log etc..) and boot\
>> + the image.\
>> +"
>> +
>> +LICENSE = "MIT"
>> +
>> +inherit core-image
>> +inherit remove-boot-dir
>> +
>> +IMAGE_FEATURES:remove = "package-management"
>> +
>> +INITRAMFS_FSTYPES = "cpio cpio.xz"
>> +INITRAMFS_MAXSIZE = "65536"
>> +IMAGE_OVERHEAD_FACTOR = "1"
>> +
>> +IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
>> +
>> +PACKAGE_INSTALL = "packagegroup-arago-initramfs"
>> +
>> +export IMAGE_BASENAME = "tisdk-tiny-initramfs"
>> diff --git a/meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb b/meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb
>> new file mode 100644
>> index 00000000..380cc0e3
>> --- /dev/null
>> +++ b/meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb
>> @@ -0,0 +1,4 @@
>> +
>> +require recipes-core/packagegroups/packagegroup-core-boot.bb
>> +
>> +RDEPENDS:${PN}:remove = "grub-efi kernel"
>> -- 
>> 2.17.1
diff mbox series

Patch

diff --git a/meta-arago-distro/classes/remove-boot-dir.bbclass b/meta-arago-distro/classes/remove-boot-dir.bbclass
new file mode 100644
index 00000000..bd0c09fc
--- /dev/null
+++ b/meta-arago-distro/classes/remove-boot-dir.bbclass
@@ -0,0 +1,8 @@ 
+# Add a ROOTFS_POSTPROCESS_COMMAND that will remove some files from the
+# rootfs for initramfs images.
+
+ROOTFS_POSTPROCESS_COMMAND += "remove_boot_dir;"
+
+remove_boot_dir () {
+    rm -rf ${IMAGE_ROOTFS}/boot
+}
diff --git a/meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb b/meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb
new file mode 100644
index 00000000..0bea8276
--- /dev/null
+++ b/meta-arago-distro/recipes-core/images/tisdk-tiny-initramfs.bb
@@ -0,0 +1,26 @@ 
+SUMMARY = "Arago TI SDK super minimal base image for initramfs"
+
+DESCRIPTION = "Image meant for basic boot of linux kernel. Intended as\
+ bare system, this image does not package the kernel in the\
+ standard /boot folder in rootfs. Instead, it provides a base\
+ rootfs allowing kernel to be deployed elsewhere\
+ (tftp/separate boot partition/jtag log etc..) and boot\
+ the image.\
+"
+
+LICENSE = "MIT"
+
+inherit core-image
+inherit remove-boot-dir
+
+IMAGE_FEATURES:remove = "package-management"
+
+INITRAMFS_FSTYPES = "cpio cpio.xz"
+INITRAMFS_MAXSIZE = "65536"
+IMAGE_OVERHEAD_FACTOR = "1"
+
+IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
+
+PACKAGE_INSTALL = "packagegroup-arago-initramfs"
+
+export IMAGE_BASENAME = "tisdk-tiny-initramfs"
diff --git a/meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb b/meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb
new file mode 100644
index 00000000..380cc0e3
--- /dev/null
+++ b/meta-arago-distro/recipes-core/packagegroups/packagegroup-arago-initramfs.bb
@@ -0,0 +1,4 @@ 
+
+require recipes-core/packagegroups/packagegroup-core-boot.bb
+
+RDEPENDS:${PN}:remove = "grub-efi kernel"