Fixes for grub EFI
cover Fixes for grub EFI
The following changes since commit 322904f62f11e794543362f04212242567c556a0:
selftest/signing: Use packagedata to obtain PR value for signing test (2016-03-31 23:55:13 +0100)
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib rbt/efi
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=19f9e2e1bf005d885453ec2d5ead37de78c6bd0c
Robert Yang (3):
init-install.sh: fix disk_size init-install-efi.sh: remove all root=foo from grub.cfg grub-efi.bbclass: don't use APPEND
meta/classes/grub-efi.bbclass | 12 ++++++------ .../initrdscripts/files/init-install-efi-testfs.sh | 2 +- meta/recipes-core/initrdscripts/files/init-install-efi.sh | 4 ++-- meta/recipes-core/initrdscripts/files/init-install.sh | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-)
Signature · 1 line
2.8.0
PATCH 1/3 init-install.sh: fix disk_size
It mis-matched "SanDisk" or "Disk Flags" before, which caused unexpected error.
--- meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh | 2 +- meta/recipes-core/initrdscripts/files/init-install-efi.sh | 2 +- meta/recipes-core/initrdscripts/files/init-install.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)
meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh +1 -1
@@ -69,7 +69,7 @@ umount /dev/${device}* 2> /dev/null || /bin/true mkdir -p /tmp cat /proc/mounts > /etc/mtab -disk_size=$(parted /dev/${device} unit mb print | grep Disk | cut -d" " -f 3 | sed -e "s/MB//") +disk_size=$(parted /dev/${device} unit mb print | grep '^Disk .*: .*MB' | cut -d" " -f 3 | sed -e "s/MB//") testfs_size=$((disk_size*testfs_ratio/100)) rootfs_size=$((disk_size-boot_size-testfs_size))
meta/recipes-core/initrdscripts/files/init-install-efi.sh +1 -1
@@ -120,7 +120,7 @@ if [ ! -e /etc/mtab ]; then cat /proc/mounts > /etc/mtab fi -disk_size=$(parted ${device} unit mb print | grep Disk | cut -d" " -f 3 | sed -e "s/MB//") +disk_size=$(parted ${device} unit mb print | grep '^Disk .*: .*MB' | cut -d" " -f 3 | sed -e "s/MB//") swap_size=$((disk_size*swap_ratio/100)) rootfs_size=$((disk_size-boot_size-swap_size))
meta/recipes-core/initrdscripts/files/init-install.sh +1 -1
@@ -116,7 +116,7 @@ if [ ! -L /etc/mtab ]; then cat /proc/mounts > /etc/mtab fi -disk_size=$(parted ${device} unit mb print | grep Disk | cut -d" " -f 3 | sed -e "s/MB//") +disk_size=$(parted ${device} unit mb print | grep '^Disk .*: .*MB' | cut -d" " -f 3 | sed -e "s/MB//") grub_version=$(grub-install -v|sed 's/.* \([0-9]\).*/\1/')
Signature · 1 line
2.8.0
PATCH 2/3 init-install-efi.sh: remove all root=foo from grub.cfg
In reply to Robert YangThere might be more than one root=/dev/foo in the config file which would cause unepected errros on the installed target, so remove all of them.
[YOCTO #9354]
--- meta/recipes-core/initrdscripts/files/init-install-efi.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
meta/recipes-core/initrdscripts/files/init-install-efi.sh +1 -1
@@ -217,7 +217,7 @@ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then # Delete any LABEL= strings sed -i "s/ LABEL=[^ ]*/ /" $GRUBCFG # Delete any root= strings - sed -i "s/ root=[^ ]*/ /" $GRUBCFG + sed -i "s/ root=[^ ]*/ /g" $GRUBCFG # Add the root= and other standard boot options sed -i "s@linux /vmlinuz *@linux /vmlinuz root=PARTUUID=$root_part_uuid rw $rootwait quiet @" $GRUBCFG fi
Signature · 1 line
2.8.0
PATCH 3/3 grub-efi.bbclass: don't use APPEND
In reply to Robert YangAPPEND is a keyword of syslinux, grub should not use it, use GRUB_ROOT to instead of it.
[YOCTO #9354]
--- meta/classes/grub-efi.bbclass | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
meta/classes/grub-efi.bbclass +6 -6
@@ -11,9 +11,9 @@ # ${ROOTFS} - indicates a filesystem image to include as the root filesystem (optional) # ${GRUB_GFXSERIAL} - set this to 1 to have graphics and serial in the boot menu # ${LABELS} - a list of targets for the automatic config -# ${APPEND} - an override list of append strings for each label # ${GRUB_OPTS} - additional options to add to the config, ';' delimited # (optional) # ${GRUB_TIMEOUT} - timeout before executing the deault label (optional) +# ${GRUB_ROOT} - grub's root device. do_bootimg[depends] += "${MLPREFIX}grub-efi:do_deploy" do_bootdirectdisk[depends] += "${MLPREFIX}grub-efi:do_deploy"
@@ -26,7 +26,7 @@ GRUB_TIMEOUT ?= "10" GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1" EFIDIR = "/EFI/BOOT" -APPEND_prepend = " ${ROOT} " +GRUB_ROOT ?= "${ROOT}" # Need UUID utility code. inherit fs-uuid
@@ -131,12 +131,12 @@ python build_efi_cfg() { lb = "install-efi" cfgfile.write('linux /vmlinuz LABEL=%s' % (lb)) - append = localdata.getVar('APPEND', True) + root = localdata.getVar('GRUB_ROOT', True) initrd = localdata.getVar('INITRD', True) - if append: - append = replace_rootfs_uuid(d, append) - cfgfile.write('%s' % (append)) + if root: + root = replace_rootfs_uuid(d, root) + cfgfile.write(' %s' % (root)) cfgfile.write(' %s' % btype[1]) cfgfile.write('\n')
Signature · 1 line
2.8.0
Re: [PATCH 3/3] grub-efi.bbclass: don't use APPEND
For patch 3/3, RP said that changing APPEND may break some other BSP layers, I will update this patch.
// Robert
Quoted 52 lines · Robert Yang
APPEND is a keyword of syslinux, grub should not use it, use
GRUB_ROOTto instead of it.[YOCTO #9354]
Signed-off-by Robert Yang <[email protected]>--- meta/classes/grub-efi.bbclass | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)meta/classes/grub-efi.bbclass +6
-6@@ -11,9 +11,9 @@ # ${ROOTFS} - indicates a filesystem image to include as the root filesystem (optional) # ${GRUB_GFXSERIAL} - set this to 1 to have graphics and serial in the boot menu # ${LABELS} - a list of targets for the automatic config -# ${APPEND} - an override list of append strings for each label # ${GRUB_OPTS} - additional options to add to the config, ';' delimited # (optional) # ${GRUB_TIMEOUT} - timeout before executing the deault label (optional) +# ${GRUB_ROOT} - grub's root device. do_bootimg[depends] += "${MLPREFIX}grub-efi:do_deploy" do_bootdirectdisk[depends] += "${MLPREFIX}grub-efi:do_deploy"@@ -26,7 +26,7 @@ GRUB_TIMEOUT ?= "10" GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1" EFIDIR = "/EFI/BOOT" -APPEND_prepend = " ${ROOT} " +GRUB_ROOT ?= "${ROOT}" # Need UUID utility code. inherit fs-uuid@@ -131,12 +131,12 @@ python build_efi_cfg() { lb = "install-efi" cfgfile.write('linux /vmlinuz LABEL=%s' % (lb)) - append = localdata.getVar('APPEND', True) + root = localdata.getVar('GRUB_ROOT', True) initrd = localdata.getVar('INITRD', True) - if append: - append = replace_rootfs_uuid(d, append) - cfgfile.write('%s' % (append)) + if root: + root = replace_rootfs_uuid(d, root) + cfgfile.write(' %s' % (root)) cfgfile.write(' %s' % btype[1]) cfgfile.write('\n')
Hello,
I updated patch 3/3 in the repo, now APPEND is stilled kept for syslinux and grub-efi.
Here are the patches:
git://git.openembedded.org/openembedded-core-contrib rbt/efi
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=rbt/efi
Patch 1 and 2 are the same, here is patch 3:
commit 4d56b6768748368a1a792c0d9e29ddfa2f87d2aa
Author: Robert Yang <[email protected]> Date: Fri Apr 1 00:32:55 2016 -0700
grub-efi.bbclass: use GRUB_ROOT rather than APPEND for root device
Use APPEND for grub's root device may cause confusion, for example, when building efi + pcbios, there maybe be two root=/dev/ram0, one of them would be carried to the installed target, and the target would fail to boot. Use GRUB_ROOT to fix the problem, and remove SYSLINUX_ROOT from APPEND will fix the problem.
[YOCTO #9354]
meta/classes/grub-efi.bbclass +0 -0
@@ -14,6 +14,7 @@ # ${APPEND} - an override list of append strings for each label # ${GRUB_OPTS} - additional options to add to the config, ';' delimited #
(optional)
# ${GRUB_TIMEOUT} - timeout before executing the deault label (optional)
+# ${GRUB_ROOT} - grub's root device.
do_bootimg[depends] += "${MLPREFIX}grub-efi:do_deploy" do_bootdirectdisk[depends] += "${MLPREFIX}grub-efi:do_deploy"
@@ -26,7 +27,8 @@ GRUB_TIMEOUT ?= "10"
GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
EFIDIR = "/EFI/BOOT"
-APPEND_prepend = " ${ROOT} "
+GRUB_ROOT ?= "${ROOT}"
+APPEND ?= ""
# Need UUID utility code.
inherit fs-uuid
@@ -108,6 +110,10 @@ python build_efi_cfg() {
else:
cfgfile.write('timeout=50\n')+ root = d.getVar('GRUB_ROOT', True)
+ if not root:
+ raise bb.build.FuncFailed('GRUB_ROOT not defined')
+
if gfxserial == "1":
btypes = [ [ " graphics console", "" ],
[ " serial console", d.getVar('GRUB_SERIAL', True) or "" ] ]@@ -131,6 +137,8 @@ python build_efi_cfg() {
lb = "install-efi"
cfgfile.write('linux /vmlinuz LABEL=%s' % (lb))
+ cfgfile.write(' %s' % replace_rootfs_uuid(d, root))
+
append = localdata.getVar('APPEND', True) initrd = localdata.getVar('INITRD', True)
meta/classes/syslinux.bbclass +12 -10
@@ -33,7 +33,7 @@ AUTO_SYSLINUXMENU ?= "1" SYSLINUX_ROOT ?= "${ROOT}" SYSLINUX_CFG_VM ?= "${S}/syslinux_vm.cfg" SYSLINUX_CFG_LIVE ?= "${S}/syslinux_live.cfg" -APPEND_prepend = " ${SYSLINUX_ROOT} " +APPEND ?= "" # Need UUID utility code. inherit fs-uuid
@@ -164,6 +164,10 @@ python build_syslinux_cfg () { btypes = [ [ "Graphics console ", syslinux_default_console ], [ "Serial console ", syslinux_serial_tty ] ] + root= d.getVar('SYSLINUX_ROOT', True) + if not root: + raise bb.build.FuncFailed('SYSLINUX_ROOT not defined') + for btype in btypes: cfgfile.write('LABEL %s%s\nKERNEL /vmlinuz\n' % (btype[0], label))
@@ -174,17 +178,15 @@ python build_syslinux_cfg () { append = localdata.getVar('APPEND', True) initrd = localdata.getVar('INITRD', True) - if append: - cfgfile.write('APPEND ') + append = root + " " + append + cfgfile.write('APPEND ') - if initrd: - cfgfile.write('initrd=/initrd ') + if initrd: + cfgfile.write('initrd=/initrd ') - cfgfile.write('LABEL=%s '% (label)) - append = replace_rootfs_uuid(d, append) - cfgfile.write('%s %s\n' % (append, btype[1])) - else: - cfgfile.write('APPEND %s\n' % btype[1]) + cfgfile.write('LABEL=%s '% (label)) + append = replace_rootfs_uuid(d, append) + cfgfile.write('%s %s\n' % (append, btype[1])) cfgfile.close() }
// Robert
Quoted 20 lines · Robert Yang
The following changes since commit
322904f62f11e794543362f04212242567c556a0:selftest/signing: Use packagedata to obtain PR value for signing test (2016-03-31 23:55:13 +0100)
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib rbt/efi http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=19f9e2e1bf005d885453ec2d5ead37de78c6bd0cRobert Yang (3):
init-install.sh: fixdisk_sizeinit-install-efi.sh: remove all root=foo from grub.cfg grub-efi.bbclass: don't use APPENDmeta/classes/grub-efi.bbclass | 12 ++++++------ .../initrdscripts/files/init-install-efi-testfs.sh | 2 +- meta/recipes-core/initrdscripts/files/init-install-efi.sh | 4 ++-- meta/recipes-core/initrdscripts/files/init-install.sh | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-)