Re: [kvm-unit-tests PATCH v3 05/17] x86 UEFI: Boot from UEFI

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 04/10/21 22:49, Zixuan Wang wrote:
From: Zixuan Wang <zixuanwang@xxxxxxxxxx>

This commit provides initial support for x86 test cases to boot from
UEFI:

    1. UEFI compiler flags are added to Makefile
    2. A new TARGET_EFI macro is added to turn on/off UEFI startup code
    3. Previous Multiboot setup code is refactored and updated for
       supporting UEFI, including the following changes:
       1. x86/efi/crt0-efi-x86_64.S: provides entry point and jumps to
          setup code in lib/efi.c.
       2. lib/efi.c: performs UEFI setup, calls arch-related setup
          functions, then jumps to test case main() function
       3. lib/x86/setup.c: provides arch-related setup under UEFI

To build test cases for UEFI, please first install the GNU-EFI library.
Check x86/efi/README.md for more details.

This commit is tested by a simple test calling report() and
report_summayr(). This commit does not include such a test to avoid
unnecessary files added into git history. To build and run this test in
UEFI (assuming file name is x86/dummy.c):

    ./configure --target-efi
    make x86/dummy.efi
    ./x86/efi/run ./x86/dummy.efi

To use the default Multiboot instead of UEFI:

    ./configure
    make x86/dummy.flat
    ./x86/run ./x86/dummy.flat

Some x86 test cases require additional fixes to work in UEFI, e.g.,
converting to position independent code (PIC), setting up page tables,
etc. This commit does not provide these fixes, so compiling and running
UEFI test cases other than x86/dummy.c may trigger compiler errors or
QEMU crashes. These test cases will be fixed by the follow-up commits in
this series.

The following code is ported from github.com/rhdrjones/kvm-unit-tests
    - ./configure: 'target-efi'-related code

See original code:
    - Repo: https://github.com/rhdrjones/kvm-unit-tests
    - Branch: target-efi

Co-developed-by: Varad Gautam <varad.gautam@xxxxxxxx>
Signed-off-by: Varad Gautam <varad.gautam@xxxxxxxx>
Signed-off-by: Zixuan Wang <zixuanwang@xxxxxxxxxx>

This is missing

diff --git a/x86/Makefile.i386 b/x86/Makefile.i386
index 340c561..7d19d55 100644
--- a/x86/Makefile.i386
+++ b/x86/Makefile.i386
@@ -2,6 +2,7 @@ cstart.o = $(TEST_DIR)/cstart.o
 bits = 32
 ldarch = elf32-i386
 exe = flat
+bin = elf
 COMMON_CFLAGS += -mno-sse -mno-sse2

 cflatobjs += lib/x86/setjmp32.o lib/ldiv32.o

for 32-bit tests to build; and also:

diff --git a/configure b/configure
index b6c09b3..6f4a8f0 100755
--- a/configure
+++ b/configure
@@ -265,6 +265,11 @@ if [ -f "$srcdir/$testdir/run" ]; then
     ln -fs "$srcdir/$testdir/run" $testdir-run
 fi

+testsubdir=$testdir
+if [ -n "$target_efi" ]; then
+    testsubdir=$testdir/efi
+fi
+
 # check if uint32_t needs a long format modifier
 cat << EOF > lib-test.c
 __UINT32_TYPE__
@@ -291,8 +301,11 @@ if test ! -e Makefile; then
     ln -s "$srcdir/Makefile" .

     echo "linking tests..."
-    mkdir -p $testdir
+    mkdir -p $testsubdir
     ln -sf "$srcdir/$testdir/run" $testdir/
+    if test "$testdir" != "$testsubdir"; then
+        ln -sf "$srcdir/$testsubdir/run" $testsubdir/
+    fi
     ln -sf "$srcdir/$testdir/unittests.cfg" $testdir/
     ln -sf "$srcdir/run_tests.sh"

@@ -332,6 +345,7 @@ OBJDUMP=$cross_prefix$objdump
 AR=$cross_prefix$ar
 ADDR2LINE=$cross_prefix$addr2line
 TEST_DIR=$testdir
+TEST_SUBDIR=$testsubdir
 FIRMWARE=$firmware
 ENDIAN=$endian
 PRETTY_PRINT_STACKS=$pretty_print_stacks
diff --git a/run_tests.sh b/run_tests.sh
index 9f233c5..f61e005 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -31,7 +31,7 @@ specify the appropriate qemu binary for ARCH-run.
 EOF
 }

-RUNTIME_arch_run="./$TEST_DIR/run"
+RUNTIME_arch_run="./$TEST_SUBDIR/run"
 source scripts/runtime.bash

 # require enhanced getopt


As of this patch tests don't seem to work correctly, but at least the build machinery works (they build and ./x86/efi/run starts them).

./run_tests.sh does not work, either.

Paolo




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux