summaryrefslogtreecommitdiff
path: root/meta/classes/syslinux.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/syslinux.bbclass')
-rw-r--r--meta/classes/syslinux.bbclass111
1 files changed, 78 insertions, 33 deletions
diff --git a/meta/classes/syslinux.bbclass b/meta/classes/syslinux.bbclass
index fb7597470..700ea5391 100644
--- a/meta/classes/syslinux.bbclass
+++ b/meta/classes/syslinux.bbclass
@@ -2,18 +2,67 @@
# 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 = "${S}/syslinux.cfg"
+SYSLINUXMENU = "${S}/menu"
+
+ISOLINUXDIR = "/isolinux"
+SYSLINUXDIR = "/"
+ISO_BOOTIMG = "isolinux/isolinux.bin"
+ISO_BOOTCAT = "isolinux/boot.cat"
+MKISOFS_OPTIONS = "-no-emul-boot -boot-load-size 4 -boot-info-table"
+APPEND_prepend = " ${SYSLINUX_ROOT} "
+
+syslinux_populate() {
+ DEST=$1
+ BOOTDIR=$2
+ CFGNAME=$3
+
+ install -d ${DEST}${BOOTDIR}
+
+ # Install the config files
+ install -m 0644 ${SYSLINUXCFG} ${DEST}${BOOTDIR}/${CFGNAME}
+ if [ -f ${SYSLINUXMENU} ]; then
+ install -m 0644 ${SYSLINUXMENU} ${DEST}${BOOTDIR}
+ fi
+}
+
+syslinux_iso_populate() {
+ syslinux_populate ${ISODIR} ${ISOLINUXDIR} isolinux.cfg
+ install -m 0644 ${STAGING_LIBDIR}/syslinux/isolinux.bin ${ISODIR}${ISOLINUXDIR}
+}
+
+syslinux_hddimg_populate() {
+ syslinux_populate ${HDDDIR} ${SYSLINUXDIR} syslinux.cfg
+ install -m 0444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}${SYSLINUXDIR}/ldlinux.sys
+}
+
+syslinux_hddimg_install() {
+ syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
+}
python build_syslinux_menu () {
import copy
import sys
- workdir = bb.data.getVar('WORKDIR', d, 1)
+ workdir = d.getVar('WORKDIR', True)
if not workdir:
bb.error("WORKDIR is not defined")
return
- labels = bb.data.getVar('LABELS', d, 1)
+ labels = d.getVar('LABELS', True)
if not labels:
bb.debug(1, "LABELS not defined, nothing to do")
return
@@ -22,14 +71,12 @@ python build_syslinux_menu () {
bb.debug(1, "No labels, nothing to do")
return
- cfile = bb.data.getVar('SYSLINUXMENU', d, 1)
+ cfile = d.getVar('SYSLINUXMENU', True)
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))
@@ -45,15 +92,15 @@ python build_syslinux_menu () {
from copy import deepcopy
localdata = deepcopy(d)
- overrides = bb.data.getVar('OVERRIDES', localdata)
+ overrides = localdata.getVar('OVERRIDES')
if not overrides:
raise bb.build.FuncFailed('OVERRIDES not defined')
- overrides = bb.data.expand(overrides, localdata)
+ overrides = localdata.expand(overrides)
- bb.data.setVar('OVERRIDES', label + ':' + overrides, localdata)
+ localdata.setVar('OVERRIDES', label + ':' + overrides)
bb.data.update_data(localdata)
- usage = bb.data.getVar('USAGE', localdata, 1)
+ usage = localdata.getVar('USAGE', True)
cfgfile.write(' \x0F\x30\x3E%16s\x0F\x30\x37: ' % (label))
cfgfile.write('%s\n' % (usage))
@@ -67,12 +114,12 @@ python build_syslinux_cfg () {
import copy
import sys
- workdir = bb.data.getVar('WORKDIR', d, 1)
+ workdir = d.getVar('WORKDIR', True)
if not workdir:
bb.error("WORKDIR not defined, unable to package")
return
- labels = bb.data.getVar('LABELS', d, 1)
+ labels = d.getVar('LABELS', True)
if not labels:
bb.debug(1, "LABELS not defined, nothing to do")
return
@@ -81,70 +128,68 @@ python build_syslinux_cfg () {
bb.debug(1, "No labels, nothing to do")
return
- cfile = bb.data.getVar('SYSLINUXCFG', d, 1)
+ cfile = d.getVar('SYSLINUXCFG', True)
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))
- # FIXME - the timeout should be settable
- # And maybe the default too
- # Definately the prompt
-
cfgfile.write('# Automatically created by OE\n')
- opts = bb.data.getVar('SYSLINUX_OPTS', d, 1)
+ opts = d.getVar('SYSLINUX_OPTS', True)
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]))
- timeout = bb.data.getVar('SYSLINUX_TIMEOUT', d, 1)
+ timeout = d.getVar('SYSLINUX_TIMEOUT', True)
if timeout:
cfgfile.write('TIMEOUT %s\n' % timeout)
else:
cfgfile.write('TIMEOUT 50\n')
- cfgfile.write('PROMPT 1\n')
+ prompt = d.getVar('SYSLINUX_PROMPT', True)
+ if prompt:
+ cfgfile.write('PROMPT %s\n' % prompt)
+ else:
+ cfgfile.write('PROMPT 1\n')
- menu = bb.data.getVar('AUTO_SYSLINUXMENU', d, 1)
+ menu = d.getVar('AUTO_SYSLINUXMENU', True)
# This is ugly. My bad.
if menu:
bb.build.exec_func('build_syslinux_menu', d)
- mfile = bb.data.getVar('SYSLINUXMENU', d, 1)
+ mfile = d.getVar('SYSLINUXMENU', True)
cfgfile.write('DISPLAY %s\n' % (mfile.split('/')[-1]) )
for label in labels.split():
localdata = bb.data.createCopy(d)
- overrides = bb.data.getVar('OVERRIDES', localdata, True)
+ overrides = localdata.getVar('OVERRIDES', True)
if not overrides:
raise bb.build.FuncFailed('OVERRIDES not defined')
- bb.data.setVar('OVERRIDES', label + ':' + overrides, localdata)
+ localdata.setVar('OVERRIDES', label + ':' + overrides)
bb.data.update_data(localdata)
- cfgfile.write('LABEL %s\nKERNEL vmlinuz\n' % (label))
+ cfgfile.write('LABEL %s\nKERNEL /vmlinuz\n' % (label))
- append = bb.data.getVar('APPEND', localdata, 1)
- initrd = bb.data.getVar('INITRD', localdata, 1)
+ append = localdata.getVar('APPEND', True)
+ initrd = localdata.getVar('INITRD', True)
if append:
cfgfile.write('APPEND ')
if initrd:
- cfgfile.write('initrd=initrd ')
+ cfgfile.write('initrd=/initrd ')
cfgfile.write('LABEL=%s '% (label))