]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-11-04 Robert Millan <rmh@aybabtu.com>
authorrobertmh <robertmh@localhost>
Tue, 4 Nov 2008 15:20:35 +0000 (15:20 +0000)
committerrobertmh <robertmh@localhost>
Tue, 4 Nov 2008 15:20:35 +0000 (15:20 +0000)
        * util/grub.d/10_freebsd.in: New file.  Generate grub configuration
        for FreeBSD.
        * conf/common.rmk (grub-mkconfig_SCRIPTS): Add 10_freebsd.

ChangeLog
DISTLIST
conf/common.mk
conf/common.rmk
util/grub.d/10_freebsd.in [new file with mode: 0644]

index aead197a8cabc04df8bbb954cd295864984f19de..889643932b34adf4110415a9484161b536ce2320 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-11-04  Robert Millan  <rmh@aybabtu.com>
+
+       * util/grub.d/10_freebsd.in: New file.  Generate grub configuration
+       for FreeBSD.
+       * conf/common.rmk (grub-mkconfig_SCRIPTS): Add 10_freebsd.
+
 2008-11-03  Bean  <bean123ch@gmail.com>
 
        * kern/elf.c (grub_elf32_load): Revert to previous code.
index 502773f7bb636234b9cd892512bb5185f9611b12..b54ba290304061537ada98267efd4f551420c5a2 100644 (file)
--- a/DISTLIST
+++ b/DISTLIST
@@ -429,6 +429,7 @@ util/unifont2pff.rb
 util/update-grub_lib.in
 util/elf/grub-mkimage.c
 util/grub.d/00_header.in
+util/grub.d/10_freebsd.in
 util/grub.d/10_hurd.in
 util/grub.d/10_linux.in
 util/grub.d/10_windows.in
index 7254d065ca624b0aa679eb940aff1b983959c60d..6c12bacdc01fc01ca7e02e95ff8dff7a3b9c5377 100644 (file)
@@ -548,7 +548,7 @@ CLEANFILES += update-grub_lib
 %: util/grub.d/%.in config.status
        ./config.status --file=$@:$<
        chmod +x $@
-grub-mkconfig_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
+grub-mkconfig_SCRIPTS = 00_header 10_linux 10_hurd 10_freebsd 30_os-prober 40_custom
 ifeq ($(target_os), cygwin)
 grub-mkconfig_SCRIPTS += 10_windows
 endif
index b8e19a3dc313f733a43326878b21ed7b744c7444..251a21f8efdd1bfd773ab59e1267596c0b70a37e 100644 (file)
@@ -137,7 +137,7 @@ CLEANFILES += update-grub_lib
 %: util/grub.d/%.in config.status
        ./config.status --file=$@:$<
        chmod +x $@
-grub-mkconfig_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
+grub-mkconfig_SCRIPTS = 00_header 10_linux 10_hurd 10_freebsd 30_os-prober 40_custom
 ifeq ($(target_os), cygwin)
 grub-mkconfig_SCRIPTS += 10_windows
 endif
diff --git a/util/grub.d/10_freebsd.in b/util/grub.d/10_freebsd.in
new file mode 100644 (file)
index 0000000..61d5450
--- /dev/null
@@ -0,0 +1,60 @@
+#! /bin/sh -e
+
+# grub-mkconfig helper script.
+# Copyright (C) 2008  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/>.
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+. ${libdir}/grub/grub-mkconfig_lib
+
+devices=/boot/devices.hints
+if ! test -e ${devices} ; then
+  # not FreeBSD
+  exit 0
+fi
+
+if test -e /boot/kernel/kernel ; then
+  kfreebsd=/boot/kernel/kernel
+fi
+
+if [ "x$kfreebsd" != "x" ] ; then
+  echo "Found kernel of FreeBSD: $kfreebsd" >&2
+
+  kfreebsd_basename=`basename $kfreebsd`
+  kfreebsd_dirname=`dirname $kfreebsd`
+  kfreebsd_rel_dirname=`make_system_path_relative_to_its_root $kfreebsd_dirname`
+
+  devices_basename=`basename $devices`
+  devices_dirname=`dirname $devices`
+  devices_rel_dirname=`make_system_path_relative_to_its_root $devices_dirname`
+
+  root_device=`basename ${GRUB_DEVICE}`
+
+  # For "ufs" it's the same.  Do we care about the others?
+  kfreebsd_fs=${GRUB_FS}
+
+  cat << EOF
+menuentry "FreeBSD" {
+EOF
+  prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/"
+  cat << EOF
+       freebsd                 ${kfreebsd_rel_dirname}/${kfreebsd_basename}
+       freebsd_loadenv         ${devices_rel_dirname}/${devices_basename}
+       set FreeBSD.vfs.root.mountfrom=${kfreebsd_fs}:${root_device}
+}
+EOF
+fi