1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-30 00:20:08 +00:00

bootimg: Pull syslinux specific bits into syslinux.bbclass

Working towards a more generic bootimg.bbclass, pull out all
syslinux specific bits and let syslinux.bbclass manage them
directly. This introduces no functional changes to the images
constructed and the behavior remains unchanged.

(From OE-Core rev: 1915293688d348a765aa0bcdf01168c9fecd9842)

Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Darren Hart
2011-11-23 16:41:32 -08:00
committed by Richard Purdie
parent 4cdd02fe10
commit bcbd57aae5
2 changed files with 76 additions and 63 deletions
+16 -55
View File
@@ -17,36 +17,26 @@
# in syslinux. Actions based on the label are then performed (e.g. installing to # in syslinux. Actions based on the label are then performed (e.g. installing to
# an hdd) # an hdd)
# External variables # External variables (also used by syslinux.bbclass)
# ${INITRD} - indicates a filesystem image to use as an initrd (optional) # ${INITRD} - indicates a filesystem image to use as an initrd (optional)
# ${NOISO} - skip building the ISO image if set to 1
# ${ROOTFS} - indicates a filesystem image to include as the root filesystem (optional) # ${ROOTFS} - indicates a filesystem image to include as the root filesystem (optional)
# ${AUTO_SYSLINUXCFG} - set this to 1 to enable creating an automatic config
# ${LABELS} - a list of targets for the automatic config
# ${APPEND} - an override list of append strings for each label
# ${SYSLINUX_OPTS} - additional options to add to the syslinux file ';' delimited
do_bootimg[depends] += "dosfstools-native:do_populate_sysroot \ do_bootimg[depends] += "dosfstools-native:do_populate_sysroot \
syslinux:do_populate_sysroot \ mtools-native:do_populate_sysroot \
syslinux-native:do_populate_sysroot \ cdrtools-native:do_populate_sysroot"
mtools-native:do_populate_sysroot \
cdrtools-native:do_populate_sysroot"
PACKAGES = " " PACKAGES = " "
EXCLUDE_FROM_WORLD = "1" EXCLUDE_FROM_WORLD = "1"
HDDDIR = "${S}/hdd/boot" HDDDIR = "${S}/hdd/boot"
ISODIR = "${S}/cd/isolinux" ISODIR = "${S}/cd"
BOOTIMG_VOLUME_ID ?= "boot" BOOTIMG_VOLUME_ID ?= "boot"
BOOTIMG_EXTRA_SPACE ?= "512" BOOTIMG_EXTRA_SPACE ?= "512"
# Get the build_syslinux_cfg() function from the syslinux class
SYSLINUXCFG = "${HDDDIR}/syslinux.cfg"
SYSLINUXMENU = "${HDDDIR}/menu"
inherit syslinux inherit syslinux
build_iso() { build_iso() {
# Only create an ISO if we have an INITRD and NOISO was not set # Only create an ISO if we have an INITRD and NOISO was not set
if [ -z "${INITRD}" ] || [ ! -s "${INITRD}" ] || [ "${NOISO}" = "1" ]; then if [ -z "${INITRD}" ] || [ ! -s "${INITRD}" ] || [ "${NOISO}" = "1" ]; then
@@ -56,31 +46,12 @@ build_iso() {
install -d ${ISODIR} install -d ${ISODIR}
# Install the kernel syslinux_iso_populate
install -m 0644 ${STAGING_DIR_HOST}/kernel/bzImage \
${ISODIR}/vmlinuz
# Install the configuration files
cp ${HDDDIR}/syslinux.cfg ${ISODIR}/isolinux.cfg
if [ -f ${SYSLINUXMENU} ]; then
cp ${SYSLINUXMENU} ${ISODIR}
fi
install -m 0644 ${INITRD} ${ISODIR}/initrd
if [ -n "${ROOTFS}" ] && [ -s "${ROOTFS}" ]; then
install -m 0644 ${ROOTFS} ${ISODIR}/rootfs.img
fi
# And install the syslinux stuff
cp ${STAGING_LIBDIR}/syslinux/isolinux.bin ${ISODIR}
mkisofs -V ${BOOTIMG_VOLUME_ID} \ mkisofs -V ${BOOTIMG_VOLUME_ID} \
-o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \ -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \
-b isolinux/isolinux.bin -c isolinux/boot.cat -r \ -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} -r \
-no-emul-boot -boot-load-size 4 -boot-info-table \ ${MKISOFS_OPTIONS} ${ISODIR}
${S}/cd/
cd ${DEPLOY_DIR_IMAGE} cd ${DEPLOY_DIR_IMAGE}
rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.iso rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.iso
@@ -91,34 +62,24 @@ build_hddimg() {
# Create an HDD image # Create an HDD image
if [ "${NOHDD}" != "1" ] ; then if [ "${NOHDD}" != "1" ] ; then
install -d ${HDDDIR} install -d ${HDDDIR}
install -m 0644 ${STAGING_DIR_HOST}/kernel/bzImage \ syslinux_hddimg_populate
${HDDDIR}/vmlinuz
if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then # Determine the block count for the final image
install -m 0644 ${INITRD} ${HDDDIR}/initrd
fi
if [ -n "${ROOTFS}" ] && [ -s "${ROOTFS}" ]; then
install -m 0644 ${ROOTFS} ${HDDDIR}/rootfs.img
fi
install -m 444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}/ldlinux.sys
# Do a little math, bash style
BLOCKS=`du -bks ${HDDDIR} | cut -f 1` BLOCKS=`du -bks ${HDDDIR} | cut -f 1`
SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}` SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}`
mkdosfs -n ${BOOTIMG_VOLUME_ID} -d ${HDDDIR} \ mkdosfs -n ${BOOTIMG_VOLUME_ID} -d ${HDDDIR} \
-C ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg $SIZE -C ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg $SIZE
syslinux_hddimg_install
syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
chmod 644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg chmod 644 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
cd ${DEPLOY_DIR_IMAGE} cd ${DEPLOY_DIR_IMAGE}
rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hddimg rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hddimg
ln -s ${IMAGE_NAME}.hddimg ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hddimg ln -s ${IMAGE_NAME}.hddimg ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hddimg
fi fi
} }
python do_bootimg() { python do_bootimg() {
bb.build.exec_func('build_syslinux_cfg', d) bb.build.exec_func('build_syslinux_cfg', d)
+60 -8
View File
@@ -2,7 +2,63 @@
# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved # Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved
# Released under the MIT license (see packages/COPYING) # Released under the MIT license (see packages/COPYING)
# This creates a configuration file suitable for use with syslinux. # Provide syslinux specific functions for building bootable images.
# External variables
# ${INITRD} - indicates a filesystem image to use as an initrd (optional)
# ${ROOTFS} - indicates a filesystem image to include as the root filesystem (optional)
# ${AUTO_SYSLINUXMENU} - set this to 1 to enable creating an automatic menu
# ${LABELS} - a list of targets for the automatic config
# ${APPEND} - an override list of append strings for each label
# ${SYSLINUX_OPTS} - additional options to add to the syslinux file ';' delimited
do_bootimg[depends] += "syslinux:do_populate_sysroot \
syslinux-native:do_populate_sysroot"
SYSLINUXCFG = "syslinux.cfg"
SYSLINUXMENU = "menu"
SYSLINUX_ISODIR = "${ISODIR}/isolinux"
SYSLINUX_HDDDIR = "${HDDDIR}"
ISO_BOOTIMG = "isolinux/isolinux.bin"
ISO_BOOTCAT = "isolinux/boot.cat"
MKISOFS_OPTIONS = "-no-emul-boot -boot-load-size 4 -boot-info-table"
syslinux_populate() {
DEST=$1
CFGNAME=$2
install -d ${DEST}
# Install the kernel, initrd, and rootfs
install -m 0644 ${STAGING_DIR_HOST}/kernel/bzImage ${DEST}/vmlinuz
if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then
install -m 0644 ${INITRD} ${DEST}/initrd
fi
if [ -n "${ROOTFS}" ] && [ -s "${ROOTFS}" ]; then
install -m 0644 ${ROOTFS} ${DEST}/rootfs.img
fi
# Install the config files
install -m 0644 ${SYSLINUXCFG} ${DEST}/${CFGNAME}
if [ -f ${SYSLINUXMENU} ]; then
install -m 0644 ${SYSLINUXMENU} ${DEST}
fi
}
syslinux_iso_populate() {
syslinux_populate ${SYSLINUX_ISODIR} isolinux.cfg
install -m 0644 ${STAGING_LIBDIR}/syslinux/isolinux.bin ${SYSLINUX_ISODIR}
}
syslinux_hddimg_populate() {
syslinux_populate ${SYSLINUX_HDDDIR} syslinux.cfg
install -m 0444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${SYSLINUX_HDDDIR}/ldlinux.sys
}
syslinux_hddimg_install() {
syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
}
python build_syslinux_menu () { python build_syslinux_menu () {
import copy import copy
@@ -26,10 +82,8 @@ python build_syslinux_menu () {
if not cfile: if not cfile:
raise bb.build.FuncFailed('Unable to read SYSLINUXMENU') raise bb.build.FuncFailed('Unable to read SYSLINUXMENU')
bb.mkdirhier(os.path.dirname(cfile))
try: try:
cfgfile = file(cfile, 'w') cfgfile = file(cfile, 'w')
except OSError: except OSError:
raise bb.build.funcFailed('Unable to open %s' % (cfile)) raise bb.build.funcFailed('Unable to open %s' % (cfile))
@@ -85,10 +139,8 @@ python build_syslinux_cfg () {
if not cfile: if not cfile:
raise bb.build.FuncFailed('Unable to read SYSLINUXCFG') raise bb.build.FuncFailed('Unable to read SYSLINUXCFG')
bb.mkdirhier(os.path.dirname(cfile))
try: try:
cfgfile = file(cfile, 'w') cfgfile = file(cfile, 'w')
except OSError: except OSError:
raise bb.build.funcFailed('Unable to open %s' % (cfile)) raise bb.build.funcFailed('Unable to open %s' % (cfile))
@@ -103,7 +155,7 @@ python build_syslinux_cfg () {
if opts: if opts:
for opt in opts.split(';'): for opt in opts.split(';'):
cfgfile.write('%s\n' % opt) cfgfile.write('%s\n' % opt)
cfgfile.write('ALLOWOPTIONS 1\n'); cfgfile.write('ALLOWOPTIONS 1\n');
cfgfile.write('DEFAULT %s\n' % (labels.split()[0])) cfgfile.write('DEFAULT %s\n' % (labels.split()[0]))