boot-directdisk: Allow for EFI-only boot direct disk images
Condition building PCBIOS legacy images on MACHINE_FEATURES containing "pcbios" or not containing "efi". This ensures existing BSPs will continue to get the old PCBIOS legacy-only images. New BSPs can add "efi", "pcbios", or both. The images created likewise support one or the other or both. (From OE-Core rev: c58aceee7dc243467dd87f07ccc61859f8d945e6) Signed-off-by: João Henrique Ferreira de Freitas <joaohf@gmail.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
a6974f2a70
commit
707da95b4a
|
@ -31,6 +31,29 @@ EXCLUDE_FROM_WORLD = "1"
|
||||||
BOOTDD_VOLUME_ID ?= "boot"
|
BOOTDD_VOLUME_ID ?= "boot"
|
||||||
BOOTDD_EXTRA_SPACE ?= "16384"
|
BOOTDD_EXTRA_SPACE ?= "16384"
|
||||||
|
|
||||||
|
EFI = "${@base_contains("MACHINE_FEATURES", "efi", "1", "0", d)}"
|
||||||
|
EFI_CLASS = "${@base_contains("MACHINE_FEATURES", "efi", "grub-efi", "", d)}"
|
||||||
|
|
||||||
|
# Include legacy boot if MACHINE_FEATURES includes "pcbios" or if it does not
|
||||||
|
# contain "efi". This way legacy is supported by default if neither is
|
||||||
|
# specified, maintaining the original behavior.
|
||||||
|
def pcbios(d):
|
||||||
|
pcbios = base_contains("MACHINE_FEATURES", "pcbios", "1", "0", d)
|
||||||
|
if pcbios == "0":
|
||||||
|
pcbios = base_contains("MACHINE_FEATURES", "efi", "0", "1", d)
|
||||||
|
return pcbios
|
||||||
|
|
||||||
|
def pcbios_class(d):
|
||||||
|
if d.getVar("PCBIOS", True) == "1":
|
||||||
|
return "syslinux"
|
||||||
|
return ""
|
||||||
|
|
||||||
|
PCBIOS = "${@pcbios(d)}"
|
||||||
|
PCBIOS_CLASS = "${@pcbios_class(d)}"
|
||||||
|
|
||||||
|
inherit ${PCBIOS_CLASS}
|
||||||
|
inherit ${EFI_CLASS}
|
||||||
|
|
||||||
# Get the build_syslinux_cfg() function from the syslinux class
|
# Get the build_syslinux_cfg() function from the syslinux class
|
||||||
|
|
||||||
AUTO_SYSLINUXCFG = "1"
|
AUTO_SYSLINUXCFG = "1"
|
||||||
|
@ -38,17 +61,32 @@ DISK_SIGNATURE ?= "${DISK_SIGNATURE_GENERATED}"
|
||||||
SYSLINUX_ROOT ?= "root=/dev/sda2"
|
SYSLINUX_ROOT ?= "root=/dev/sda2"
|
||||||
SYSLINUX_TIMEOUT ?= "10"
|
SYSLINUX_TIMEOUT ?= "10"
|
||||||
|
|
||||||
inherit syslinux
|
populate() {
|
||||||
|
DEST=$1
|
||||||
|
install -d ${DEST}
|
||||||
|
|
||||||
|
# Install bzImage, initrd, and rootfs.img in DEST for all loaders to use.
|
||||||
|
install -m 0644 ${STAGING_KERNEL_DIR}/bzImage ${DEST}/vmlinuz
|
||||||
|
|
||||||
|
if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then
|
||||||
|
install -m 0644 ${INITRD} ${DEST}/initrd
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
build_boot_dd() {
|
build_boot_dd() {
|
||||||
HDDDIR="${S}/hdd/boot"
|
HDDDIR="${S}/hdd/boot"
|
||||||
HDDIMG="${S}/hdd.image"
|
HDDIMG="${S}/hdd.image"
|
||||||
IMAGE=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hdddirect
|
IMAGE=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hdddirect
|
||||||
|
|
||||||
install -d $HDDDIR
|
populate ${HDDDIR}
|
||||||
install -m 0644 ${STAGING_KERNEL_DIR}/bzImage $HDDDIR/vmlinuz
|
|
||||||
install -m 0644 ${S}/syslinux.cfg $HDDDIR/syslinux.cfg
|
if [ "${PCBIOS}" = "1" ]; then
|
||||||
install -m 444 ${STAGING_DATADIR}/syslinux/ldlinux.sys $HDDDIR/ldlinux.sys
|
syslinux_hddimg_populate
|
||||||
|
fi
|
||||||
|
if [ "${EFI}" = "1" ]; then
|
||||||
|
grubefi_hddimg_populate
|
||||||
|
fi
|
||||||
|
|
||||||
BLOCKS=`du -bks $HDDDIR | cut -f 1`
|
BLOCKS=`du -bks $HDDDIR | cut -f 1`
|
||||||
BLOCKS=`expr $BLOCKS + ${BOOTDD_EXTRA_SPACE}`
|
BLOCKS=`expr $BLOCKS + ${BOOTDD_EXTRA_SPACE}`
|
||||||
|
@ -62,7 +100,9 @@ build_boot_dd() {
|
||||||
mkdosfs -n ${BOOTDD_VOLUME_ID} -S 512 -C $HDDIMG $BLOCKS
|
mkdosfs -n ${BOOTDD_VOLUME_ID} -S 512 -C $HDDIMG $BLOCKS
|
||||||
mcopy -i $HDDIMG -s $HDDDIR/* ::/
|
mcopy -i $HDDIMG -s $HDDDIR/* ::/
|
||||||
|
|
||||||
syslinux $HDDIMG
|
if [ "${PCBIOS}" = "1" ]; then
|
||||||
|
syslinux_hdddirect_install $HDDIMG
|
||||||
|
fi
|
||||||
chmod 644 $HDDIMG
|
chmod 644 $HDDIMG
|
||||||
|
|
||||||
ROOTFSBLOCKS=`du -Lbks ${ROOTFS} | cut -f 1`
|
ROOTFSBLOCKS=`du -Lbks ${ROOTFS} | cut -f 1`
|
||||||
|
@ -85,9 +125,11 @@ build_boot_dd() {
|
||||||
dd of=$IMAGE bs=1 seek=440 conv=notrunc
|
dd of=$IMAGE bs=1 seek=440 conv=notrunc
|
||||||
|
|
||||||
OFFSET=`expr $END2 / 512`
|
OFFSET=`expr $END2 / 512`
|
||||||
dd if=${STAGING_DATADIR}/syslinux/mbr.bin of=$IMAGE conv=notrunc
|
if [ "${PCBIOS}" = "1" ]; then
|
||||||
|
dd if=${STAGING_DATADIR}/syslinux/mbr.bin of=$IMAGE conv=notrunc
|
||||||
|
fi
|
||||||
dd if=$HDDIMG of=$IMAGE conv=notrunc seek=1 bs=512
|
dd if=$HDDIMG of=$IMAGE conv=notrunc seek=1 bs=512
|
||||||
dd if=${ROOTFS} of=$IMAGE conv=notrunc seek=$OFFSET bs=512
|
dd if=${ROOTFS} of=$IMAGE conv=notrunc seek=$OFFSET bs=512
|
||||||
|
|
||||||
cd ${DEPLOY_DIR_IMAGE}
|
cd ${DEPLOY_DIR_IMAGE}
|
||||||
rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hdddirect
|
rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hdddirect
|
||||||
|
@ -96,7 +138,10 @@ build_boot_dd() {
|
||||||
|
|
||||||
python do_bootdirectdisk() {
|
python do_bootdirectdisk() {
|
||||||
validate_disk_signature(d)
|
validate_disk_signature(d)
|
||||||
bb.build.exec_func('build_syslinux_cfg', d)
|
if d.getVar("PCBIOS", True) == "1":
|
||||||
|
bb.build.exec_func('build_syslinux_cfg', d)
|
||||||
|
if d.getVar("EFI", True) == "1":
|
||||||
|
bb.build.exec_func('build_grub_cfg', d)
|
||||||
bb.build.exec_func('build_boot_dd', d)
|
bb.build.exec_func('build_boot_dd', d)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,11 @@ syslinux_hddimg_install() {
|
||||||
syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
|
syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
syslinux_hdddirect_install() {
|
||||||
|
DEST=$1
|
||||||
|
syslinux $DEST
|
||||||
|
}
|
||||||
|
|
||||||
python build_syslinux_cfg () {
|
python build_syslinux_cfg () {
|
||||||
import copy
|
import copy
|
||||||
import sys
|
import sys
|
||||||
|
|
Loading…
Reference in New Issue