wic: bootimg-partition: Add support to specify a custom extlinux.conf

Add support to specify a custom extlinux.conf via something like:
    bootloader --configfile="extlinux.conf"

(From OE-Core rev: 33f85c8bf80d70f00eeccd9ab3dfa417c0fc7df1)

Signed-off-by: Kevin Hao <kexin.hao@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Kevin Hao
2018-08-20 18:42:24 +08:00
committed by Richard Purdie
parent 99506b0017
commit 511b7a565d

View File

@@ -30,6 +30,7 @@ import re
from glob import glob
from wic import WicError
from wic.engine import get_custom_config
from wic.pluginbase import SourcePlugin
from wic.misc import exec_cmd, get_bitbake_var
@@ -114,38 +115,52 @@ class BootimgPartitionPlugin(SourcePlugin):
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')
configfile = cr.ks.bootloader.configfile
custom_cfg = None
if configfile:
custom_cfg = get_custom_config(configfile)
if custom_cfg:
# Use a custom configuration for extlinux.conf
extlinux_conf = custom_cfg
logger.debug("Using custom configuration file "
"%s for extlinux.cfg", configfile)
else:
raise WicError("configfile is specified but failed to "
"get it from %s." % configfile)
# 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 custom_cfg:
# 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')
if not kernel_name:
raise WicError('No 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))
# 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 '')
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)