install: Look for grub2 files on the initramfs, not rootfs

Fixes [YOCTO #3870] atom-pc - cannot boot image on netbook after install

The problem here is that grub2 is installed but a grub 1 menu.lst is
created at install time. At boot, grub2 doesn't find a grub.cfg file and
drops to the grub shell.

This happens because the installer is looking for 40_custom (a grub2
file) on the rootfs, but grub2 isn't installed on the rootfs. It exists
in the initramfs. Patching the installer to look on the initramfs
resolves the problem.

Note that the problem may have occurred if grub2 used to be installed on
the rootfs but was later removed. In any case, the installer is HORRIBLE
and really needs to be completely redesigned as part of the deployment
effort. For now, this should get the live image installer limping along
again.

Tested on a Toshiba NB-305.

(From OE-Core rev: 8756a19bd24045d41ad20abb581e7872d0fc9ee6)

Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Cc: alexandru.c.georgescu@intel.com
Cc: sgw@linux.intel.com
Cc: ross.burton@intel.com
Cc: richard.purdie@intel.com
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Darren Hart 2013-02-21 09:28:02 -08:00 committed by Richard Purdie
parent c6209c96d9
commit 4f4d82c62c
2 changed files with 14 additions and 13 deletions

View File

@ -151,14 +151,19 @@ if [ -d /ssd/etc/ ] ; then
fi
fi
if [ -f /ssd/etc/grub.d/40_custom ] ; then
if [ -f /etc/grub.d/40_custom ] ; then
echo "Preparing custom grub2 menu..."
sed -i "s@__ROOTFS__@$rootfs $rootwait@g" /ssd/etc/grub.d/40_custom
sed -i "s/__VIDEO_MODE__/$3/g" /ssd/etc/grub.d/40_custom
sed -i "s/__VGA_MODE__/$4/g" /ssd/etc/grub.d/40_custom
sed -i "s/__CONSOLE__/$5/g" /ssd/etc/grub.d/40_custom
GRUBCFG="/bootmnt/boot/grub/grub.cfg"
mount $bootfs /bootmnt
cp /ssd/etc/grub.d/40_custom /bootmnt/40_custom
mkdir -p $(dirname $GRUBCFG)
cp /etc/grub.d/40_custom $GRUBCFG
sed -i "s@__ROOTFS__@$rootfs $rootwait@g" $GRUBCFG
sed -i "s/__VIDEO_MODE__/$3/g" $GRUBCFG
sed -i "s/__VGA_MODE__/$4/g" $GRUBCFG
sed -i "s/__CONSOLE__/$5/g" $GRUBCFG
sed -i "/#/d" $GRUBCFG
sed -i "/exec tail/d" $GRUBCFG
chmod 0444 $GRUBCFG
umount /bootmnt
fi
@ -171,12 +176,8 @@ grub-install --root-directory=/ssd /dev/${device}
echo "(hd0) /dev/${device}" > /ssd/boot/grub/device.map
if [ -f /ssd/40_custom ] ; then
mv /ssd/40_custom /ssd/boot/grub/grub.cfg
sed -i "/#/d" /ssd/boot/grub/grub.cfg
sed -i "/exec tail/d" /ssd/boot/grub/grub.cfg
chmod 0444 /ssd/boot/grub/grub.cfg
else
# If grub.cfg doesn't exist, assume GRUB 0.97 and create a menu.lst
if [ ! -f /ssd/boot/grub/grub.cfg ] ; then
echo "Preparing custom grub menu..."
echo "default 0" > /ssd/boot/grub/menu.lst
echo "timeout 30" >> /ssd/boot/grub/menu.lst

View File

@ -3,7 +3,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = "file://init-install.sh"
PR = "r7"
PR = "r8"
RDEPENDS_${PN} = "grub parted e2fsprogs-mke2fs"