mirror of
https://git.yoctoproject.org/poky
synced 2026-05-09 17:39:31 +00:00
928a93d516
This patch makes sure the directory which will contain the systemd configuration (loader.conf) is created before the configuration file is written, fixing errors when it tried to write it to a non-existent directory (From OE-Core rev: f4ba23212c97fb8c3351a3cf981ee355ae2fc9b1) Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
126 lines
3.8 KiB
Plaintext
126 lines
3.8 KiB
Plaintext
# Copyright (C) 2016 Intel Corporation
|
|
#
|
|
# Released under the MIT license (see COPYING.MIT)
|
|
|
|
# systemd-boot.bbclass - The "systemd-boot" is essentially the gummiboot merged into systemd.
|
|
# The original standalone gummiboot project is dead without any more
|
|
# maintenance.
|
|
#
|
|
# Set EFI_PROVIDER = "systemd-boot" to use systemd-boot on your live images instead of grub-efi
|
|
# (images built by image-live.bbclass or image-vm.bbclass)
|
|
|
|
do_bootimg[depends] += "${MLPREFIX}systemd-boot:do_deploy"
|
|
do_bootdirectdisk[depends] += "${MLPREFIX}systemd-boot:do_deploy"
|
|
|
|
EFIDIR = "/EFI/BOOT"
|
|
|
|
SYSTEMD_BOOT_CFG ?= "${S}/loader.conf"
|
|
SYSTEMD_BOOT_ENTRIES ?= ""
|
|
SYSTEMD_BOOT_TIMEOUT ?= "10"
|
|
|
|
# Need UUID utility code.
|
|
inherit fs-uuid
|
|
|
|
efi_populate() {
|
|
DEST=$1
|
|
|
|
EFI_IMAGE="systemd-bootia32.efi"
|
|
DEST_EFI_IMAGE="bootia32.efi"
|
|
if [ "${TARGET_ARCH}" = "x86_64" ]; then
|
|
EFI_IMAGE="systemd-bootx64.efi"
|
|
DEST_EFI_IMAGE="bootx64.efi"
|
|
fi
|
|
|
|
install -d ${DEST}${EFIDIR}
|
|
# systemd-boot requires these paths for configuration files
|
|
# they are not customizable so no point in new vars
|
|
install -d ${DEST}/loader
|
|
install -d ${DEST}/loader/entries
|
|
install -m 0644 ${DEPLOY_DIR_IMAGE}/${EFI_IMAGE} ${DEST}${EFIDIR}/${DEST_EFI_IMAGE}
|
|
install -m 0644 ${SYSTEMD_BOOT_CFG} ${DEST}/loader/loader.conf
|
|
for i in ${SYSTEMD_BOOT_ENTRIES}; do
|
|
install -m 0644 ${i} ${DEST}/loader/entries
|
|
done
|
|
}
|
|
|
|
efi_iso_populate() {
|
|
iso_dir=$1
|
|
efi_populate $iso_dir
|
|
mkdir -p ${EFIIMGDIR}/${EFIDIR}
|
|
cp $iso_dir/${EFIDIR}/* ${EFIIMGDIR}${EFIDIR}
|
|
cp $iso_dir/vmlinuz ${EFIIMGDIR}
|
|
EFIPATH=$(echo "${EFIDIR}" | sed 's/\//\\/g')
|
|
echo "fs0:${EFIPATH}\\${DEST_EFI_IMAGE}" > ${EFIIMGDIR}/startup.nsh
|
|
if [ -f "$iso_dir/initrd" ] ; then
|
|
cp $iso_dir/initrd ${EFIIMGDIR}
|
|
fi
|
|
}
|
|
|
|
efi_hddimg_populate() {
|
|
efi_populate $1
|
|
}
|
|
|
|
python build_efi_cfg() {
|
|
s = d.getVar("S")
|
|
labels = d.getVar('LABELS')
|
|
if not labels:
|
|
bb.debug(1, "LABELS not defined, nothing to do")
|
|
return
|
|
|
|
if labels == []:
|
|
bb.debug(1, "No labels, nothing to do")
|
|
return
|
|
|
|
cfile = d.getVar('SYSTEMD_BOOT_CFG')
|
|
cdir = os.path.dirname(cfile)
|
|
if not os.path.exists(cdir):
|
|
os.makedirs(cdir)
|
|
try:
|
|
cfgfile = open(cfile, 'w')
|
|
except OSError:
|
|
bb.fatal('Unable to open %s' % cfile)
|
|
|
|
cfgfile.write('# Automatically created by OE\n')
|
|
cfgfile.write('default %s\n' % (labels.split()[0]))
|
|
timeout = d.getVar('SYSTEMD_BOOT_TIMEOUT')
|
|
if timeout:
|
|
cfgfile.write('timeout %s\n' % timeout)
|
|
else:
|
|
cfgfile.write('timeout 10\n')
|
|
cfgfile.close()
|
|
|
|
for label in labels.split():
|
|
localdata = d.createCopy()
|
|
|
|
overrides = localdata.getVar('OVERRIDES')
|
|
if not overrides:
|
|
bb.fatal('OVERRIDES not defined')
|
|
|
|
entryfile = "%s/%s.conf" % (s, label)
|
|
d.appendVar("SYSTEMD_BOOT_ENTRIES", " " + entryfile)
|
|
try:
|
|
entrycfg = open(entryfile, "w")
|
|
except OSError:
|
|
bb.fatal('Unable to open %s' % entryfile)
|
|
localdata.setVar('OVERRIDES', label + ':' + overrides)
|
|
bb.data.update_data(localdata)
|
|
|
|
entrycfg.write('title %s\n' % label)
|
|
entrycfg.write('linux /vmlinuz\n')
|
|
|
|
append = localdata.getVar('APPEND')
|
|
initrd = localdata.getVar('INITRD')
|
|
|
|
if initrd:
|
|
entrycfg.write('initrd /initrd\n')
|
|
lb = label
|
|
if label == "install":
|
|
lb = "install-efi"
|
|
entrycfg.write('options LABEL=%s ' % lb)
|
|
if append:
|
|
append = replace_rootfs_uuid(d, append)
|
|
entrycfg.write('%s' % append)
|
|
entrycfg.write('\n')
|
|
entrycfg.close()
|
|
}
|