summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/gummiboot.bbclass114
-rw-r--r--meta/recipes-core/initrdscripts/files/init-install-efi.sh51
2 files changed, 149 insertions, 16 deletions
diff --git a/meta/classes/gummiboot.bbclass b/meta/classes/gummiboot.bbclass
new file mode 100644
index 0000000000..021465201f
--- /dev/null
+++ b/meta/classes/gummiboot.bbclass
@@ -0,0 +1,114 @@
1# Copyright (C) 2014 Intel Corporation
2#
3# Released under the MIT license (see COPYING.MIT)
4
5# gummiboot.bbclass - equivalent of grub-efi.bbclass
6# Set EFI_PROVIDER = "gummiboot" to use gummiboot on your live images instead of grub-efi
7# (images built by bootimage.bbclass or boot-directdisk.bbclass)
8
9do_bootimg[depends] += "gummiboot:do_deploy"
10do_bootdirectdisk[depends] += "gummiboot:do_deploy"
11
12EFIDIR = "/EFI/BOOT"
13
14GUMMIBOOT_CFG ?= "${S}/loader.conf"
15GUMMIBOOT_ENTRIES ?= ""
16GUMMIBOOT_TIMEOUT ?= "10"
17
18efi_populate() {
19 DEST=$1
20
21 EFI_IMAGE="gummibootia32.efi"
22 DEST_EFI_IMAGE="bootia32.efi"
23 if [ "${TARGET_ARCH}" = "x86_64" ]; then
24 EFI_IMAGE="gummibootx64.efi"
25 DEST_EFI_IMAGE="bootx64.efi"
26 fi
27
28 install -d ${DEST}${EFIDIR}
29 # gummiboot requires these paths for configuration files
30 # they are not customizable so no point in new vars
31 install -d ${DEST}/loader
32 install -d ${DEST}/loader/entries
33 install -m 0644 ${DEPLOY_DIR_IMAGE}/${EFI_IMAGE} ${DEST}${EFIDIR}/${DEST_EFI_IMAGE}
34 install -m 0644 ${GUMMIBOOT_CFG} ${DEST}/loader/loader.conf
35 for i in ${GUMMIBOOT_ENTRIES}; do
36 install -m 0644 ${i} ${DEST}/loader/entries
37 done
38}
39
40efi_iso_populate() {
41 iso_dir=$1
42 efi_populate $iso_dir
43 mkdir -p ${EFIIMGDIR}/${EFIDIR}
44 cp $iso_dir/${EFIDIR}/* ${EFIIMGDIR}${EFIDIR}
45 cp $iso_dir/vmlinuz ${EFIIMGDIR}
46 echo "${DEST_EFI_IMAGE}" > ${EFIIMGDIR}/startup.nsh
47 if [ -f "$iso_dir/initrd" ] ; then
48 cp $iso_dir/initrd ${EFIIMGDIR}
49 fi
50}
51
52efi_hddimg_populate() {
53 efi_populate $1
54}
55
56python build_efi_cfg() {
57 s = d.getVar("S", True)
58 labels = d.getVar('LABELS', True)
59 if not labels:
60 bb.debug(1, "LABELS not defined, nothing to do")
61 return
62
63 if labels == []:
64 bb.debug(1, "No labels, nothing to do")
65 return
66
67 cfile = d.getVar('GUMMIBOOT_CFG', True)
68 try:
69 cfgfile = open(cfile, 'w')
70 except OSError:
71 raise bb.build.funcFailed('Unable to open %s' % (cfile))
72
73 cfgfile.write('# Automatically created by OE\n')
74 cfgfile.write('default %s\n' % (labels.split()[0]))
75 timeout = d.getVar('GUMMIBOOT_TIMEOUT', True)
76 if timeout:
77 cfgfile.write('timeout %s\n' % timeout)
78 else:
79 cfgfile.write('timeout 10\n')
80 cfgfile.close()
81
82 for label in labels.split():
83 localdata = d.createCopy()
84
85 overrides = localdata.getVar('OVERRIDES', True)
86 if not overrides:
87 raise bb.build.FuncFailed('OVERRIDES not defined')
88
89 entryfile = "%s/%s.conf" % (s, label)
90 d.appendVar("GUMMIBOOT_ENTRIES", " " + entryfile)
91 try:
92 entrycfg = open(entryfile, "w")
93 except OSError:
94 raise bb.build.funcFailed('Unable to open %s' % (entryfile))
95 localdata.setVar('OVERRIDES', label + ':' + overrides)
96 bb.data.update_data(localdata)
97
98 entrycfg.write('title %s\n' % label)
99 entrycfg.write('linux /vmlinuz\n')
100
101 append = localdata.getVar('APPEND', True)
102 initrd = localdata.getVar('INITRD', True)
103
104 if initrd:
105 entrycfg.write('initrd /initrd\n')
106 lb = label
107 if label == "install":
108 lb = "install-efi"
109 entrycfg.write('options LABEL=%s ' % lb)
110 if append:
111 entrycfg.write('%s' % append)
112 entrycfg.write('\n')
113 entrycfg.close()
114}
diff --git a/meta/recipes-core/initrdscripts/files/init-install-efi.sh b/meta/recipes-core/initrdscripts/files/init-install-efi.sh
index 9846637316..ed3221b0a6 100644
--- a/meta/recipes-core/initrdscripts/files/init-install-efi.sh
+++ b/meta/recipes-core/initrdscripts/files/init-install-efi.sh
@@ -104,6 +104,7 @@ parted /dev/${device} mklabel gpt
104 104
105echo "Creating boot partition on $bootfs" 105echo "Creating boot partition on $bootfs"
106parted /dev/${device} mkpart primary 0% $boot_size 106parted /dev/${device} mkpart primary 0% $boot_size
107parted /dev/${device} set 1 boot on
107 108
108echo "Creating rootfs partition on $rootfs" 109echo "Creating rootfs partition on $rootfs"
109parted /dev/${device} mkpart primary $rootfs_start $rootfs_end 110parted /dev/${device} mkpart primary $rootfs_start $rootfs_end
@@ -149,23 +150,41 @@ mount $bootfs /ssd
149 150
150EFIDIR="/ssd/EFI/BOOT" 151EFIDIR="/ssd/EFI/BOOT"
151mkdir -p $EFIDIR 152mkdir -p $EFIDIR
152GRUBCFG="$EFIDIR/grub.cfg"
153
154cp /media/$1/vmlinuz /ssd 153cp /media/$1/vmlinuz /ssd
155# Copy the efi loader and config (booti*.efi and grub.cfg) 154# Copy the efi loader
156cp /media/$1/EFI/BOOT/* $EFIDIR 155cp /media/$1/EFI/BOOT/*.efi $EFIDIR
157 156
158# Update grub config for the installed image 157if [ -f /media/$1/EFI/BOOT/grub.cfg ]; then
159# Delete the install entry 158 GRUBCFG="$EFIDIR/grub.cfg"
160sed -i "/menuentry 'install'/,/^}/d" $GRUBCFG 159 cp /media/$1/EFI/BOOT/grub.cfg $GRUBCFG
161# Delete the initrd lines 160 # Update grub config for the installed image
162sed -i "/initrd /d" $GRUBCFG 161 # Delete the install entry
163# Delete any LABEL= strings 162 sed -i "/menuentry 'install'/,/^}/d" $GRUBCFG
164sed -i "s/ LABEL=[^ ]*/ /" $GRUBCFG 163 # Delete the initrd lines
165# Delete any root= strings 164 sed -i "/initrd /d" $GRUBCFG
166sed -i "s/ root=[^ ]*/ /" $GRUBCFG 165 # Delete any LABEL= strings
167# Add the root= and other standard boot options 166 sed -i "s/ LABEL=[^ ]*/ /" $GRUBCFG
168sed -i "s@linux /vmlinuz *@linux /vmlinuz root=$rootfs rw $rootwait quiet @" $GRUBCFG 167 # Delete any root= strings
168 sed -i "s/ root=[^ ]*/ /" $GRUBCFG
169 # Add the root= and other standard boot options
170 sed -i "s@linux /vmlinuz *@linux /vmlinuz root=$rootfs rw $rootwait quiet @" $GRUBCFG
171fi
172
173if [ -d /media/$1/loader ]; then
174 GUMMIBOOT_CFGS="/ssd/loader/entries/*.conf"
175 # copy config files for gummiboot
176 cp -dr /media/$1/loader /ssd
177 # delete the install entry
178 rm -f /ssd/loader/entries/install.conf
179 # delete the initrd lines
180 sed -i "/initrd /d" $GUMMIBOOT_CFGS
181 # delete any LABEL= strings
182 sed -i "s/ LABEL=[^ ]*/ /" $GUMMIBOOT_CFGS
183 # delete any root= strings
184 sed -i "s/ root=[^ ]*/ /" $GUMMIBOOT_CFGS
185 # add the root= and other standard boot options
186 sed -i "s@options *@options root=$rootfs rw $rootwait quiet @" $GUMMIBOOT_CFGS
187fi
169 188
170umount /ssd 189umount /ssd
171sync 190sync