summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/syslinux.bbclass128
1 files changed, 49 insertions, 79 deletions
diff --git a/meta/classes/syslinux.bbclass b/meta/classes/syslinux.bbclass
index c4596bffce..0b90eab228 100644
--- a/meta/classes/syslinux.bbclass
+++ b/meta/classes/syslinux.bbclass
@@ -11,15 +11,17 @@
11# ${LABELS} - a list of targets for the automatic config 11# ${LABELS} - a list of targets for the automatic config
12# ${APPEND} - an override list of append strings for each label 12# ${APPEND} - an override list of append strings for each label
13# ${SYSLINUX_OPTS} - additional options to add to the syslinux file ';' delimited 13# ${SYSLINUX_OPTS} - additional options to add to the syslinux file ';' delimited
14# ${SYSLINUX_SPLASH} - A background for the vga boot menu if using the boot menu
15# ${SYSLINUX_SERIAL} - Set an alternate serial port or turn off serial with empty string
14 16
15do_bootimg[depends] += "syslinux:do_populate_sysroot \ 17do_bootimg[depends] += "syslinux:do_populate_sysroot \
16 syslinux-native:do_populate_sysroot" 18 syslinux-native:do_populate_sysroot"
17 19
18SYSLINUXCFG = "${S}/syslinux.cfg" 20SYSLINUXCFG = "${S}/syslinux.cfg"
19SYSLINUXMENU = "${S}/menu"
20 21
21ISOLINUXDIR = "/isolinux" 22ISOLINUXDIR = "/isolinux"
22SYSLINUXDIR = "/" 23SYSLINUXDIR = "/"
24SYSLINUX_SERIAL ?= "0 115200"
23ISO_BOOTIMG = "isolinux/isolinux.bin" 25ISO_BOOTIMG = "isolinux/isolinux.bin"
24ISO_BOOTCAT = "isolinux/boot.cat" 26ISO_BOOTCAT = "isolinux/boot.cat"
25MKISOFS_OPTIONS = "-no-emul-boot -boot-load-size 4 -boot-info-table" 27MKISOFS_OPTIONS = "-no-emul-boot -boot-load-size 4 -boot-info-table"
@@ -34,82 +36,34 @@ syslinux_populate() {
34 36
35 # Install the config files 37 # Install the config files
36 install -m 0644 ${SYSLINUXCFG} ${DEST}${BOOTDIR}/${CFGNAME} 38 install -m 0644 ${SYSLINUXCFG} ${DEST}${BOOTDIR}/${CFGNAME}
37 if [ -f ${SYSLINUXMENU} ]; then
38 install -m 0644 ${SYSLINUXMENU} ${DEST}${BOOTDIR}
39 fi
40} 39}
41 40
42syslinux_iso_populate() { 41syslinux_iso_populate() {
43 syslinux_populate ${ISODIR} ${ISOLINUXDIR} isolinux.cfg 42 syslinux_populate ${ISODIR} ${ISOLINUXDIR} isolinux.cfg
44 install -m 0644 ${STAGING_LIBDIR}/syslinux/isolinux.bin ${ISODIR}${ISOLINUXDIR} 43 install -m 0644 ${STAGING_LIBDIR}/syslinux/isolinux.bin ${ISODIR}${ISOLINUXDIR}
44 if [ "${AUTO_SYSLINUXMENU}" = 1 ] ; then
45 install -m 0644 ${STAGING_LIBDIR}/syslinux/vesamenu.c32 ${ISODIR}${ISOLINUXDIR}/vesamenu.c32
46 if [ "${SYSLINUX_SPLASH}" != "" ] ; then
47 install -m 0644 ${SYSLINUX_SPLASH} ${ISODIR}${ISOLINUXDIR}/splash.lss
48 fi
49 fi
45} 50}
46 51
47syslinux_hddimg_populate() { 52syslinux_hddimg_populate() {
48 syslinux_populate ${HDDDIR} ${SYSLINUXDIR} syslinux.cfg 53 syslinux_populate ${HDDDIR} ${SYSLINUXDIR} syslinux.cfg
49 install -m 0444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}${SYSLINUXDIR}/ldlinux.sys 54 install -m 0444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}${SYSLINUXDIR}/ldlinux.sys
55 if [ "${AUTO_SYSLINUXMENU}" = 1 ] ; then
56 install -m 0644 ${STAGING_LIBDIR}/syslinux/vesamenu.c32 ${HDDDIR}${SYSLINUXDIR}/vesamenu.c32
57 if [ "${SYSLINUX_SPLASH}" != "" ] ; then
58 install -m 0644 ${SYSLINUX_SPLASH} ${HDDDIR}${SYSLINUXDIR}/splash.lss
59 fi
60 fi
50} 61}
51 62
52syslinux_hddimg_install() { 63syslinux_hddimg_install() {
53 syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg 64 syslinux ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hddimg
54} 65}
55 66
56python build_syslinux_menu () {
57 import copy
58 import sys
59
60 workdir = d.getVar('WORKDIR', True)
61 if not workdir:
62 bb.error("WORKDIR is not defined")
63 return
64
65 labels = d.getVar('LABELS', True)
66 if not labels:
67 bb.debug(1, "LABELS not defined, nothing to do")
68 return
69
70 if labels == []:
71 bb.debug(1, "No labels, nothing to do")
72 return
73
74 cfile = d.getVar('SYSLINUXMENU', True)
75 if not cfile:
76 raise bb.build.FuncFailed('Unable to read SYSLINUXMENU')
77
78 try:
79 cfgfile = file(cfile, 'w')
80 except OSError:
81 raise bb.build.funcFailed('Unable to open %s' % (cfile))
82
83 # Beep the speaker and Clear the screen
84 cfgfile.write('\x07\x0C')
85
86 # The title should be configurable
87 cfgfile.write('Linux Boot Menu\n')
88 cfgfile.write('The following targets are available on this image:\n')
89 cfgfile.write('\n')
90
91 for label in labels.split():
92 from copy import deepcopy
93 localdata = deepcopy(d)
94
95 overrides = localdata.getVar('OVERRIDES')
96 if not overrides:
97 raise bb.build.FuncFailed('OVERRIDES not defined')
98 overrides = localdata.expand(overrides)
99
100 localdata.setVar('OVERRIDES', label + ':' + overrides)
101 bb.data.update_data(localdata)
102
103 usage = localdata.getVar('USAGE', True)
104 cfgfile.write(' \x0F\x30\x3E%16s\x0F\x30\x37: ' % (label))
105 cfgfile.write('%s\n' % (usage))
106
107 del localdata
108
109 cfgfile.write('\n')
110 cfgfile.close()
111}
112
113python build_syslinux_cfg () { 67python build_syslinux_cfg () {
114 import copy 68 import copy
115 import sys 69 import sys
@@ -146,7 +100,16 @@ python build_syslinux_cfg () {
146 cfgfile.write('%s\n' % opt) 100 cfgfile.write('%s\n' % opt)
147 101
148 cfgfile.write('ALLOWOPTIONS 1\n'); 102 cfgfile.write('ALLOWOPTIONS 1\n');
149 cfgfile.write('DEFAULT %s\n' % (labels.split()[0])) 103 syslinux_serial = d.getVar('SYSLINUX_SERIAL', True)
104 if syslinux_serial:
105 cfgfile.write('SERIAL %s\n' % syslinux_serial)
106
107 menu = d.getVar('AUTO_SYSLINUXMENU', True)
108
109 if menu and syslinux_serial:
110 cfgfile.write('DEFAULT Graphics console %s\n' % (labels.split()[0]))
111 else:
112 cfgfile.write('DEFAULT %s\n' % (labels.split()[0]))
150 113
151 timeout = d.getVar('SYSLINUX_TIMEOUT', True) 114 timeout = d.getVar('SYSLINUX_TIMEOUT', True)
152 115
@@ -161,14 +124,13 @@ python build_syslinux_cfg () {
161 else: 124 else:
162 cfgfile.write('PROMPT 1\n') 125 cfgfile.write('PROMPT 1\n')
163 126
164 menu = d.getVar('AUTO_SYSLINUXMENU', True)
165
166 # This is ugly. My bad.
167
168 if menu: 127 if menu:
169 bb.build.exec_func('build_syslinux_menu', d) 128 cfgfile.write('ui vesamenu.c32\n')
170 mfile = d.getVar('SYSLINUXMENU', True) 129 cfgfile.write('menu title Select kernel options and boot kernel\n')
171 cfgfile.write('DISPLAY %s\n' % (mfile.split('/')[-1]) ) 130 cfgfile.write('menu tabmsg Press [Tab] to edit, [Return] to select\n')
131 splash = d.getVar('SYSLINUX_SPLASH', True)
132 if splash:
133 cfgfile.write('menu background splash.lss\n')
172 134
173 for label in labels.split(): 135 for label in labels.split():
174 localdata = bb.data.createCopy(d) 136 localdata = bb.data.createCopy(d)
@@ -176,24 +138,32 @@ python build_syslinux_cfg () {
176 overrides = localdata.getVar('OVERRIDES', True) 138 overrides = localdata.getVar('OVERRIDES', True)
177 if not overrides: 139 if not overrides:
178 raise bb.build.FuncFailed('OVERRIDES not defined') 140 raise bb.build.FuncFailed('OVERRIDES not defined')
179 141
180 localdata.setVar('OVERRIDES', label + ':' + overrides) 142 localdata.setVar('OVERRIDES', label + ':' + overrides)
181 bb.data.update_data(localdata) 143 bb.data.update_data(localdata)
182 144
183 cfgfile.write('LABEL %s\nKERNEL /vmlinuz\n' % (label)) 145 btypes = [ [ "", "console=tty0" ] ]
146 if menu and syslinux_serial:
147 btypes = [ [ "Graphics console ", " console=tty0" ],
148 [ "Serial console ", " console=ttyS0,115200" ] ]
149
150 for btype in btypes:
151 cfgfile.write('LABEL %s%s\nKERNEL /vmlinuz\n' % (btype[0], label))
184 152
185 append = localdata.getVar('APPEND', True) 153 append = localdata.getVar('APPEND', True)
186 initrd = localdata.getVar('INITRD', True) 154 initrd = localdata.getVar('INITRD', True)
187 155
188 if append: 156 if append:
189 cfgfile.write('APPEND ') 157 cfgfile.write('APPEND ')
190 158
191 if initrd: 159 if initrd:
192 cfgfile.write('initrd=/initrd ') 160 cfgfile.write('initrd=/initrd ')
193 161
194 cfgfile.write('LABEL=%s '% (label)) 162 cfgfile.write('LABEL=%s '% (label))
195 163
196 cfgfile.write('%s\n' % (append)) 164 cfgfile.write('%s %s\n' % (append, btype[1]))
165 else:
166 cfgfile.write('APPEND %s\n' % btype[1])
197 167
198 cfgfile.close() 168 cfgfile.close()
199} 169}