From: Marcus Folkesson <marcus.folkesson@gmail.com>
To: openembedded-core@lists.openembedded.org, docs@lists.yoctoproject.org
Cc: Marcus Folkesson <marcus.folkesson@gmail.com>
Subject: [PATCH 1/2] image-bootfiles.bbclass: new class, copy boot files to /boot on rfs
Date: Tue, 21 May 2024 19:33:42 +0200 [thread overview]
Message-ID: <20240521173343.2954628-1-marcus.folkesson@gmail.com> (raw)
image-bootfiles class copy files listed IMAGE_BOOT_FILES
to the /boot directory of the root filesystem.
This is useful when there is no explicit boot partition but all boot
files should instead reside inside the root filesystem.
Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
---
meta/classes/image-bootfiles.bbclass | 69 ++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
create mode 100644 meta/classes/image-bootfiles.bbclass
diff --git a/meta/classes/image-bootfiles.bbclass b/meta/classes/image-bootfiles.bbclass
new file mode 100644
index 0000000000..850e14e4bb
--- /dev/null
+++ b/meta/classes/image-bootfiles.bbclass
@@ -0,0 +1,69 @@
+#
+# Writes IMAGE_BOOT_FILES to the /boot directory
+#
+# Copyright (C) 2024 Marcus Folkesson
+# Author: Marcus Folkesson <marcus.folkesson@gmail.com>
+#
+# Licensed under the MIT license, see COPYING.MIT for details
+# Inspired of bootimg-partition.py
+#
+# Usage: add INHERIT += "image-bootfiles" to your conf file
+#
+
+def bootfiles_populate(d):
+ import re
+ from glob import glob
+ import shutil
+
+ boot_files = d.getVar("IMAGE_BOOT_FILES")
+ deploy_image_dir = d.getVar("DEPLOY_DIR_IMAGE")
+ boot_dir = d.getVar("IMAGE_ROOTFS") + "/boot"
+ install_files = []
+
+ if boot_files is None:
+ return
+
+ # list of tuples (src_name, dst_name)
+ deploy_files = []
+ for src_entry in re.findall(r'[\w;\-\./\*]+', boot_files):
+ if ';' in src_entry:
+ dst_entry = tuple(src_entry.split(';'))
+ if not dst_entry[0] or not dst_entry[1]:
+ raise bb.parse.SkipRecipe('Malformed boot file entry: %s' % src_entry)
+ else:
+ dst_entry = (src_entry, src_entry)
+
+ deploy_files.append(dst_entry)
+
+ for deploy_entry in deploy_files:
+ src, dst = deploy_entry
+ if '*' in src:
+ # by default install files under their basename
+ entry_name_fn = os.path.basename
+ if dst != src:
+ # unless a target name was given, then treat name
+ # as a directory and append a basename
+ entry_name_fn = lambda name: \
+ os.path.join(dst,
+ os.path.basename(name))
+
+
+ srcs = glob(os.path.join(deploy_image_dir, src))
+ for entry in srcs:
+ src = os.path.relpath(entry, deploy_mage_dir)
+ entry_dst_name = entry_name_fn(entry)
+ install_files.append((src, entry_dst_name))
+ else:
+ install_files.append((src, dst))
+
+ for entry in install_files:
+ src, dst = entry
+ image_src = os.path.join(deploy_image_dir, src)
+ image_dst = os.path.join(boot_dir, dst)
+ shutil.copyfile(image_src, image_dst)
+
+python bootfiles () {
+ bootfiles_populate(d),
+}
+
+IMAGE_PREPROCESS_COMMAND += "bootfiles;"
--
2.44.0
next reply other threads:[~2024-05-21 17:28 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-21 17:33 Marcus Folkesson [this message]
2024-05-21 17:33 ` [PATCH 2/2] ref-manual: classes: add new image-bootfiles class Marcus Folkesson
2024-05-23 13:33 ` [OE-core] " Quentin Schulz
2024-05-23 13:56 ` Marcus Folkesson
2024-05-23 13:26 ` [OE-core] [PATCH 1/2] image-bootfiles.bbclass: new class, copy boot files to /boot on rfs Quentin Schulz
2024-05-23 13:38 ` [docs] " Alexander Kanavin
2024-05-23 13:48 ` Quentin Schulz
2024-05-23 13:49 ` Marcus Folkesson
2024-05-23 13:56 ` Quentin Schulz
-- strict thread matches above, loose matches on Subject: below --
2024-05-23 7:39 Marcus Folkesson
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=20240521173343.2954628-1-marcus.folkesson@gmail.com \
--to=marcus.folkesson@gmail.com \
--cc=docs@lists.yoctoproject.org \
--cc=openembedded-core@lists.openembedded.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.