summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorrgrimes <rgrimes@FreeBSD.org>2018-02-12 18:52:59 +0000
committerrgrimes <rgrimes@FreeBSD.org>2018-02-12 18:52:59 +0000
commit5f309d6371366fc42e466962326c1ac75cf81708 (patch)
treeeea968a4a3519d9238872012a5329b5a53125920 /share
parent8bfc4937fed2be413c9f03c7b0930b6f480d1beb (diff)
downloadFreeBSD-src-5f309d6371366fc42e466962326c1ac75cf81708.zip
FreeBSD-src-5f309d6371366fc42e466962326c1ac75cf81708.tar.gz
MFC: r316746 Add UEFI support to vmrun.sh
Adds: -E: Use UEFI mode -f: path to UEFI firmware image (default: path to uefi-edk2-bhyve package) -F: UEFI framebuffer size (default: w=1024,h=768) -L: IP to listen for VNC connections on (default: 127.0.0.1) -P: Port to listen for VNC connections on (default: 5900) -T: Enable tablnet device (for VNC) -v: Wait for VNC client before booting VM Submitted by: Shawn Webb <shawn.webb@hardenedbsd.org> Approved by: grehan(mentor),allanjude(original committer) Relnotes: yes Differential Revision: https://reviews.freebsd.org/D10378
Diffstat (limited to 'share')
-rwxr-xr-xshare/examples/bhyve/vmrun.sh74
1 files changed, 65 insertions, 9 deletions
diff --git a/share/examples/bhyve/vmrun.sh b/share/examples/bhyve/vmrun.sh
index 32dda00..7deb4b3 100755
--- a/share/examples/bhyve/vmrun.sh
+++ b/share/examples/bhyve/vmrun.sh
@@ -46,10 +46,12 @@ errmsg() {
usage() {
local msg=$1
- echo "Usage: vmrun.sh [-aAhi] [-c <CPUs>] [-C <console>] [-d <disk file>]"
- echo " [-e <name=value>] [-g <gdbport> ] [-H <directory>]"
+ echo "Usage: vmrun.sh [-aAEhiTv] [-c <CPUs>] [-C <console>] [-d <disk file>]"
+ echo " [-e <name=value>] [-f <path of firmware>] [-F <size>]"
+ echo " [-g <gdbport> ] [-H <directory>]"
echo " [-I <location of installation iso>] [-l <loader>]"
- echo " [-m <memsize>] [-t <tapdev>] <vmname>"
+ echo " [-L <VNC IP for UEFI framebuffer>]"
+ echo " [-m <memsize>] [-P <port>] [-t <tapdev>] <vmname>"
echo ""
echo " -h: display this help message"
echo " -a: force memory mapped local APIC access"
@@ -58,15 +60,22 @@ usage() {
echo " -C: console device (default is ${DEFAULT_CONSOLE})"
echo " -d: virtio diskdev file (default is ${DEFAULT_VIRTIO_DISK})"
echo " -e: set FreeBSD loader environment variable"
+ echo " -E: Use UEFI mode"
+ echo " -f: Use a specific UEFI firmware"
+ echo " -F: Use a custom UEFI GOP framebuffer size (default: w=1024,h=768)"
echo " -g: listen for connection from kgdb at <gdbport>"
echo " -H: host filesystem to export to the loader"
echo " -i: force boot of the Installation CDROM image"
echo " -I: Installation CDROM image location (default is ${DEFAULT_ISOFILE})"
echo " -l: the OS loader to use (default is /boot/userboot.so)"
+ echo " -L: IP address for UEFI GOP VNC server (default: 127.0.0.1)"
echo " -m: memory size (default is ${DEFAULT_MEMSIZE})"
echo " -p: pass-through a host PCI device at bus/slot/func (e.g. 10/0/0)"
+ echo " -P: UEFI GOP VNC port (default: 5900)"
echo " -t: tap device for virtio-net (default is $DEFAULT_TAPDEV)"
+ echo " -T: Enable tablet device (for UEFI GOP)"
echo " -u: RTC keeps UTC time"
+ echo " -v: Wait for VNC client connection before booting VM"
echo " -w: ignore unimplemented MSRs"
echo ""
[ -n "$msg" ] && errmsg "$msg"
@@ -97,7 +106,16 @@ loader_opt=""
bhyverun_opt="-H -A -P"
pass_total=0
-while getopts aAc:C:d:e:g:hH:iI:l:m:p:t:uw c ; do
+# EFI-specific options
+efi_mode=0
+efi_firmware="/usr/local/share/uefi-firmware/BHYVE_UEFI.fd"
+vncwait=""
+vnchost="127.0.0.1"
+vncport=5900
+fbsize="w=1024,h=768"
+tablet=""
+
+while getopts aAc:C:d:e:Ef:F:g:hH:iI:l:m:p:P:t:Tuvw c ; do
case $c in
a)
bhyverun_opt="${bhyverun_opt} -a"
@@ -121,6 +139,15 @@ while getopts aAc:C:d:e:g:hH:iI:l:m:p:t:uw c ; do
e)
loader_opt="${loader_opt} -e ${OPTARG}"
;;
+ E)
+ efi_mode=1
+ ;;
+ f)
+ efi_firmware="${OPTARG}"
+ ;;
+ F)
+ fbsize="${OPTARG}"
+ ;;
g)
gdbport=${OPTARG}
;;
@@ -136,6 +163,9 @@ while getopts aAc:C:d:e:g:hH:iI:l:m:p:t:uw c ; do
l)
loader_opt="${loader_opt} -l ${OPTARG}"
;;
+ L)
+ vnchost="${OPTARG}"
+ ;;
m)
memsize=${OPTARG}
;;
@@ -143,13 +173,22 @@ while getopts aAc:C:d:e:g:hH:iI:l:m:p:t:uw c ; do
eval "pass_dev${pass_total}=\"${OPTARG}\""
pass_total=$(($pass_total + 1))
;;
+ P)
+ vncport="${OPTARG}"
+ ;;
t)
eval "tap_dev${tap_total}=\"${OPTARG}\""
tap_total=$(($tap_total + 1))
;;
+ T)
+ tablet="-s 30,xhci,tablet"
+ ;;
u)
bhyverun_opt="${bhyverun_opt} -u"
;;
+ v)
+ vncwait=",wait"
+ ;;
w)
bhyverun_opt="${bhyverun_opt} -w"
;;
@@ -186,6 +225,13 @@ if [ ${pass_total} -gt 0 ]; then
bhyverun_opt="${bhyverun_opt} -S"
fi
+if [ ${efi_mode} -gt 0 ]; then
+ if [ ! -f ${efi_firmware} ]; then
+ echo "Error: EFI Firmware ${efi_firmware} doesn't exist. Try: pkg install uefi-edk2-bhyve"
+ exit 1
+ fi
+fi
+
make_and_check_diskdev()
{
local virtio_diskdev="$1"
@@ -248,11 +294,13 @@ while [ 1 ]; do
installer_opt=""
fi
- ${LOADER} -c ${console} -m ${memsize} ${BOOTDISKS} ${loader_opt} \
- ${vmname}
- bhyve_exit=$?
- if [ $bhyve_exit -ne 0 ]; then
- break
+ if [ ${efi_mode} -eq 0 ]; then
+ ${LOADER} -c ${console} -m ${memsize} ${BOOTDISKS} ${loader_opt} \
+ ${vmname}
+ bhyve_exit=$?
+ if [ $bhyve_exit -ne 0 ]; then
+ break
+ fi
fi
#
@@ -286,10 +334,18 @@ while [ 1 ]; do
i=$(($i + 1))
done
+ efiargs=""
+ if [ ${efi_mode} -gt 0 ]; then
+ efiargs="-s 29,fbuf,tcp=${vnchost}:${vncport},${fbsize}${vncwait}"
+ efiargs="${efiargs} -l bootrom,${efi_firmware}"
+ efiargs="${efiargs} ${tablet}"
+ fi
+
${FBSDRUN} -c ${cpus} -m ${memsize} ${bhyverun_opt} \
-g ${gdbport} \
-s 0:0,hostbridge \
-s 1:0,lpc \
+ ${efiargs} \
${devargs} \
-l com1,${console} \
${installer_opt} \
OpenPOWER on IntegriCloud