Skip to contentSkip to conversation

Fixes for grub EFI

PATCH In review Robert Yang 1 participant 6 messages Apr 1, 2016 – Apr 2, 2016

lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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
index 7a0b4d4..b562109 100644
@@ -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
index 0443a9d..3531158 100644
@@ -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
index 1925d90..c5623ee 100644
@@ -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
#2 lore raw

PATCH 2/3 init-install-efi.sh: remove all root=foo from grub.cfg

In reply to Robert Yang

There 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
index 3531158..d58826a 100644
@@ -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
#3 lore raw

PATCH 3/3 grub-efi.bbclass: don't use APPEND

In reply to Robert Yang

APPEND 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
index 3d8ff11..f80a3cc 100644
@@ -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
#4 lore raw

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_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
index 3d8ff11..f80a3cc 100644
@@ -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')
 
#5 lore raw
In reply to Robert Yang

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
index 3d8ff11..4ce3d28 100644
@@ -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
index 7d324c3..defad73 100644
@@ -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=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(-)