MFC 199714

Create a seperate ZFS enabled loader.

This adds zfsloader which will be called by zfsboot/gptzfsboot code rather
than the tradional loader.  This eliminates the need to set the
LOADER_ZFS_SUPPORT variable in order to get a ZFS enabled loader.

Note however, that you must reinstall your bootcode (zfsboot/gptzfsboot)
in order for the boot process to use the new loader.

New installations will no longer be required to build a ZFS enabled
loader for a working ZFS boot system.  Installing zfsboot/gptzfsboot is
sufficient for acknowledging the use of CDDL code and therefore the ZFS
enabled loader.
This commit is contained in:
Robert Noland 2009-12-07 16:37:02 +00:00
parent 02a7ccf746
commit c9ab55149b
5 changed files with 34 additions and 16 deletions

View File

@ -22,7 +22,7 @@ SUBDIR+= ofw
SUBDIR+= uboot
.endif
.if defined(LOADER_ZFS_SUPPORT)
.if ${MACHINE_ARCH} == "amd64" || ${MACHINE} == "i386"
SUBDIR+= zfs
.endif

View File

@ -1,7 +1,7 @@
# $FreeBSD$
SUBDIR= mbr pmbr boot0 boot0sio btx boot2 cdboot gptboot zfsboot \
gptzfsboot kgzldr libi386 libfirewire loader
gptzfsboot kgzldr libi386 libfirewire loader zfsloader
# special boot programs, 'self-extracting boot2+loader'
SUBDIR+= pxeldr

View File

@ -3,9 +3,10 @@
.include <bsd.own.mk>
MK_SSP= no
PROG= loader.sym
LOADER?= loader
PROG= ${LOADER}.sym
INTERNALPROG=
NEWVERSWHAT= "bootstrap loader" i386
NEWVERSWHAT?= "bootstrap loader" i386
# architecture-specific loader code
SRCS= main.c conf.c vers.c
@ -16,7 +17,7 @@ CFLAGS+= -DLOADER_FIREWIRE_SUPPORT
LIBFIREWIRE= ${.OBJDIR}/../libfirewire/libfirewire.a
.endif
# Put LOADER_ZFS_SUPPORT=yes in /etc/make.conf for ZFS support
# Set by zfsloader Makefile
.if defined(LOADER_ZFS_SUPPORT)
CFLAGS+= -DLOADER_ZFS_SUPPORT
LIBZFS= ${.OBJDIR}/../../zfs/libzfsboot.a
@ -61,7 +62,7 @@ CFLAGS+= -DLOADER_GPT_SUPPORT
CFLAGS+= -I${.CURDIR}/../../common
CFLAGS+= -I.
CLEANFILES= vers.c loader loader.bin loader.help
CLEANFILES= vers.c ${LOADER} ${LOADER}.bin loader.help
CFLAGS+= -Wall
LDFLAGS= -static -Ttext 0x0
@ -80,30 +81,35 @@ CFLAGS+= -I${.CURDIR}/../btx/lib
# Pick up ../Makefile.inc early.
.include <bsd.init.mk>
vers.c: ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version
sh ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT}
vers.c: ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/../loader/version
sh ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/../loader/version \
${NEWVERSWHAT}
loader: loader.bin ${BTXLDR} ${BTXKERN}
${LOADER}: ${LOADER}.bin ${BTXLDR} ${BTXKERN}
btxld -v -f aout -e ${LOADER_ADDRESS} -o ${.TARGET} -l ${BTXLDR} \
-b ${BTXKERN} loader.bin
-b ${BTXKERN} ${LOADER}.bin
loader.bin: loader.sym
${LOADER}.bin: ${LOADER}.sym
cp ${.ALLSRC} ${.TARGET}
strip -R .comment -R .note ${.TARGET}
loader.help: help.common help.i386
cat ${.ALLSRC} | awk -f ${.CURDIR}/../../common/merge_help.awk > ${.TARGET}
.PATH: ${.CURDIR}/../../forth
FILES= loader loader.help loader.4th support.4th loader.conf
FILES+= screen.4th frames.4th beastie.4th
FILES= ${LOADER}
# XXX INSTALLFLAGS_loader= -b
FILESMODE_loader= ${BINMODE} -b
FILESMODE_${LOADER}= ${BINMODE} -b
.if !defined(LOADER_ONLY)
.PATH: ${.CURDIR}/../../forth
FILES+= loader.help loader.4th support.4th loader.conf
FILES+= screen.4th frames.4th beastie.4th
FILESDIR_loader.conf= /boot/defaults
.if !exists(${DESTDIR}/boot/loader.rc)
FILES+= loader.rc
.endif
.endif
# XXX crt0.o needs to be first for pxeboot(8) to work
OBJS= ${BTXCRT}

View File

@ -84,7 +84,7 @@ __FBSDID("$FreeBSD$");
#define KARGS_FLAGS_ZFS 0x4
#define PATH_CONFIG "/boot.config"
#define PATH_BOOT3 "/boot/loader"
#define PATH_BOOT3 "/boot/zfsloader"
#define PATH_KERNEL "/boot/kernel/kernel"
#define ARGS 0x900

View File

@ -0,0 +1,12 @@
# $FreeBSD$
.PATH: ${.CURDIR}/../loader
LOADER= zfsloader
NEWVERSWHAT= "ZFS enabled bootstrap loader" i386
LOADER_ZFS_SUPPORT=yes
LOADER_ONLY= yes
NO_MAN= yes
.include "${.CURDIR}/../loader/Makefile"