[oe-commits] [openembedded-core] 04/06: wic: bootimg-partition: Add support to create the u-boot boot config file

git at git.openembedded.org git at git.openembedded.org
Wed Aug 15 09:03:46 UTC 2018


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit 4e9cb339ec4898fe76aaf7021ade17c45328e434
Author: Kevin Hao <kexin.hao at windriver.com>
AuthorDate: Tue Aug 14 09:31:24 2018 +0800

    wic: bootimg-partition: Add support to create the u-boot boot config file
    
    By leveraging the distro boot command feature in the u-boot, we can
    compose the corresponding extlinux.conf when creating the wic image,
    and let u-boot boot the kernel automatically. For more detail about
    the u-boot distro boot command feature, please see doc/README.distro
    in u-boot source files.
    
    Signed-off-by: Kevin Hao <kexin.hao at windriver.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 .../lib/wic/plugins/source/bootimg-partition.py    | 51 ++++++++++++++++++++--
 1 file changed, 48 insertions(+), 3 deletions(-)

diff --git a/scripts/lib/wic/plugins/source/bootimg-partition.py b/scripts/lib/wic/plugins/source/bootimg-partition.py
index 364b189..7d61595 100644
--- a/scripts/lib/wic/plugins/source/bootimg-partition.py
+++ b/scripts/lib/wic/plugins/source/bootimg-partition.py
@@ -48,8 +48,12 @@ class BootimgPartitionPlugin(SourcePlugin):
                              oe_builddir, bootimg_dir, kernel_dir,
                              native_sysroot):
         """
-        Called before do_prepare_partition()
+        Called before do_prepare_partition(), create u-boot specific boot config
         """
+        hdddir = "%s/boot.%d" % (cr_workdir, part.lineno)
+        install_cmd = "install -d %s" % hdddir
+        exec_cmd(install_cmd)
+
         if not kernel_dir:
             kernel_dir = get_bitbake_var("DEPLOY_DIR_IMAGE")
             if not kernel_dir:
@@ -107,6 +111,49 @@ class BootimgPartitionPlugin(SourcePlugin):
             else:
                 cls.install_task.append((src, dst))
 
+        if source_params.get('loader') != "u-boot":
+            return
+
+        # The kernel types supported by the sysboot of u-boot
+        kernel_types = ["uImage", "zImage", "Image", "vmlinux", "fitImage"]
+        has_dtb = False
+        fdt_dir = '/'
+        kernel_name = None
+        for task in cls.install_task:
+            src, dst = task
+            # Find the kernel image name
+            for image in kernel_types:
+                if re.match(image, src):
+                    if not kernel_name:
+                        kernel_name = os.path.join('/', dst)
+                    else:
+                        raise WicError('Multi kernel file founded')
+
+            # We suppose that all the dtb are in the same directory
+            if re.search(r'\.dtb', src) and fdt_dir == '/':
+                has_dtb = True
+                fdt_dir = os.path.join(fdt_dir, os.path.dirname(dst))
+
+        if not kernel_name:
+            raise WicError('No kernel file founded')
+
+        # Compose the extlinux.conf
+        extlinux_conf = "default Yocto\n"
+        extlinux_conf += "label Yocto\n"
+        extlinux_conf += "   kernel %s\n" % kernel_name
+        if has_dtb:
+            extlinux_conf += "   fdtdir %s\n" % fdt_dir
+        bootloader = cr.ks.bootloader
+        extlinux_conf += "append root=%s rootwait %s\n" \
+                         % (cr.rootdev, bootloader.append if bootloader.append else '')
+
+        install_cmd = "install -d %s/extlinux/" % hdddir
+        exec_cmd(install_cmd)
+        cfg = open("%s/extlinux/extlinux.conf" % hdddir, "w")
+        cfg.write(extlinux_conf)
+        cfg.close()
+
+
     @classmethod
     def do_prepare_partition(cls, part, source_params, cr, cr_workdir,
                              oe_builddir, bootimg_dir, kernel_dir,
@@ -119,8 +166,6 @@ class BootimgPartitionPlugin(SourcePlugin):
         - copies all files listed in IMAGE_BOOT_FILES variable
         """
         hdddir = "%s/boot.%d" % (cr_workdir, part.lineno)
-        install_cmd = "install -d %s" % hdddir
-        exec_cmd(install_cmd)
 
         if not kernel_dir:
             kernel_dir = get_bitbake_var("DEPLOY_DIR_IMAGE")

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list