freebsd-skq/release/ia64/doFS.sh
Marcel Moolenaar d47aff5ca6 Check the FSLABEL argument and invoke the generic doFS.sh script
if it's not defined as efi. This makes sure we create a proper
MFS root filesystem and still allow the boot disk to be EFI
based.

At this time EFI auto boot works and we're properly loading the
MFS root file system. Time to create drivers.conf and get this
show on the road!
2002-11-06 03:36:57 +00:00

86 lines
1.9 KiB
Bash

#!/bin/sh
#
# $FreeBSD$
#
# See also: ../scripts/doFS.sh
#
set -e
if [ "$1" = "-s" ]; then
opt_s="-s"; shift
else
opt_s=""
fi
FSIMG=$1; shift
RD=$1 ; shift
MNT=$1 ; shift
FSSIZE=$1 ; shift
FSPROTO=$1 ; shift
FSINODE=$1 ; shift
FSLABEL=$1 ; shift
# If the disklabel is not equal to "efi", we have to create a "normal"
# UFS filesystem. In that case, call the generic version:
if [ x$FSLABEL != "xefi" ]; then
DOFS_SH=`dirname $0`/../scripts/`basename $0`
echo Tranferring control to $DOFS_SH...
exec sh $DOFS_SH $opt_s $FSIMG $RD $MNT $FSSIZE $FSPROTO $FSINODE $FSLABEL
fi
export BLOCKSIZE=512
# Express the size on 512-byte blocks for newfs_msdos
FSSIZE=$((${FSSIZE}*2))
rm -f ${FSIMG}
dd of=${FSIMG} if=/dev/zero count=${FSSIZE} bs=512 2>/dev/null
if [ "x${MDDEVICE}" != "x" ] ; then
umount /dev/${MDDEVICE} 2>/dev/null || true
umount ${MNT} 2>/dev/null || true
mdconfig -d -u ${MDDEVICE} 2>/dev/null || true
fi
MDDEVICE=`mdconfig -a -t vnode -f ${FSIMG}`
if [ ! -c /dev/${MDDEVICE} ] ; then
if [ ! -f /dev/MAKEDEV ] ; then
echo "No /dev/$MDDEVICE and no MAKEDEV" 1>&2
mdconfig -d -u ${MDDEVICE} 2>/dev/null || true
exit 1
fi
(cd /dev && sh MAKEDEV ${MDDEVICE})
fi
EFI_SIZE=$((${FSSIZE}-68))
gpt create ${MDDEVICE}
gpt add -s ${EFI_SIZE} -t c12a7328-f81f-11d2-ba4b-00a0c93ec93b ${MDDEVICE}
newfs_msdos -F 12 -S 512 -h 4 -o 0 -s ${EFI_SIZE} -u 16 ${MDDEVICE}p1
mount -t msdos /dev/${MDDEVICE}p1 ${MNT}
if [ -d ${FSPROTO} ]; then
(set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT})
else
cp -p ${FSPROTO} ${MNT}
fi
# Do some post-population munging so that auto-boot works...
mkdir -p ${MNT}/efi/boot
mv ${MNT}/boot/loader.efi ${MNT}/efi/boot/bootia64.efi
df -ki ${MNT}
set `df -ki ${MNT} | tail -1`
umount ${MNT}
mdconfig -d -u ${MDDEVICE} 2>/dev/null || true
echo "*** Filesystem is ${FSSIZE} K, $4 left"
echo "*** ${FSINODE} bytes/inode, $7 left"
if [ "${opt_s}" ]; then
echo ${FSSIZE} > ${FSIMG}.size
fi