[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 06/22] 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@xxxxxxxxxx> Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> --- docs/man/xl.cfg.pod.5.in | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ tools/xl/xl_parse.c | 46 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) diff --git a/docs/man/xl.cfg.pod.5.in b/docs/man/xl.cfg.pod.5.in index df889ea7e4..21cab79786 100644 --- a/docs/man/xl.cfg.pod.5.in +++ b/docs/man/xl.cfg.pod.5.in @@ -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 diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c index f9afa9ad35..9f9e810c64 100644 --- a/tools/xl/xl_parse.c +++ b/tools/xl/xl_parse.c @@ -1330,9 +1330,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); -- 2.13.5 (Apple Git-94) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |