Add option -l for specifying which OS loader to dlopen(3). By default
this is /boot/userboot.so. This option allows for the development and use of other OS loaders.
This commit is contained in:
parent
6cc056de26
commit
8c96dcc166
@ -48,8 +48,8 @@ usage() {
|
||||
|
||||
echo "Usage: vmrun.sh [-ahi] [-c <CPUs>] [-C <console>] [-d <disk file>]"
|
||||
echo " [-e <name=value>] [-g <gdbport> ] [-H <directory>]"
|
||||
echo " [-I <location of installation iso>] [-m <memsize>]"
|
||||
echo " [-t <tapdev>] <vmname>"
|
||||
echo " [-I <location of installation iso>] [-l <loader>]"
|
||||
echo " [-m <memsize>] [-t <tapdev>] <vmname>"
|
||||
echo ""
|
||||
echo " -h: display this help message"
|
||||
echo " -a: force memory mapped local APIC access"
|
||||
@ -61,6 +61,7 @@ usage() {
|
||||
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 " -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 " -t: tap device for virtio-net (default is $DEFAULT_TAPDEV)"
|
||||
@ -92,7 +93,7 @@ loader_opt=""
|
||||
bhyverun_opt="-H -A -P"
|
||||
pass_total=0
|
||||
|
||||
while getopts ac:C:d:e:g:hH:iI:m:p:t: c ; do
|
||||
while getopts ac:C:d:e:g:hH:iI:l:m:p:t: c ; do
|
||||
case $c in
|
||||
a)
|
||||
bhyverun_opt="${bhyverun_opt} -a"
|
||||
@ -125,6 +126,9 @@ while getopts ac:C:d:e:g:hH:iI:m:p:t: c ; do
|
||||
I)
|
||||
isofile=${OPTARG}
|
||||
;;
|
||||
l)
|
||||
loader_opt="${loader_opt} -l ${OPTARG}"
|
||||
;;
|
||||
m)
|
||||
memsize=${OPTARG}
|
||||
;;
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd January 7, 2012
|
||||
.Dd October 7, 2015
|
||||
.Dt BHYVELOAD 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -40,6 +40,7 @@ guest inside a bhyve virtual machine
|
||||
.Op Fl d Ar disk-path
|
||||
.Op Fl e Ar name=value
|
||||
.Op Fl h Ar host-path
|
||||
.Op Fl l Ar os-loader
|
||||
.Op Fl m Ar mem-size
|
||||
.Ar vmname
|
||||
.Sh DESCRIPTION
|
||||
@ -56,6 +57,7 @@ is based on
|
||||
and will present an interface identical to the
|
||||
.Fx
|
||||
loader on the user's terminal.
|
||||
This behavior can be changed by specifying a different OS loader.
|
||||
.Pp
|
||||
The virtual machine is identified as
|
||||
.Ar vmname
|
||||
@ -78,7 +80,9 @@ The
|
||||
.Ar disk-path
|
||||
is the pathname of the guest's boot disk image.
|
||||
.It Fl e Ar name=value
|
||||
Set the FreeBSD loader environment variable
|
||||
Set the
|
||||
.Fx
|
||||
loader environment variable
|
||||
.Ar name
|
||||
to
|
||||
.Ar value .
|
||||
@ -89,6 +93,15 @@ variable.
|
||||
The
|
||||
.Ar host-path
|
||||
is the directory at the top of the guest's boot filesystem.
|
||||
.It Fl l Ar os-loader
|
||||
Specify a different OS loader.
|
||||
By default
|
||||
.Nm
|
||||
will use
|
||||
.Pa /boot/userboot.so ,
|
||||
which presents a standard
|
||||
.Fx
|
||||
loader.
|
||||
.It Fl m Ar mem-size Xo
|
||||
.Sm off
|
||||
.Op Cm K | k | M | m | G | g | T | t
|
||||
|
@ -639,6 +639,7 @@ usage(void)
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
char *loader;
|
||||
void *h;
|
||||
void (*func)(struct loader_callbacks *, void *, int, int);
|
||||
uint64_t mem_size;
|
||||
@ -646,13 +647,15 @@ main(int argc, char** argv)
|
||||
|
||||
progname = basename(argv[0]);
|
||||
|
||||
loader = NULL;
|
||||
|
||||
memflags = 0;
|
||||
mem_size = 256 * MB;
|
||||
|
||||
consin_fd = STDIN_FILENO;
|
||||
consout_fd = STDOUT_FILENO;
|
||||
|
||||
while ((opt = getopt(argc, argv, "Sc:d:e:h:m:")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "Sc:d:e:h:l:m:")) != -1) {
|
||||
switch (opt) {
|
||||
case 'c':
|
||||
error = altcons_open(optarg);
|
||||
@ -674,6 +677,14 @@ main(int argc, char** argv)
|
||||
host_base = optarg;
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
if (loader != NULL)
|
||||
errx(EX_USAGE, "-l can only be given once");
|
||||
loader = strdup(optarg);
|
||||
if (loader == NULL)
|
||||
err(EX_OSERR, "malloc");
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
error = vm_parse_memsize(optarg, &mem_size);
|
||||
if (error != 0)
|
||||
@ -726,6 +737,24 @@ main(int argc, char** argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (loader == NULL) {
|
||||
loader = strdup("/boot/userboot.so");
|
||||
if (loader == NULL)
|
||||
err(EX_OSERR, "malloc");
|
||||
}
|
||||
h = dlopen(loader, RTLD_LOCAL);
|
||||
if (!h) {
|
||||
printf("%s\n", dlerror());
|
||||
free(loader);
|
||||
return (1);
|
||||
}
|
||||
func = dlsym(h, "loader_main");
|
||||
if (!func) {
|
||||
printf("%s\n", dlerror());
|
||||
free(loader);
|
||||
return (1);
|
||||
}
|
||||
|
||||
tcgetattr(consout_fd, &term);
|
||||
oldterm = term;
|
||||
cfmakeraw(&term);
|
||||
@ -733,19 +762,11 @@ main(int argc, char** argv)
|
||||
|
||||
tcsetattr(consout_fd, TCSAFLUSH, &term);
|
||||
|
||||
h = dlopen("/boot/userboot.so", RTLD_LOCAL);
|
||||
if (!h) {
|
||||
printf("%s\n", dlerror());
|
||||
return (1);
|
||||
}
|
||||
func = dlsym(h, "loader_main");
|
||||
if (!func) {
|
||||
printf("%s\n", dlerror());
|
||||
return (1);
|
||||
}
|
||||
|
||||
addenv("smbios.bios.vendor=BHYVE");
|
||||
addenv("boot_serial=1");
|
||||
|
||||
func(&cb, NULL, USERBOOT_VERSION_3, ndisks);
|
||||
|
||||
free(loader);
|
||||
return (0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user