summaryrefslogtreecommitdiff
path: root/meta
diff options
context:
space:
mode:
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/bootimg.bbclass71
-rw-r--r--meta/classes/syslinux.bbclass68
2 files changed, 76 insertions, 63 deletions
diff --git a/meta/classes/bootimg.bbclass b/meta/classes/bootimg.bbclass
index dbaa67760..0554ffa00 100644
--- a/meta/classes/bootimg.bbclass
+++ b/meta/classes/bootimg.bbclass
@@ -17,36 +17,26 @@
# in syslinux. Actions based on the label are then performed (e.g. installing to
# an hdd)
-# External variables
+# External variables (also used by syslinux.bbclass)
# ${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)
-# ${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 \
- syslinux:do_populate_sysroot \
- syslinux-native:do_populate_sysroot \
- mtools-native:do_populate_sysroot \
- cdrtools-native:do_populate_sysroot"
+ mtools-native:do_populate_sysroot \
+ cdrtools-native:do_populate_sysroot"
PACKAGES = " "
EXCLUDE_FROM_WORLD = "1"
HDDDIR = "${S}/hdd/boot"
-ISODIR = "${S}/cd/isolinux"
+ISODIR = "${S}/cd"
BOOTIMG_VOLUME_ID ?= "boot"
BOOTIMG_EXTRA_SPACE ?= "512"
-# Get the build_syslinux_cfg() function from the syslinux class
-
-SYSLINUXCFG = "${HDDDIR}/syslinux.cfg"
-SYSLINUXMENU = "${HDDDIR}/menu"
-
inherit syslinux
-
+
build_iso() {
# Only create an ISO if we have an INITRD and NOISO was not set
if [ -z "${INITRD}" ] || [ ! -s "${INITRD}" ] || [ "${NOISO}" = "1" ]; then
@@ -56,31 +46,12 @@ build_iso() {
install -d ${ISODIR}
- # Install the kernel
- 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}
+ syslinux_iso_populate
mkisofs -V ${BOOTIMG_VOLUME_ID} \
- -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \
- -b isolinux/isolinux.bin -c isolinux/boot.cat -r \
- -no-emul-boot -boot-load-size 4 -boot-info-table \
- ${S}/cd/
+ -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.iso \
+ -b ${ISO_BOOTIMG} -c ${ISO_BOOTCAT} -r \
+ ${MKISOFS_OPTIONS} ${ISODIR}
cd ${DEPLOY_DIR_IMAGE}
rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.iso
@@ -91,34 +62,24 @@ build_hddimg() {
# Create an HDD image
if [ "${NOHDD}" != "1" ] ; then
install -d ${HDDDIR}
- install -m 0644 ${STAGING_DIR_HOST}/kernel/bzImage \
- ${HDDDIR}/vmlinuz
-
- if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then
- install -m 0644 ${INITRD} ${HDDDIR}/initrd
- fi
-
- if [ -n "${ROOTFS}" ] && [ -s "${ROOTFS}" ]; then
- install -m 0644 ${ROOTFS} ${HDDDIR}/rootfs.img
- fi
+ syslinux_hddimg_populate
- install -m 444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}/ldlinux.sys
-
- # Do a little math, bash style
+ # Determine the block count for the final image
BLOCKS=`du -bks ${HDDDIR} | cut -f 1`
SIZE=`expr $BLOCKS + ${BOOTIMG_EXTRA_SPACE}`
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
cd ${DEPLOY_DIR_IMAGE}
rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hddimg
ln -s ${IMAGE_NAME}.hddimg ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hddimg
fi
-}
+}
python do_bootimg() {
bb.build.exec_func('build_syslinux_cfg', d)
diff --git a/meta/classes/syslinux.bbclass b/meta/classes/syslinux.bbclass
index 0cc6b851b..6eb804b75 100644
--- a/meta/classes/syslinux.bbclass
+++ b/meta/classes/syslinux.bbclass
@@ -2,7 +2,63 @@
# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved
# 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 () {
import copy
@@ -26,10 +82,8 @@ python build_syslinux_menu () {
if not cfile:
raise bb.build.FuncFailed('Unable to read SYSLINUXMENU')
- bb.mkdirhier(os.path.dirname(cfile))
-
try:
- cfgfile = file(cfile, 'w')
+ cfgfile = file(cfile, 'w')
except OSError:
raise bb.build.funcFailed('Unable to open %s' % (cfile))
@@ -85,10 +139,8 @@ python build_syslinux_cfg () {
if not cfile:
raise bb.build.FuncFailed('Unable to read SYSLINUXCFG')
- bb.mkdirhier(os.path.dirname(cfile))
-
try:
- cfgfile = file(cfile, 'w')
+ cfgfile = file(cfile, 'w')
except OSError:
raise bb.build.funcFailed('Unable to open %s' % (cfile))
@@ -103,7 +155,7 @@ python build_syslinux_cfg () {
if opts:
for opt in opts.split(';'):
cfgfile.write('%s\n' % opt)
-
+
cfgfile.write('ALLOWOPTIONS 1\n');
cfgfile.write('DEFAULT %s\n' % (labels.split()[0]))