svn commit: r271318 - stable/10/release/amd64

Ed Maste emaste at FreeBSD.org
Tue Sep 9 16:11:05 UTC 2014


Author: emaste
Date: Tue Sep  9 16:11:04 2014
New Revision: 271318
URL: http://svnweb.freebsd.org/changeset/base/271318

Log:
  MFC UEFI memstick build script
  
  r264935 (gjb):
  
      Add a separate script to build the memstick.img and the
      mini-memstick.img with UEFI support.
  
      As the comments in the file suggest, 1) there must
      be existing ${.OBJDIR}/usr/src/release/{release,bootonly};
      2) TARGET/TARGET_ARCH must be amd64; and 3) it must be
      a vt(4)-enabled kernel with vt_efifb (*not* vt_vga).
  
      This script is not hooked into release/Makefile in any way
      until further testing is complete.
  
  r264992 (nwhitehorn):
  
      Make a dual-boot BIOS/UEFI memstick image. Testing required before
      this gets renamed make-memstick.sh.
  
  r265017 (nwhitehorn):
  
      loader's GPT support on BIOS does not seem to like the root
      filesystem being the last filesystem on the disk for some reason
      when made by this script. Add a vestigial swap partition to allow
      this to boot with QEMU BIOS.
  
  Approved by:	re
  Sponsored by:	The FreeBSD Foundation

Added:
  stable/10/release/amd64/make-uefi-memstick.sh
     - copied, changed from r264935, head/release/amd64/make-uefi-memstick.sh
Modified:
Directory Properties:
  stable/10/   (props changed)

Copied and modified: stable/10/release/amd64/make-uefi-memstick.sh (from r264935, head/release/amd64/make-uefi-memstick.sh)
==============================================================================
--- head/release/amd64/make-uefi-memstick.sh	Fri Apr 25 21:11:00 2014	(r264935, copy source)
+++ stable/10/release/amd64/make-uefi-memstick.sh	Tue Sep  9 16:11:04 2014	(r271318)
@@ -1,12 +1,9 @@
 #!/bin/sh
 #
-# This script generates a "memstick image" for UEFI-capable systems.
-#
-# Prerequisites:
-#  - 'make release'
-#  - KERNCONF *must* be VT (or vt_efifb(4) compiled into the kernel)
-#
-# Note:  This only works for amd64, because i386 lacks the EFI boot bits.
+# This script generates a "memstick image" (image that can be copied to a
+# USB memory stick) from a directory tree.  Note that the script does not
+# clean up after itself very well for error conditions on purpose so the
+# problem can be diagnosed (full filesystem most likely but ...).
 #
 # Usage: make-memstick.sh <directory tree> <image filename>
 #
@@ -31,43 +28,14 @@ if [ -e ${2} ]; then
 	exit 1
 fi
 
-dirsize=$(du -shLm ${1} | awk '{print $1}')
-dirsize=$(( $(( $(( ${dirsize} + 256 )) * 1024 * 1024 )) ))
-truncate -s ${dirsize} ${2}
-
-unit=$(mdconfig -a -t vnode -f ${2})
-gpart create -s mbr /dev/${unit}
-gpart add -t '!0xEF' -s 32M /dev/${unit}
-gpart add -t freebsd /dev/${unit}
-gpart set -a active -i 2 /dev/${unit}
-gpart bootcode -b ${1}/boot/boot0 /dev/${unit}
-gpart create -s bsd -n 20 /dev/${unit}s2
-gpart add -t freebsd-ufs /dev/${unit}s2
-gpart bootcode -b ${1}/boot/boot /dev/${unit}s2
-newfs_msdos /dev/${unit}s1
-newfs -L rootfs /dev/${unit}s2a
-mkdir -p ${1}/mnt
-mount -t msdosfs /dev/${unit}s1 ${1}/mnt
-mkdir -p ${1}/mnt/efi/boot
-cp -p ${1}/boot/boot1.efi ${1}/mnt/efi/boot/BOOTx64.efi
-
-while ! umount ${1}/mnt; do
-	sleep 1
-done
-
-mkdir -p mnt
-mount /dev/${unit}s2a mnt
-tar -cf - -C ${1} . | tar -xf - -C mnt
-echo "/dev/ufs/rootfs / ufs ro,noatime 1 1" > mnt/etc/fstab
-
-while ! umount mnt; do
-	sleep 1
-done
-
-# Default boot selection to MBR so systems that do not support UEFI
-# do not fail to boot without human interaction.
-boot0cfg -s 2 /dev/${unit}
+echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab
+makefs -B little -o label=FreeBSD_Install ${2}.part ${1}
+if [ $? -ne 0 ]; then
+	echo "makefs failed"
+	exit 1
+fi
+rm ${1}/etc/fstab
 
-mdconfig -d -u ${unit}
-rmdir mnt
+mkimg -s gpt -b ${1}/boot/pmbr -p efi:=${1}/boot/boot1.efifat -p freebsd-boot:=${1}/boot/gptboot -p freebsd-ufs:=${2}.part -p freebsd-swap::1M -o ${2}
+rm ${2}.part
 


More information about the svn-src-all mailing list