Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F106047976
D10378.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D10378.diff
View Options
Index: head/share/examples/bhyve/vmrun.sh
===================================================================
--- head/share/examples/bhyve/vmrun.sh
+++ head/share/examples/bhyve/vmrun.sh
@@ -46,10 +46,12 @@
usage() {
local msg=$1
- echo "Usage: vmrun.sh [-ahi] [-c <CPUs>] [-C <console>] [-d <disk file>]"
- echo " [-e <name=value>] [-g <gdbport> ] [-H <directory>]"
+ echo "Usage: vmrun.sh [-aEhiTv] [-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"
@@ -57,15 +59,22 @@
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"
@@ -95,7 +104,16 @@
bhyverun_opt="-H -A -P"
pass_total=0
-while getopts ac: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 ac: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"
@@ -116,6 +134,15 @@
e)
loader_opt="${loader_opt} -e ${OPTARG}"
;;
+ E)
+ efi_mode=1
+ ;;
+ f)
+ efi_firmware="${OPTARG}"
+ ;;
+ F)
+ fbsize="${OPTARG}"
+ ;;
g)
gdbport=${OPTARG}
;;
@@ -131,6 +158,9 @@
l)
loader_opt="${loader_opt} -l ${OPTARG}"
;;
+ L)
+ vnchost="${OPTARG}"
+ ;;
m)
memsize=${OPTARG}
;;
@@ -138,13 +168,22 @@
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"
;;
@@ -181,6 +220,13 @@
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"
@@ -243,11 +289,13 @@
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
#
@@ -281,10 +329,18 @@
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} \
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Dec 25, 11:40 AM (10 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15596538
Default Alt Text
D10378.diff (4 KB)
Attached To
Mode
D10378: UEFI support in vmrun.sh
Attached
Detach File
Event Timeline
Log In to Comment