From 29cae9f5fafb6f6981f1ff02993af0423d862bfe Mon Sep 17 00:00:00 2001 From: Eric Hameleers Date: Tue, 1 Dec 2015 22:05:11 +0100 Subject: Add working UEFI support to the Live ISO. --- EFI/BOOT/osdetect.cfg | 390 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 390 insertions(+) create mode 100644 EFI/BOOT/osdetect.cfg (limited to 'EFI/BOOT/osdetect.cfg') diff --git a/EFI/BOOT/osdetect.cfg b/EFI/BOOT/osdetect.cfg new file mode 100644 index 0000000..40bfd28 --- /dev/null +++ b/EFI/BOOT/osdetect.cfg @@ -0,0 +1,390 @@ +# Sample GRUB script to autodetect operating systems +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# Copyright (C) 2011, 2012 Jordan Uggla +# Copyright (C) 2011, 2012 Adrian Gibanel +# Copyright (C) 2013 Niall Walsh +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +source "${prefix}/tools.cfg" + +set saved_root=$root + +function freebsd_ufs_variants { + set device=$1 + set fstype=$2 + set uuid=$3 + + menuentry "FreeBSD ($fstype $device)" $device $uuid { + set root=$2 + set uuid=$3 + + kfreebsd /boot/kernel/kernel + set kFreeBSD.acpi_load=YES + set kFreeBSD.hint.acpi.0.disabled=0 + set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + kfreebsd_loadenv /boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (single)" $device $uuid { + set root=$2 + set uuid=$3 + + kfreebsd /boot/kernel/kernel -s + set kFreeBSD.acpi_load=YES + set kFreeBSD.hint.acpi.0.disabled=0 + set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + kfreebsd_loadenv /boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (verbose)" $device $uuid { + set root=$2 + set uuid=$3 + + kfreebsd /boot/kernel/kernel -v + set kFreeBSD.acpi_load=YES + set kFreeBSD.hint.acpi.0.disabled=0 + set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + kfreebsd_loadenv /boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (no ACPI)" $device $uuid { + set root=$2 + set uuid=$3 + + kfreebsd /boot/kernel/kernel -v + unset kFreeBSD.acpi_load + set kFreeBSD.hint.acpi.0.disabled=1 + set kFreeBSD.loader.acpi_disabled_by_user=1 + set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + kfreebsd_loadenv /boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (safe mode)" $device $uuid { + set root=$2 + set uuid=$3 + + kfreebsd /boot/kernel/kernel -v + unset kFreeBSD.acpi_load + set kFreeBSD.hint.acpi.0.disabled=1 + set kFreeBSD.loader.acpi_disabled_by_user=1 + set kFreeBSD.hint.apic.0.disabled=1 + set kFreeBSD.hw.ata.ata_dma=0 + set kFreeBSD.hw.ata.atapi_dma=0 + set kFreeBSD.hw.ata.wc=0 + set kFreeBSD.hw.eisa_slots=0 + set kFreeBSD.hint.kbdmux.0.disabled=1 + set kFreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + kfreebsd_loadenv /boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (Default boot loader)" $device $uuid { + set root=$2 + + kfreebsd /boot/loader + } +} + +function freebsd_zfs_variants { + set device=$1 + set fstype=zfs + + menuentry "FreeBSD ($fstype $device)" $device { + set root=$2 + + kfreebsd /@/boot/kernel/kernel + set kFreeBSD.acpi_load=YES + set kFreeBSD.hint.acpi.0.disabled=0 + kfreebsd_module_elf /@/boot/kernel/opensolaris.ko + kfreebsd_module_elf /@/boot/kernel/zfs.ko + kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set kFreeBSD.vfs.root.mountfrom=zfs:$name + kfreebsd_loadenv /@/boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (single)" $device { + set root=$2 + + kfreebsd /@/boot/kernel/kernel -s + set kFreeBSD.acpi_load=YES + set kFreeBSD.hint.acpi.0.disabled=0 + kfreebsd_module_elf /@/boot/kernel/opensolaris.ko + kfreebsd_module_elf /@/boot/kernel/zfs.ko + kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set kFreeBSD.vfs.root.mountfrom=zfs:$name + kfreebsd_loadenv /@/boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (verbose)" $device { + set root=$2 + + kfreebsd /@/boot/kernel/kernel -v + set kFreeBSD.acpi_load=YES + set kFreeBSD.hint.acpi.0.disabled=0 + kfreebsd_module_elf /@/boot/kernel/opensolaris.ko + kfreebsd_module_elf /@/boot/kernel/zfs.ko + kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set kFreeBSD.vfs.root.mountfrom=zfs:$name + kfreebsd_loadenv /@/boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (no ACPI)" $device { + set root=$2 + + kfreebsd /@/boot/kernel/kernel -v + unset kFreeBSD.acpi_load + set kFreeBSD.hint.acpi.0.disabled=1 + set kFreeBSD.loader.acpi_disabled_by_user=1 + kfreebsd_module_elf /@/boot/kernel/opensolaris.ko + kfreebsd_module_elf /@/boot/kernel/zfs.ko + kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set kFreeBSD.vfs.root.mountfrom=zfs:$name + kfreebsd_loadenv /@/boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (safe mode)" $device { + set root=$2 + + kfreebsd /@/boot/kernel/kernel -v + unset kFreeBSD.acpi_load + set kFreeBSD.hint.acpi.0.disabled=1 + set kFreeBSD.loader.acpi_disabled_by_user=1 + set kFreeBSD.hint.apic.0.disabled=1 + set kFreeBSD.hw.ata.ata_dma=0 + set kFreeBSD.hw.ata.atapi_dma=0 + set kFreeBSD.hw.ata.wc=0 + set kFreeBSD.hw.eisa_slots=0 + set kFreeBSD.hint.kbdmux.0.disabled=1 + kfreebsd_module_elf /@/boot/kernel/opensolaris.ko + kfreebsd_module_elf /@/boot/kernel/zfs.ko + kfreebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set kFreeBSD.vfs.root.mountfrom=zfs:$name + kfreebsd_loadenv /@/boot/device.hints + } + + menuentry "FreeBSD ($fstype $device) (Default boot loader)" $device $uuid { + set root=$2 + + kfreebsd /@/boot/loader + } + +} + +function get_efis { + blockdev="$1" + blockfs="$2" + efis="" + if [ "$blockfs" = "fat" ]; then + for efi in ($blockdev)/efi/*/*.efi ($blockdev)/efi/*/*/*.efi \ + ($blockdev)/*.efi ($blockdev)/*/*.efi ; do + if [ -f "$efi" ] ; then + efis="$efis $efi" + fi + done + if [ -n "$efis" ]; then + return 0 + fi + fi + return 1 +} + +insmod regexp + + +for dev in (*); do + # $device: parenthesis removed from $dev + regexp -s device '\((.*)\)' $dev + # Discard floppy and cdrom devices in search + # But search them if their search has been inforced + + if searchindevice "$device" ; then + + + # $fstype: filesystem type identified + probe -s fstype -f $dev + # uuid: filesystem UUID + probe -s uuid -u $dev + + if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then + menuentry "Windows Vista ($device)" $device { + set root=$2 + chainloader +1 + } + elif test -f ($device)/ntldr -a \ + -e ($device)/ntdetect.com -a -f ($device)/boot.ini; then + menuentry "Windows NT/2000/XP ($device)" $device { + set root=$2 + regexp -s devnum 'hd([0-9]+)' $root + if test "$devnum" != "0"; then + drivemap -s hd0 $root + fi + chainloader +1 + } + elif test -f ($device)/windows/win.com; then + menuentry "Windows 98/ME ($device)" $device { + set root=$2 + regexp -s devnum 'hd([0-9]+)' $root + if test "$devnum" != "0"; then + drivemap -s hd0 $root + fi + chainloader +1 + } + elif test -f ($device)/io.sys -a -f ($device)/command.com; then + menuentry "MS-DOS ($device)" $device { + set root=$2 + regexp -s devnum 'hd([0-9]+)' $root + if test "$devnum" != "0"; then + drivemap -s hd0 $root + fi + chainloader +1 + } + elif test -f ($device)/kernel.sys; then + menuentry "FreeDOS ($device)" $device { + set root=$2 + regexp -s type '([fh])d[0-9]+' $root + regexp -s devnum '[fh]d([0-9]+)' $root + if test $type = 'h' -a "$devnum" != "0"; then + drivemap -s hd0 $root + fi + chainloader +1 + } + elif test "$fstype" = ufs1 -o "$fstype" = ufs2 -a \ + -e ($device)/boot/kernel/kernel -a \ + -e ($device)/boot/device.hints; then + + freebsd_ufs_variants $device $fstype $uuid + + elif test "$fstype" = zfs -a \ + -e ($device)/@/boot/kernel/kernel -a \ + -e ($device)/@/boot/device.hints; then + + freebsd_zfs_variants $device + + elif test "$fstype" = hfsplus -a -f ($device)/mach_kernel; then + menuentry "Mac OS X/Darwin" $device $uuid { + set root=$2 + set uuid=$3 + + insmod vbe + do_resume=0 + if [ /var/vm/sleepimage -nt10 / ]; then + if xnu_resume /var/vm/sleepimage; then + do_resume=1 + fi + fi + if [ $do_resume = 1 ]; then + xnu_uuid $uuid uuid + if [ -f /Extra/DSDT.aml ]; then + acpi -e /Extra/DSDT.aml + fi + xnu_kernel /mach_kernel boot-uuid=${uuid} rd=*uuid + if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then + xnu_mkext /System/Library/Extensions.mkext + else + xnu_mkext /System/Library/Extensions + fi + if [ -f /Extra/Extensions.mkext ]; then + xnu_mkext /Extra/Extensions.mkext + fi + if [ -d /Extra/Extensions ]; then + xnu_kextdir /Extra/Extensions + fi + if [ -f /Extra/devtree.txt ]; then + xnu_devtree /Extra/devtree.txt + fi + if [ -f /Extra/splash.jpg ]; then + insmod jpeg + xnu_splash /Extra/splash.jpg + fi + if [ -f /Extra/splash.png ]; then + insmod png + xnu_splash /Extra/splash.png + fi + if [ -f /Extra/splash.tga ]; then + insmod tga + xnu_splash /Extra/splash.tga + fi + fi + } + elif get_efis $device $fstype; then + for efi in $efis; do + menuentry "$efi" "$device" { + efi_device="$2" + efi="$1" + if [ "$grub_platform" = "efi" ]; then + root="$efi_device" + chainloader "$efi" + else + echo $"Sorry, but we are booted via BIOS and can not load this OS." + echo $"Please try booting SG2D via UEFI." + echo $"Press escape to return to the menu" + sleep --interruptible 9999 + fi + } + done + else + set root=$device + for file in /boot/vmlinuz-* /boot/linux-*; do + if test -f $file; then + regexp -s version '/boot/vmlinuz-(.*)' $file + regexp -s version '/boot/linux-(.*)' $file + + menuentry "Linux $file" $device $uuid $file $version { + set root=$2 + set uuid=$3 + set kernel=$4 + set version=$5 + + linux $kernel root=UUID=$uuid ro + if test -f /boot/initrd-$version.img; then + initrd /boot/initrd-$version.img + elif test -f /boot/initrd.img-$version; then + initrd /boot/initrd.img-$version + elif test -f /boot/initrd-$version; then + initrd /boot/initrd-$version + elif test -f /boot/initrd.gz; then + initrd /boot/initrd.gz + fi + } + + menuentry "Linux $file (single)" $device $uuid $file $version { + set root=$2 + set uuid=$3 + set kernel=$4 + set version=$5 + + linux $kernel root=UUID=$uuid ro single + if test -f /boot/initrd-$version.img; then + initrd /boot/initrd-$version.img + elif test -f /boot/initrd.img-$version; then + initrd /boot/initrd.img-$version + elif test -f /boot/initrd-$version; then + initrd /boot/initrd-$version + elif test -f /boot/initrd.gz; then + initrd /boot/initrd.gz + fi + } + fi + done + fi + fi +done + +set root=$saved_root -- cgit v1.2.3-65-gdbad