On Mon, Feb 21, 2022 at 09:40:56AM +0100, Andrew Jones wrote: > On Sun, Feb 20, 2022 at 02:42:31PM -0800, Zixuan Wang wrote: > > Hello, > > > > This patch series enables kvm-unit-tests to get envs and args under > > UEFI. The host passes envs and args through files: > > > > 1. The host stores envs into ENVS.TXT and args into ARGS.TXT > > EFI already has support for an environment and EFI apps can accept args. > Why not find a way to convert kvm-unit-tests ENV and unit tests args > into the EFI system and then use that? > > efi_setup_argv()[*] in my original PoC does that. It uses gnu-efi, but > it should be easy to strip away the gnu-efi stuff and go straight for > the underlining EFI functions. > > [*] https://github.com/rhdrjones/kvm-unit-tests/commit/12a49a2e97b457e23af10bb25cd972362b379951#:~:text=static%20void%20efi_setup_argv(EFI_HANDLE%20Image%2C%20EFI_SYSTEM_TABLE%20*SysTab) > > If you want to mimic efi_setup_argv(), then you'll also need 85baf398 > ("lib/argv: Allow environ to be primed") from that same branch. > > EFI wrapper scripts for each unit test can be generated to pass the args > to the unit test EFI apps automatically. For the environment, the EFI > vars can be set as usual for the system. For QEMU, that means creating > a VARS.fd and then adding another flash device to the VM to exposes it. BTW, this tool from Gerd might be useful for that https://gitlab.com/kraxel/edk2-tests/-/blob/master/tools/vars.py Thanks, drew > > Thanks, > drew > > > > 2. The guest boots up and reads data from these files through UEFI file > > operation services > > 3. The file data is passed to corresponding setup functions > > > > As a result, several x86 test cases (e.g., kvmclock_test and vmexit) > > can now get envs/args from the host [1], thus do not report FAIL when > > running ./run-tests.sh. > > > > An alternative approach for envs/args passing under UEFI is to use > > QEMU's -append/-initrd options. However, this approach requires EFI > > binaries to be passed through QEMU's -kernel option. While currently, > > EFI binaries are loaded from a disk image. Changing this bootup process > > may make kvm-unit-tests (under UEFI) unable to run on bare-metal [2]. > > On the other hand, passing envs/args through files should work on > > bare-metal because UEFI's file operation services do not rely on QEMU's > > functionalities, thus working on bare-metal. > > > > The summary of this patch series: > > > > Patch #1 pulls Linux kernel's UEFI definitions for file operations. > > > > Patch #2 implements file read functions and envs setup functions. > > > > Patch #3 implements the args setup functions. > > > > Best regards, > > Zixuan > > > > [1] https://github.com/TheNetAdmin/KVM-Unit-Tests-dev-fork/issues/8 > > [2] https://lore.kernel.org/kvm/CAEDJ5ZQLm1rz+0a7MPPz3wMAoeTq2oH9z92sd0ZhCxEjWMkOpg@xxxxxxxxxxxxxx > > > > Zixuan Wang (3): > > x86 UEFI: pull UEFI definitions for file operations > > x86 UEFI: read envs from file > > x86 UEFI: read args from file > > > > lib/efi.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++ > > lib/linux/efi.h | 82 +++++++++++++++++++++++++- > > x86/efi/run | 36 +++++++++++- > > 3 files changed, 265 insertions(+), 3 deletions(-) > > > > -- > > 2.35.1 > >