[libvirt] [qemu RFC] qapi: add "firmware.json"

Laszlo Ersek lersek at redhat.com
Tue Apr 10 11:40:58 UTC 2018


On 04/10/18 11:05, Daniel P. Berrangé wrote:
> On Mon, Apr 09, 2018 at 06:34:41PM +0200, Laszlo Ersek wrote:
>> On 04/09/18 09:26, Thomas Huth wrote:
>>>  Hi Laszlo,
>>>
>>> On 07.04.2018 02:01, Laszlo Ersek wrote:
>>>> Add a schema that describes the properties of virtual machine
>>>> firmware.
>>>>
>>>> Each firmware executable installed on a host system should come
>>>> with a JSON file that conforms to this schema, and informs the
>>>> management applications about the firmware's properties.
>>>>
>>>> In addition, a configuration directory with symlinks to the JSON
>>>> files should exist, with the symlinks carefully named to reflect a
>>>> priority order. Management applications can then search this
>>>> directory in priority order for the first firmware executable that
>>>> satisfies their search criteria. The found JSON file provides the
>>>> management layer with domain configuration bits that are required
>>>> to run the firmware binary.
>>> [...]
>>>> +##
>>>> +# @FirmwareDevice:
>>>> +#
>>>> +# Defines the device types that a firmware file can be mapped into.
>>>> +#
>>>> +# @memory: The firmware file is to be mapped into memory.
>>>> +#
>>>> +# @kernel: The firmware file is to be loaded like a Linux kernel. This is
>>>> +#          similar to @memory but may imply additional processing that is
>>>> +#          specific to the target architecture.
>>>> +#
>>>> +# @flash: The firmware file is to be mapped into a pflash chip.
>>>> +#
>>>> +# Since: 2.13
>>>> +##
>>>> +{ 'enum' : 'FirmwareDevice',
>>>> +  'data' : [ 'memory', 'kernel', 'flash' ] }
>>>
>>> This is not fully clear to me... what is this exactly good for? Is
>>> this a way to say how the firmware should be loaded, i.e. via
>>> "-bios", "-kernel" or "-pflash" parameter? If so, the term "memory"
>>> is quite misleading since files that are loaded via -bios can also
>>> end up in an emulated ROM chip.
>>
>> I threw in "-kernel" because, although it also (usually?) means
>> "memory", I expected people would want it separate.
>
> What platform / scenario actually uses -kernel to load firmware. If
> you have loaded firmware using -kernel, how do you then load the
> actual kernel ?

AAVMF has a build called "ArmVirtQemuKernel" where the firmware is
loaded with the -kernel switch.

commit 8de84d4242215252af9d2afecd45e2419689ee5f
Author: Ard Biesheuvel <ard.biesheuvel at linaro.org>
Date:   Fri Feb 5 14:57:57 2016 +0100

    ArmVirtPkg: implement ArmVirtQemuKernel

    This implements a version of ArmVirtQemu that does not execute in place from
    emulated NOR flash, but implements the Linux kernel boot protocol, and executes
    from DRAM instead. This allows UEFI to be loaded as a payload by a previous
    bootloader stage such as ARM Trusted Firmware/OP-TEE.

    Contributed-under: TianoCore Contribution Agreement 1.0
    Signed-off-by: Ard Biesheuvel <ard.biesheuvel at linaro.org>
    Acked-by: Laszlo Ersek <lersek at redhat.com>

My understanding is that in this scenario you cannot use -kernel for
loading a Linux kernel; instead you have to boot the Linux OS off of
some other media (CD-ROM, disk, network...) Personally I never use this
AAVMF build, but I know it exists and Ard uses it at least occasionally.

Thanks,
Laszlo




More information about the libvir-list mailing list