From 8c53164466d478ed5bc4c3346057cff246d599ce Mon Sep 17 00:00:00 2001 From: Robert Millan Date: Tue, 4 Nov 2008 15:20:35 +0000 Subject: [PATCH] 2008-11-04 Robert Millan * util/grub.d/10_freebsd.in: New file. Generate grub configuration for FreeBSD. * conf/common.rmk (grub-mkconfig_SCRIPTS): Add 10_freebsd. git-svn-id: svn://svn.savannah.gnu.org/grub/trunk/grub2@1893 d0de0278-0dc1-4c01-8a07-af38b3205e46 --- ChangeLog | 6 +++++ DISTLIST | 1 + conf/common.mk | 2 +- conf/common.rmk | 2 +- util/grub.d/10_freebsd.in | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 util/grub.d/10_freebsd.in diff --git a/ChangeLog b/ChangeLog index aead197a..88964393 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-11-04 Robert Millan + + * 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 * kern/elf.c (grub_elf32_load): Revert to previous code. diff --git a/DISTLIST b/DISTLIST index 502773f7..b54ba290 100644 --- 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 diff --git a/conf/common.mk b/conf/common.mk index 7254d065..6c12bacd 100644 --- a/conf/common.mk +++ b/conf/common.mk @@ -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 diff --git a/conf/common.rmk b/conf/common.rmk index b8e19a3d..251a21f8 100644 --- a/conf/common.rmk +++ b/conf/common.rmk @@ -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 index 00000000..61d5450b --- /dev/null +++ b/util/grub.d/10_freebsd.in @@ -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 . + +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 -- 2.11.4.GIT