diff options
| author | Tom Zanussi <tom.zanussi@intel.com> | 2011-01-31 00:07:54 -0600 |
|---|---|---|
| committer | Tom Zanussi <tom.zanussi@intel.com> | 2011-01-31 00:07:54 -0600 |
| commit | c5ecc11dec2402aa05e68bd03b65a6460837b748 (patch) | |
| tree | 8ca0e296946abc3a0b9a79b51fa9f04d7d5469d7 | |
| parent | 3a6fbfdf01945277a4a271942fc8086575c41744 (diff) | |
| download | meta-intel-c5ecc11dec2402aa05e68bd03b65a6460837b748.tar.gz | |
meta-intel: add a /common dir with grub2/live-install changes
Add a /common dir to contain code shared by multiple BSPs in the
meta-intel repo, along with a couple recipes to live there
temporarily.
In this case, there are two BSPs that need to share the common grub2
and associated initramfs-live-install changes (sugarbay and
jasperforest).
The grub2 and associated initramfs-live-install changes will soon be
submitted to the main poky repo, but for now it makes more sense to
keep them here - they're needed for live-install of the two BSPs
mentioned, but they contain a couple hacks that need to be addressed
and are untested with anything else.
Signed-off-by: Tom Zanussi <tom.zanussi@intel.com>
6 files changed, 288 insertions, 0 deletions
diff --git a/common/recipes-bsp/grub/grub-1.98/40_custom b/common/recipes-bsp/grub/grub-1.98/40_custom new file mode 100755 index 00000000..30dad39a --- /dev/null +++ b/common/recipes-bsp/grub/grub-1.98/40_custom | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | exec tail -n +3 $0 | ||
| 3 | # This file provides an easy way to add custom menu entries. Simply type the | ||
| 4 | # menu entries you want to add after this comment. Be careful not to change | ||
| 5 | # the 'exec tail' line above. | ||
| 6 | menuentry "Yocto Linux" { | ||
| 7 | set root=(hd0,1) | ||
| 8 | linux /boot/vmlinuz root=__ROOTFS__ rw __VIDEO_MODE__ __VGA_MODE__ quiet | ||
| 9 | } | ||
diff --git a/common/recipes-bsp/grub/grub-1.98/grub-install.in.patch b/common/recipes-bsp/grub/grub-1.98/grub-install.in.patch new file mode 100644 index 00000000..ac964193 --- /dev/null +++ b/common/recipes-bsp/grub/grub-1.98/grub-install.in.patch | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | Index: grub-1.98/util/grub-install.in | ||
| 2 | =================================================================== | ||
| 3 | --- grub-1.98.orig/util/grub-install.in 2011-01-25 23:47:05.587521825 -0600 | ||
| 4 | +++ grub-1.98/util/grub-install.in 2011-01-25 23:47:23.867521822 -0600 | ||
| 5 | @@ -306,7 +306,7 @@ | ||
| 6 | |||
| 7 | if [ "x${devabstraction_module}" = "x" ] ; then | ||
| 8 | if [ x"${install_device}" != x ]; then | ||
| 9 | - if echo "${install_device}" | grep -qx "(.*)" ; then | ||
| 10 | + if echo "${install_device}" | grep -q "(.*)" ; then | ||
| 11 | install_drive="${install_device}" | ||
| 12 | else | ||
| 13 | install_drive="`$grub_probe --target=drive --device ${install_device}`" | ||
diff --git a/common/recipes-bsp/grub/grub-1.98/uninit-shdr-fix.patch b/common/recipes-bsp/grub/grub-1.98/uninit-shdr-fix.patch new file mode 100644 index 00000000..67af594b --- /dev/null +++ b/common/recipes-bsp/grub/grub-1.98/uninit-shdr-fix.patch | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | Index: grub-1.98/loader/i386/bsdXX.c | ||
| 2 | =================================================================== | ||
| 3 | --- grub-1.98.orig/loader/i386/bsdXX.c 2011-01-25 00:12:14.967535179 -0600 | ||
| 4 | +++ grub-1.98/loader/i386/bsdXX.c 2011-01-25 00:13:16.387535169 -0600 | ||
| 5 | @@ -80,7 +80,7 @@ | ||
| 6 | { | ||
| 7 | Elf_Ehdr e; | ||
| 8 | Elf_Shdr *s; | ||
| 9 | - char *shdr; | ||
| 10 | + char *shdr = NULL; | ||
| 11 | grub_addr_t curload, module; | ||
| 12 | grub_err_t err; | ||
| 13 | |||
| 14 | @@ -148,7 +148,7 @@ | ||
| 15 | { | ||
| 16 | Elf_Ehdr e; | ||
| 17 | Elf_Shdr *s; | ||
| 18 | - char *shdr; | ||
| 19 | + char *shdr = NULL; | ||
| 20 | grub_addr_t curload, module; | ||
| 21 | grub_err_t err; | ||
| 22 | |||
| 23 | @@ -223,7 +223,7 @@ | ||
| 24 | grub_err_t err; | ||
| 25 | Elf_Ehdr e; | ||
| 26 | Elf_Shdr *s; | ||
| 27 | - char *shdr; | ||
| 28 | + char *shdr = NULL; | ||
| 29 | unsigned symoff, stroff, symsize, strsize; | ||
| 30 | grub_addr_t curload; | ||
| 31 | grub_freebsd_addr_t symstart, symend, symentsize, dynamic; | ||
diff --git a/common/recipes-bsp/grub/grub_1.98.bb b/common/recipes-bsp/grub/grub_1.98.bb new file mode 100644 index 00000000..b9d04fc5 --- /dev/null +++ b/common/recipes-bsp/grub/grub_1.98.bb | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | SUMMARY = "GRUB2 is the next-generation GRand Unified Bootloader" | ||
| 2 | |||
| 3 | DESCRIPTION = "GRUB2 is the next generaion of a GPLed bootloader \ | ||
| 4 | intended to unify bootloading across x86 operating systems. In \ | ||
| 5 | addition to loading the Linux kernel, it implements the Multiboot \ | ||
| 6 | standard, which allows for flexible loading of multiple boot images." | ||
| 7 | |||
| 8 | HOMEPAGE = "http://www.gnu.org/software/grub/" | ||
| 9 | SECTION = "bootloaders" | ||
| 10 | PRIORITY = "optional" | ||
| 11 | |||
| 12 | LICENSE = "GPLv2+" | ||
| 13 | LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504" | ||
| 14 | |||
| 15 | RDEPENDS = "diffutils" | ||
| 16 | PR = "r0" | ||
| 17 | |||
| 18 | SRC_URI = "ftp://alpha.gnu.org/gnu/grub/grub-${PV}.tar.gz \ | ||
| 19 | file://uninit-shdr-fix.patch;apply=yes \ | ||
| 20 | file://grub-install.in.patch;apply=yes \ | ||
| 21 | file://40_custom" | ||
| 22 | |||
| 23 | inherit autotools | ||
| 24 | inherit gettext | ||
| 25 | |||
| 26 | EXTRA_OECONF = "--with-platform=pc --target=i386" | ||
| 27 | |||
| 28 | do_configure() { | ||
| 29 | oe_runconf | ||
| 30 | } | ||
| 31 | |||
| 32 | python __anonymous () { | ||
| 33 | import re | ||
| 34 | host = bb.data.getVar('HOST_SYS', d, 1) | ||
| 35 | if not re.match('x86.64.*-linux', host): | ||
| 36 | raise bb.parse.SkipPackage("incompatible with host %s" % host) | ||
| 37 | } | ||
| 38 | |||
| 39 | do_install_append () { | ||
| 40 | install -m 0755 ${WORKDIR}/40_custom ${D}${sysconfdir}/grub.d/40_custom | ||
| 41 | } | ||
| 42 | |||
| 43 | FILES_${PN}-doc = "${datadir}" | ||
| 44 | FILES_${PN} = "/usr /etc" | ||
| 45 | |||
diff --git a/common/recipes-core/initrdscripts/initramfs-live-install/init-install.sh b/common/recipes-core/initrdscripts/initramfs-live-install/init-install.sh new file mode 100644 index 00000000..7f2ea7f4 --- /dev/null +++ b/common/recipes-core/initrdscripts/initramfs-live-install/init-install.sh | |||
| @@ -0,0 +1,188 @@ | |||
| 1 | #!/bin/sh -e | ||
| 2 | # | ||
| 3 | # Copyright (C) 2008 Intel | ||
| 4 | # | ||
| 5 | # install.sh [device_name] [rootfs_name] [video_mode] [vga_mode] | ||
| 6 | # | ||
| 7 | |||
| 8 | # We need 20 Mb for the boot partition | ||
| 9 | boot_size=20 | ||
| 10 | |||
| 11 | # 5% for the swap | ||
| 12 | swap_ratio=5 | ||
| 13 | |||
| 14 | found="no" | ||
| 15 | |||
| 16 | echo "Searching for a hard drive..." | ||
| 17 | for device in 'hda' 'hdb' 'sda' 'sdb' | ||
| 18 | do | ||
| 19 | if [ -e /sys/block/${device}/removable ]; then | ||
| 20 | if [ "$(cat /sys/block/${device}/removable)" = "0" ]; then | ||
| 21 | found="yes" | ||
| 22 | |||
| 23 | while true; do | ||
| 24 | echo "Found drive at /dev/${device}. Do you want to install poky there ? [y/n]" | ||
| 25 | read answer | ||
| 26 | if [ "$answer" = "y" ] ; then | ||
| 27 | break | ||
| 28 | fi | ||
| 29 | |||
| 30 | if [ "$answer" = "n" ] ; then | ||
| 31 | found=no | ||
| 32 | break | ||
| 33 | fi | ||
| 34 | |||
| 35 | echo "Please answer by y or n" | ||
| 36 | done | ||
| 37 | fi | ||
| 38 | fi | ||
| 39 | |||
| 40 | if [ "$found" = "yes" ]; then | ||
| 41 | break; | ||
| 42 | fi | ||
| 43 | |||
| 44 | done | ||
| 45 | |||
| 46 | if [ "$found" = "no" ]; then | ||
| 47 | exit 1 | ||
| 48 | fi | ||
| 49 | |||
| 50 | echo "Installing image on /dev/${device}" | ||
| 51 | |||
| 52 | # | ||
| 53 | # The udev automounter can cause pain here, kill it | ||
| 54 | # | ||
| 55 | rm -f /etc/udev/scripts/mount* | ||
| 56 | |||
| 57 | # | ||
| 58 | # Unmount anything the automounter had mounted | ||
| 59 | # | ||
| 60 | umount /dev/${device} 2> /dev/null || /bin/true | ||
| 61 | umount /dev/${device}1 2> /dev/null || /bin/true | ||
| 62 | umount /dev/${device}2 2> /dev/null || /bin/true | ||
| 63 | umount /dev/${device}3 2> /dev/null || /bin/true | ||
| 64 | umount /dev/${device}4 2> /dev/null || /bin/true | ||
| 65 | umount /dev/${device}5 2> /dev/null || /bin/true | ||
| 66 | umount /dev/${device}6 2> /dev/null || /bin/true | ||
| 67 | |||
| 68 | if [ ! -b /dev/sda ] ; then | ||
| 69 | mknod /dev/sda b 8 0 | ||
| 70 | fi | ||
| 71 | |||
| 72 | if [ ! -b /dev/sdb ] ; then | ||
| 73 | mknod /dev/sdb b 8 16 | ||
| 74 | fi | ||
| 75 | |||
| 76 | if [ ! -b /dev/loop0 ] ; then | ||
| 77 | mknod /dev/loop0 b 7 0 | ||
| 78 | fi | ||
| 79 | |||
| 80 | mkdir -p /tmp | ||
| 81 | cat /proc/mounts > /etc/mtab | ||
| 82 | |||
| 83 | disk_size=$(parted /dev/${device} unit mb print | grep Disk | cut -d" " -f 3 | sed -e "s/MB//") | ||
| 84 | |||
| 85 | swap_size=$((disk_size*5/100)) | ||
| 86 | rootfs_size=$((disk_size-boot_size-swap_size)) | ||
| 87 | |||
| 88 | rootfs_start=$((boot_size + 1)) | ||
| 89 | rootfs_end=$((rootfs_start+rootfs_size)) | ||
| 90 | swap_start=$((rootfs_end+1)) | ||
| 91 | |||
| 92 | bootfs=/dev/${device}1 | ||
| 93 | rootfs=/dev/${device}2 | ||
| 94 | swap=/dev/${device}3 | ||
| 95 | |||
| 96 | echo "*****************" | ||
| 97 | echo "Boot partition size: $boot_size MB (/dev/${device}1)" | ||
| 98 | echo "Rootfs partition size: $rootfs_size MB (/dev/${device}2)" | ||
| 99 | echo "Swap partition size: $swap_size MB (/dev/${device}3)" | ||
| 100 | echo "*****************" | ||
| 101 | echo "Deleting partition table on /dev/${device} ..." | ||
| 102 | dd if=/dev/zero of=/dev/${device} bs=512 count=2 | ||
| 103 | |||
| 104 | echo "Creating new partition table on /dev/${device} ..." | ||
| 105 | parted /dev/${device} mklabel msdos | ||
| 106 | |||
| 107 | echo "Creating boot partition on /dev/${device}1" | ||
| 108 | parted /dev/${device} mkpartfs primary ext2 0 $boot_size | ||
| 109 | |||
| 110 | echo "Creating rootfs partition on /dev/${device}2" | ||
| 111 | parted /dev/${device} mkpartfs primary ext2 $rootfs_start $rootfs_end | ||
| 112 | |||
| 113 | echo "Creating swap partition on /dev/${device}3" | ||
| 114 | parted /dev/${device} mkpartfs primary linux-swap $swap_start $disk_size | ||
| 115 | |||
| 116 | parted /dev/${device} print | ||
| 117 | |||
| 118 | echo "Formatting /dev/${device}1 to ext2..." | ||
| 119 | mkfs.ext3 $bootfs | ||
| 120 | |||
| 121 | echo "Formatting /dev/${device}2 to ext3..." | ||
| 122 | mkfs.ext3 $rootfs | ||
| 123 | |||
| 124 | echo "Formatting swap partition...(/dev/${device}3)" | ||
| 125 | mkswap $swap | ||
| 126 | |||
| 127 | mkdir /ssd | ||
| 128 | mkdir /rootmnt | ||
| 129 | mkdir /bootmnt | ||
| 130 | |||
| 131 | mount $rootfs /ssd | ||
| 132 | mount -o rw,loop,noatime,nodiratime /media/$1/$2 /rootmnt | ||
| 133 | |||
| 134 | echo "Copying rootfs files..." | ||
| 135 | cp -a /rootmnt/* /ssd | ||
| 136 | |||
| 137 | if [ -d /ssd/etc/ ] ; then | ||
| 138 | echo "$swap swap swap defaults 0 0" >> /ssd/etc/fstab | ||
| 139 | |||
| 140 | # We dont want udev to mount our root device while we're booting... | ||
| 141 | if [ -d /ssd/etc/udev/ ] ; then | ||
| 142 | echo "/dev/${device}" >> /ssd/etc/udev/mount.blacklist | ||
| 143 | fi | ||
| 144 | fi | ||
| 145 | |||
| 146 | if [ -f /ssd/etc/grub.d/40_custom ] ; then | ||
| 147 | sed -i "s@__ROOTFS__@$rootfs@g" /ssd/etc/grub.d/40_custom | ||
| 148 | sed -i "s/__VIDEO_MODE__/$3/g" /ssd/etc/grub.d/40_custom | ||
| 149 | sed -i "s/__VGA_MODE__/$4/g" /ssd/etc/grub.d/40_custom | ||
| 150 | mount $bootfs /bootmnt | ||
| 151 | cp /ssd/etc/grub.d/40_custom /bootmnt/40_custom | ||
| 152 | umount /bootmnt | ||
| 153 | force="--force" | ||
| 154 | fi | ||
| 155 | |||
| 156 | umount /ssd | ||
| 157 | umount /rootmnt | ||
| 158 | |||
| 159 | echo "Preparing boot partition..." | ||
| 160 | mount $bootfs /ssd | ||
| 161 | grub-install $force --root-directory=/ssd /dev/${device} | ||
| 162 | |||
| 163 | echo "(hd0) /dev/${device}" > /ssd/boot/grub/device.map | ||
| 164 | |||
| 165 | if [ -f /ssd/40_custom ] ; then | ||
| 166 | mv /ssd/40_custom /ssd/boot/grub/grub.cfg | ||
| 167 | sed -i "/#/d" /ssd/boot/grub/grub.cfg | ||
| 168 | sed -i "/exec tail/d" /ssd/boot/grub/grub.cfg | ||
| 169 | chmod 0444 /ssd/boot/grub/grub.cfg | ||
| 170 | else | ||
| 171 | echo "default 0" > /ssd/boot/grub/menu.lst | ||
| 172 | echo "timeout 30" >> /ssd/boot/grub/menu.lst | ||
| 173 | echo "title Poky-Netbook" >> /ssd/boot/grub/menu.lst | ||
| 174 | echo "root (hd0,1)" >> /ssd/boot/grub/menu.lst | ||
| 175 | echo "kernel /boot/vmlinuz root=$rootfs rw $3 $4 quiet" >> /ssd/boot/grub/menu.lst | ||
| 176 | fi | ||
| 177 | |||
| 178 | cp /media/$1/vmlinuz /ssd/boot/ | ||
| 179 | |||
| 180 | umount /ssd | ||
| 181 | sync | ||
| 182 | |||
| 183 | echo "Remove your installation media, and press ENTER" | ||
| 184 | |||
| 185 | read enter | ||
| 186 | |||
| 187 | echo "Rebooting..." | ||
| 188 | reboot -f | ||
diff --git a/common/recipes-core/initrdscripts/initramfs-live-install_1.0.bbappend b/common/recipes-core/initrdscripts/initramfs-live-install_1.0.bbappend new file mode 100644 index 00000000..d3420e0a --- /dev/null +++ b/common/recipes-core/initrdscripts/initramfs-live-install_1.0.bbappend | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | THISDIR := "${@os.path.dirname(bb.data.getVar('FILE', d, True))}" | ||
| 2 | FILESPATH =. "${@base_set_filespath(["${THISDIR}/${PN}"], d)}:" | ||
