Preliminary EFI support. Based, in part, on patches from Andy Turner.

Add support for being able to boot off both UEFI and BIOS firmware,
ala the memstick trick.

Add support for writing to GPT volumes.

Move away from using bsd labels at all for these embedded stuff.

Minor tweaks to README.
This commit is contained in:
Warner Losh 2016-01-30 07:00:36 +00:00
parent 5e4bd29309
commit d3ac8aaed6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=295065
2 changed files with 50 additions and 8 deletions

View File

@ -10,8 +10,6 @@ and DHCPd.
This is a work in progress. Generally, to build this you should This is a work in progress. Generally, to build this you should
cd tools/tools/nanobsd/embedded cd tools/tools/nanobsd/embedded
sudo sh ../nanobsd.sh -c foo.cfg sudo sh ../nanobsd.sh -c foo.cfg
but do be careful if things are interrupted. There may still be
bugs lurking that cause your entire FreeBSD tree to disappear.
Some features: Some features:

View File

@ -76,6 +76,8 @@ fi
NANO_SLICE_FAT_SIZE=32m NANO_SLICE_FAT_SIZE=32m
NANO_SLICE_CFG_SIZE=32m NANO_SLICE_CFG_SIZE=32m
NANO_BOOT2CFG="-D -h -S115200 comconsole_port=0x3e8"
NANO_RAM_ETCSIZE=8192 NANO_RAM_ETCSIZE=8192
NANO_RAM_TMPVARSIZE=8192 NANO_RAM_TMPVARSIZE=8192
NANO_IMAGES=2 NANO_IMAGES=2
@ -292,7 +294,7 @@ create_diskimage_mbr ( ) (
bootbsd=${NANO_BOOT_BSD:+-b ${NANO_BOOT_BSD}} bootbsd=${NANO_BOOT_BSD:+-b ${NANO_BOOT_BSD}}
skiparg=${NANO_MBR_FIRST_SKIP:+-S ${NANO_MBR_FIRST_SKIP}} skiparg=${NANO_MBR_FIRST_SKIP:+-S ${NANO_MBR_FIRST_SKIP}}
for i in s1 s2 s3 s4 empty; do for i in s1 s2 s3 s4 p1 p2 p3 p4 p5 empty; do
rm -fr ${NANO_OBJ}/_.${i}* rm -fr ${NANO_OBJ}/_.${i}*
done done
@ -317,10 +319,10 @@ create_diskimage_mbr ( ) (
# bsd label # bsd label
[ -z ${NANO_NOPRIV_BUILD} ] || extra="-F ${NANO_METALOG}" [ -z ${NANO_NOPRIV_BUILD} ] || extra="-F ${NANO_METALOG}"
sz=${NANO_SLICE_ROOT_SIZE:+-s ${NANO_SLICE_ROOT_SIZE}} sz=${NANO_SLICE_ROOT_SIZE:+-s ${NANO_SLICE_ROOT_SIZE}}
eval "${NANO_MAKEFS_UFS}" ${extra} $sz "${NANO_OBJ}/_.${NANO_SLICE_ROOT}a" \ eval "${NANO_MAKEFS_UFS}" ${extra} $sz "${NANO_OBJ}/_.${NANO_SLICE_ROOT}" \
"${NANO_WORLDDIR}" "${NANO_WORLDDIR}"
mkimg -s bsd ${bootbsd} -p freebsd-ufs:=${NANO_OBJ}/_.${NANO_SLICE_ROOT}a \ # mkimg -s bsd ${bootbsd} -p freebsd-ufs:=${NANO_OBJ}/_.${NANO_SLICE_ROOT} \
-o ${NANO_OBJ}/_.${NANO_SLICE_ROOT} # -o ${NANO_OBJ}/_.${NANO_SLICE_ROOT}
# Populate the /cfg partition, empty if none given # Populate the /cfg partition, empty if none given
if [ -z "${NANO_CFGDIR}" ]; then if [ -z "${NANO_CFGDIR}" ]; then
@ -339,8 +341,18 @@ create_diskimage_mbr ( ) (
if [ -n "$NANO_SLICE_FAT" ]; then if [ -n "$NANO_SLICE_FAT" ]; then
eval $NANO_SLICE_FAT=fat16b eval $NANO_SLICE_FAT=fat16b
fi fi
eval $NANO_SLICE_CFG=freebsd case ${NANO_SLICE_CFG} in
eval $NANO_SLICE_ROOT=freebsd s*)
echo slice
eval $NANO_SLICE_CFG=freebsd
eval $NANO_SLICE_ROOT=freebsd
;;
p*)
echo part
eval $NANO_SLICE_CFG=freebsd-ufs
eval $NANO_SLICE_ROOT=freebsd-ufs
;;
esac
# below depends on https://reviews.freebsd.org/D4403 not yet in the tree # below depends on https://reviews.freebsd.org/D4403 not yet in the tree
# but there's problems: it marks all partitions as active, so you have to # but there's problems: it marks all partitions as active, so you have to
# boot off parittion 3 or 2 by hand if you're playing around with this WIP # boot off parittion 3 or 2 by hand if you're playing around with this WIP
@ -358,6 +370,25 @@ create_diskimage_mbr ( ) (
-p ${s2}:=${NANO_OBJ}/_.s2 \ -p ${s2}:=${NANO_OBJ}/_.s2 \
-o ${NANO_OBJ}/_.disk.image.${NANO_NAME}${fmt} -o ${NANO_OBJ}/_.disk.image.${NANO_NAME}${fmt}
;; ;;
std-uefi)
# s1 is boot, s2 is cfg, s3 is /, not sure how to make that
# boot (marked as active) with mkimg yet
mkimg -a 2 ${fmtarg} ${bootmbr} -s mbr \
-p efi:=${NANO_WORLDDIR}/boot/boot1.efifat \
-p ${s2}:=${NANO_OBJ}/_.s2 \
-p ${s3}:=${NANO_OBJ}/_.s3 \
-o ${NANO_OBJ}/_.disk.image.${NANO_NAME}${fmt}
;;
std-uefi-bios)
# p1 is boot for uefi, p2 is boot for gpt, p3 is cfg, p4 is /
# and p5 is alt-root (after resize)
mkimg -a 2 ${fmtarg} ${bootmbr} -s gpt \
-p efi:=${NANO_WORLDDIR}/boot/boot1.efifat \
-p freebsd-boot:=${NAANO_WORLDDIR}/boot/gptboot \
-p ${p3}:=${NANO_OBJ}/_.p3 \
-p ${p4}:=${NANO_OBJ}/_.p4 \
-o ${NANO_OBJ}/_.disk.image.${NANO_NAME}${fmt}
;;
powerpc64-ibm) powerpc64-ibm)
# A lie to make the boot loader work, it boots the first BSD partition # A lie to make the boot loader work, it boots the first BSD partition
# it finds, regardless of the active flag. # it finds, regardless of the active flag.
@ -658,6 +689,19 @@ powerpc64-apple)
echo Not yet echo Not yet
exit 1 exit 1
;; ;;
std-uefi)
NANO_SLICE_UEFI=s1
NANO_SLICE_CFG=s2
NANO_SLICE_ROOT=s3
NANO_SLICE_ALTROOT=s4
;;
std-uefi-bios)
NANO_SLICE_UEFI=p1
NANO_SLICE_BOOT=p2
NANO_SLICE_CFG=p3
NANO_SLICE_ROOT=p4
NANO_SLICE_ALTROOT=p5
;;
*) *)
echo Unknown Layout ${NANO_LAYOUT} echo Unknown Layout ${NANO_LAYOUT}
exit 1 exit 1