From 96e5d876a4117a774f4f78b5c9c47d610e898e5e Mon Sep 17 00:00:00 2001 From: robertmh 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. --- 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 aead197a8..889643932 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 502773f7b..b54ba2903 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 7254d065c..6c12bacdc 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 b8e19a3dc..251a21f8e 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 000000000..61d5450b1 --- /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