lkml.org 
[lkml]   [2022]   [Aug]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH nolibc 15/18] selftests/nolibc: add a "run" target to start the kernel in QEMU
    Date
    From: Willy Tarreau <w@1wt.eu>

    The "run" target will build the kernel and start it in QEMU. The
    "rerun" target will not have the kernel dependency and will just try
    to start QEMU. The QEMU architecture used to start the kernel is
    derived from the configured ARCH. This might need to be improved
    for archs which include different variants under the same name
    (mips vs mipsel, +/-64, riscv32 vs riscv64). This could be tested
    for i386, x86, arm, arm64, mips and riscv (the later two reporting
    issues on some tests).

    It is possible to pass a test specification for nolibc-test in the TEST
    variable, which will be passed as-is as NOLIBC_TEST.

    On success, the number of successful tests is printed. On failure, failed
    lines are individually printed.

    Signed-off-by: Willy Tarreau <w@1wt.eu>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    ---
    tools/testing/selftests/nolibc/Makefile | 33 +++++++++++++++++++++++++
    1 file changed, 33 insertions(+)

    diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
    index c104719eae8b8..7c1f5360f454e 100644
    --- a/tools/testing/selftests/nolibc/Makefile
    +++ b/tools/testing/selftests/nolibc/Makefile
    @@ -31,6 +31,27 @@ DEFCONFIG_mips = malta_defconfig
    DEFCONFIG_riscv = defconfig
    DEFCONFIG = $(DEFCONFIG_$(ARCH))

    +# optional tests to run (default = all)
    +TEST =
    +
    +# QEMU_ARCH: arch names used by qemu
    +QEMU_ARCH_i386 = i386
    +QEMU_ARCH_x86 = x86_64
    +QEMU_ARCH_arm64 = aarch64
    +QEMU_ARCH_arm = arm
    +QEMU_ARCH_mips = mipsel # works with malta_defconfig
    +QEMU_ARCH_riscv = riscv64
    +QEMU_ARCH = $(QEMU_ARCH_$(ARCH))
    +
    +# QEMU_ARGS : some arch-specific args to pass to qemu
    +QEMU_ARGS_i386 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)"
    +QEMU_ARGS_x86 = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)"
    +QEMU_ARGS_arm64 = -M virt -cpu cortex-a53 -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
    +QEMU_ARGS_arm = -M virt -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
    +QEMU_ARGS_mips = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
    +QEMU_ARGS_riscv = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
    +QEMU_ARGS = $(QEMU_ARGS_$(ARCH))
    +
    # OUTPUT is only set when run from the main makefile, otherwise
    # it defaults to this nolibc directory.
    OUTPUT ?= $(CURDIR)/
    @@ -61,8 +82,20 @@ defconfig:
    kernel: initramfs
    $(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) $(IMAGE_NAME) CONFIG_INITRAMFS_SOURCE=$(CURDIR)/initramfs

    +# run the tests after building the kernel
    +run: kernel
    + $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
    + $(Q)grep -w FAIL "$(CURDIR)/run.out" && echo "See all results in $(CURDIR)/run.out" || echo "$$(grep -c ^[0-9].*OK $(CURDIR)/run.out) test(s) passed."
    +
    +# re-run the tests from an existing kernel
    +rerun:
    + $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
    + $(Q)grep -w FAIL "$(CURDIR)/run.out" && echo "See all results in $(CURDIR)/run.out" || echo "$$(grep -c ^[0-9].*OK $(CURDIR)/run.out) test(s) passed."
    +
    clean:
    $(call QUIET_CLEAN, nolibc-test)
    $(Q)rm -f nolibc-test
    $(call QUIET_CLEAN, initramfs)
    $(Q)rm -rf initramfs
    + $(call QUIET_CLEAN, run.out)
    + $(Q)rm -rf run.out
    --
    2.31.1.189.g2e36527f23
    \
     
     \ /
      Last update: 2022-08-31 20:28    [W:4.394 / U:0.692 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site