xl: introduce a firmware option

The new firmware option aims to provide a coherent way to set the
firmware for the different kind of guests Xen supports.

For PV guests the available firmwares are pvgrub{32|64}, and for HVM
the following are supported: bios, uefi, seabios, rombios and ovmf.
Note that uefi maps to ovmf, and bios maps to the default firmware for
each device model.

The xl.cfg man page is updated to document the new feature.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
Roger Pau Monne committed 2017-09-28 15:28:01 +01:00
1 parent c7dfe4ac58
commit 931bd35bf6
2 files changed
+102

No files matched your search

+56
View File
@@ -441,6 +441,62 @@ is guest specific).
=back
=head3 Non direct Kernel Boot
Non direct kernel boot allows booting guests with a firmware. This can be
used by all types of guests, although the selection of options is different
depending on the guest type.
This option provides the flexibly of letting the guest decide which kernel
they want to boot, while preventing having to poke at the guest file
system form the toolstack domain.
=head4 PV guest options
=over 4
=item B<firmware="pvgrub32|pvgrub64">
Boots a guest using a para-virtualized version of grub that runs inside
of the guest. The bitness of the guest needs to be know, so that the right
version of pvgrub can be selected.
Note that xl expects to find the pvgrub32.bin and pvgrub64.bin binaries in
F<@XENFIRMWAREDIR@>.
=back
=head4 HVM guest options
=over 4
=item B<firmware="bios">
Boot the guest using the default BIOS firmware, which depends on the
chosen device model.
=item B<firmware="uefi">
Boot the guest using the default UEFI firmware, currently OVMF.
=item B<firmware="seabios">
Boot the guest using the SeaBIOS BIOS firmware.
=item B<firmware="rombios">
Boot the guest using the ROMBIOS BIOS firmware.
=item B<firmware="ovmf">
Boot the guest using the OVMF UEFI firmware.
=item B<firmware="PATH">
Load the specified file as firmware for the guest.
=back
=head3 Other Options
=over 4
+46
View File
@@ -1337,9 +1337,55 @@ void parse_config_data(const char *config_source,
exit(-ERROR_FAIL);
}
/*
* The firmware config option can be used as a simplification
* instead of setting bios or firmware_override. It has the
* following meanings for HVM guests:
*
* - ovmf | seabios | rombios: maps directly into the "bios"
* option.
* - uefi | bios: maps into one of the above options and is set
* in the bios field.
* - Anything else is treated as a path that is copied into
* firmware.
*/
if (!xlu_cfg_get_string (config, "firmware", &buf, 0) &&
libxl_bios_type_from_string(buf, &b_info->u.hvm.bios)) {
if (!strncmp(buf, "uefi", strlen(buf)))
b_info->u.hvm.bios = LIBXL_BIOS_TYPE_OVMF;
else if (strncmp(buf, "bios", strlen(buf)))
/* Assume it's a path to a custom firmware. */
xlu_cfg_replace_string(config, "firmware",
&b_info->u.hvm.firmware, 0);
/*
* BIOS is the default, and will be chosen by libxl based on
* the device model specified.
*/
}
break;
case LIBXL_DOMAIN_TYPE_PV:
{
/*
* The firmware config option can be used as a simplification
* instead of directly setting kernel. It will be translated to
* XENFIRMWAREDIR/<string>.bin
*/
if (!xlu_cfg_get_string (config, "firmware", &buf, 0)) {
if (b_info->kernel) {
fprintf(stderr,
"ERROR: both kernel and firmware specified\n");
exit(1);
}
if (strncmp(buf, "pvgrub32", strlen(buf)) &&
strncmp(buf, "pvgrub64", strlen(buf))) {
fprintf(stderr,
"ERROR: only pvgrub{32|64} supported as firmware options\n");
exit(1);
}
xasprintf(&b_info->kernel, XENFIRMWAREDIR "/%s.bin", buf);
}
if (!b_info->bootloader && !b_info->kernel) {
fprintf(stderr, "Neither kernel nor bootloader specified\n");
exit(1);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.