* docs/osdetect.cfg: New file.
authorBVK Chaitanya <bvk.groups@gmail.com>
Sat, 26 Oct 2013 16:39:03 +0000 (18:39 +0200)
committerVladimir Serbinenko <phcoder@gmail.com>
Sat, 26 Oct 2013 16:39:03 +0000 (18:39 +0200)
ChangeLog
docs/osdetect.cfg [new file with mode: 0644]

index d4d8d1f..f067a55 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-10-26  BVK Chaitanya  <bvk.groups@gmail.com>
+
+       * docs/osdetect.cfg: New file.
+
 2013-10-26  BVK Chaitanya  <bvk.groups@gmail.com>
 
        * tests/util/grub-shell.in: Add new --debug option.
diff --git a/docs/osdetect.cfg b/docs/osdetect.cfg
new file mode 100644 (file)
index 0000000..b759c71
--- /dev/null
@@ -0,0 +1,325 @@
+# Sample GRUB script to autodetect operating systems
+#
+# Copyright (C) 2010  Free Software Foundation, Inc.
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+set saved_root=$root
+
+function freebsd_ufs_variants {
+    set device=$1
+    set fstype=$2
+    set uuid=$3
+
+    menuentry "FreeBSD (on $fstype $device)" $device $uuid {
+       set root=$2
+       set uuid=$3
+
+       freebsd /boot/kernel/kernel
+       set FreeBSD.acpi_load=YES
+       set FreeBSD.hint.acpi.0.disabled=0
+       set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
+       frebsd_loadenv /boot/device.hints
+    }
+
+    menuentry "FreeBSD (on $fstype $device) (single)" $device $uuid {
+       set root=$2
+       set uuid=$3
+
+       freebsd /boot/kernel/kernel --single
+       set FreeBSD.acpi_load=YES
+       set FreeBSD.hint.acpi.0.disabled=0
+       set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
+       frebsd_loadenv /boot/device.hints
+    }
+
+    menuentry "FreeBSD (on $fstype $device) (verbose)" $device $uuid {
+       set root=$2
+       set uuid=$3
+
+       freebsd /boot/kernel/kernel --verbose
+       set FreeBSD.acpi_load=YES
+       set FreeBSD.hint.acpi.0.disabled=0
+       set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
+       frebsd_loadenv /boot/device.hints
+    }
+
+    menuentry "FreeBSD (on $fstype $device) (without ACPI)" $device $uuid {
+       set root=$2
+       set uuid=$3
+
+       freebsd /boot/kernel/kernel --verbose
+       unset FreeBSD.acpi_load
+       set FreeBSD.hint.acpi.0.disabled=1
+       set FreeBSD.loader.acpi_disabled_by_user=1
+       set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
+       frebsd_loadenv /boot/device.hints
+    }
+
+    menuentry "FreeBSD (on $fstype $device) (safe mode)" $device $uuid {
+       set root=$2
+       set uuid=$3
+
+       freebsd /boot/kernel/kernel --verbose
+       unset FreeBSD.acpi_load
+       set FreeBSD.hint.acpi.0.disabled=1
+       set FreeBSD.loader.acpi_disabled_by_user=1
+       set FreeBSD.hint.apic.0.disabled=1
+       set FreeBSD.hw.ata.ata_dma=0
+       set FreeBSD.hw.ata.atapi_dma=0
+       set FreeBSD.hw.ata.wc=0
+       set FreeBSD.hw.eisa_slots=0
+       set FreeBSD.hint.kbdmux.0.disabled=1
+       set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid
+       frebsd_loadenv /boot/device.hints
+    }
+}
+
+function freebsd_zfs_variants {
+    set device=$1
+    set fstype=zfs
+
+    menuentry "FreeBSD (on $fstype $device)" $device {
+       set root=$2
+
+       freebsd /@/boot/kernel/kernel
+       set FreeBSD.acpi_load=YES
+       set FreeBSD.hint.acpi.0.disabled=0
+       freebsd_module_elf /@/boot/kernel/opensolaris.ko
+       freebsd_module_elf /@/boot/kernel/zfs.ko
+       freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
+       probe -l -s name $root
+       set FreeBSD.vfs.root.mountfrom=zfs:$name
+       freebsd_loadenv /@/boot/device.hints
+    }
+
+    menuentry "FreeBSD (on $fstype $device) (single)" $device {
+       set root=$2
+
+       freebsd /@/boot/kernel/kernel --single
+       set FreeBSD.acpi_load=YES
+       set FreeBSD.hint.acpi.0.disabled=0
+       freebsd_module_elf /@/boot/kernel/opensolaris.ko
+       freebsd_module_elf /@/boot/kernel/zfs.ko
+       freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
+       probe -l -s name $root
+       set FreeBSD.vfs.root.mountfrom=zfs:$name
+       freebsd_loadenv /@/boot/device.hints
+    }
+
+    menuentry "FreeBSD (on $fstype $device) (verbose)" $device {
+       set root=$2
+
+       freebsd /@/boot/kernel/kernel --verbose
+       set FreeBSD.acpi_load=YES
+       set FreeBSD.hint.acpi.0.disabled=0
+       freebsd_module_elf /@/boot/kernel/opensolaris.ko
+       freebsd_module_elf /@/boot/kernel/zfs.ko
+       freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
+       probe -l -s name $root
+       set FreeBSD.vfs.root.mountfrom=zfs:$name
+       freebsd_loadenv /@/boot/device.hints
+    }
+
+    menuentry "FreeBSD (on $fstype $device) (without ACPI)" $device {
+       set root=$2
+
+       freebsd /@/boot/kernel/kernel --verbose
+       unset FreeBSD.acpi_load
+       set FreeBSD.hint.acpi.0.disabled=1
+       set FreeBSD.loader.acpi_disabled_by_user=1
+       freebsd_module_elf /@/boot/kernel/opensolaris.ko
+       freebsd_module_elf /@/boot/kernel/zfs.ko
+       freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
+       probe -l -s name $root
+       set FreeBSD.vfs.root.mountfrom=zfs:$name
+       freebsd_loadenv /@/boot/device.hints
+    }
+
+    menuentry "FreeBSD (on $fstype $device) (safe mode)" $device {
+       set root=$2
+
+       freebsd /@/boot/kernel/kernel --verbose
+       unset FreeBSD.acpi_load
+       set FreeBSD.hint.acpi.0.disabled=1
+       set FreeBSD.loader.acpi_disabled_by_user=1
+       set FreeBSD.hint.apic.0.disabled=1
+       set FreeBSD.hw.ata.ata_dma=0
+       set FreeBSD.hw.ata.atapi_dma=0
+       set FreeBSD.hw.ata.wc=0
+       set FreeBSD.hw.eisa_slots=0
+       set FreeBSD.hint.kbdmux.0.disabled=1
+       freebsd_module_elf /@/boot/kernel/opensolaris.ko
+       freebsd_module_elf /@/boot/kernel/zfs.ko
+       freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
+       probe -l -s name $root
+       set FreeBSD.vfs.root.mountfrom=zfs:$name
+       freebsd_loadenv /@/boot/device.hints
+    }
+}
+
+insmod regexp
+for dev in (*); do
+    # $device: parenthesis removed from $dev
+    regexp -s device '\((.*)\)' $dev
+    # $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 bootmgr (on $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 loader (on $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 (on $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 (on $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 (on $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
+       }
+    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
+                   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
+                   fi
+               }
+           fi
+       done
+    fi
+done
+
+set root=$saved_root