Commit 45839d09 authored by Thomas Weißschuh's avatar Thomas Weißschuh

selftests/nolibc: don't embed initramfs into kernel image

When the initramfs is embedded into the kernel each rebuild of it will
trigger a full kernel relink and all the expensive postprocessing steps.

Currently nolibc-test and therefore the initramfs are always rebuild,
even without source changes, leading to lots of slow kernel relinks.

Instead of linking the initramfs into the kernel assemble it manually
and pass it explicitly to qemu.
This avoids all of the kernel relinks.
Signed-off-by: default avatarThomas Weißschuh <linux@weissschuh.net>
Reviewed-by: default avatarNicolas Schier <nicolas@fjasle.eu>
Link: https://lore.kernel.org/r/20230917-nolibc-initramfs-v2-1-f0f293a8b198@weissschuh.net
parent 4ed03f63
/initramfs/ /initramfs/
/initramfs.cpio
/libc-test /libc-test
/nolibc-test /nolibc-test
/run.out /run.out
......
...@@ -131,18 +131,20 @@ REPORT ?= awk '/\[OK\][\r]*$$/{p++} /\[FAIL\][\r]*$$/{if (!f) printf("\n"); f++ ...@@ -131,18 +131,20 @@ REPORT ?= awk '/\[OK\][\r]*$$/{p++} /\[FAIL\][\r]*$$/{if (!f) printf("\n"); f++
help: help:
@echo "Supported targets under selftests/nolibc:" @echo "Supported targets under selftests/nolibc:"
@echo " all call the \"run\" target below" @echo " all call the \"run\" target below"
@echo " help this help" @echo " help this help"
@echo " sysroot create the nolibc sysroot here (uses \$$ARCH)" @echo " sysroot create the nolibc sysroot here (uses \$$ARCH)"
@echo " nolibc-test build the executable (uses \$$CC and \$$CROSS_COMPILE)" @echo " nolibc-test build the executable (uses \$$CC and \$$CROSS_COMPILE)"
@echo " libc-test build an executable using the compiler's default libc instead" @echo " libc-test build an executable using the compiler's default libc instead"
@echo " run-user runs the executable under QEMU (uses \$$XARCH, \$$TEST)" @echo " run-user runs the executable under QEMU (uses \$$XARCH, \$$TEST)"
@echo " initramfs prepare the initramfs with nolibc-test" @echo " initramfs.cpio prepare the initramfs archive with nolibc-test"
@echo " defconfig create a fresh new default config (uses \$$XARCH)" @echo " initramfs prepare the initramfs tree with nolibc-test"
@echo " kernel (re)build the kernel with the initramfs (uses \$$XARCH)" @echo " defconfig create a fresh new default config (uses \$$XARCH)"
@echo " run runs the kernel in QEMU after building it (uses \$$XARCH, \$$TEST)" @echo " kernel (re)build the kernel (uses \$$XARCH)"
@echo " rerun runs a previously prebuilt kernel in QEMU (uses \$$XARCH, \$$TEST)" @echo " kernel-standalone (re)build the kernel with the initramfs (uses \$$XARCH)"
@echo " clean clean the sysroot, initramfs, build and output files" @echo " run runs the kernel in QEMU after building it (uses \$$XARCH, \$$TEST)"
@echo " rerun runs a previously prebuilt kernel in QEMU (uses \$$XARCH, \$$TEST)"
@echo " clean clean the sysroot, initramfs, build and output files"
@echo "" @echo ""
@echo "The output file is \"run.out\". Test ranges may be passed using \$$TEST." @echo "The output file is \"run.out\". Test ranges may be passed using \$$TEST."
@echo "" @echo ""
...@@ -195,6 +197,9 @@ run-user: nolibc-test ...@@ -195,6 +197,9 @@ run-user: nolibc-test
$(Q)qemu-$(QEMU_ARCH) ./nolibc-test > "$(CURDIR)/run.out" || : $(Q)qemu-$(QEMU_ARCH) ./nolibc-test > "$(CURDIR)/run.out" || :
$(Q)$(REPORT) $(CURDIR)/run.out $(Q)$(REPORT) $(CURDIR)/run.out
initramfs.cpio: kernel nolibc-test
$(QUIET_GEN)echo 'file /init nolibc-test 755 0 0' | $(srctree)/usr/gen_init_cpio - > initramfs.cpio
initramfs: nolibc-test initramfs: nolibc-test
$(QUIET_MKDIR)mkdir -p initramfs $(QUIET_MKDIR)mkdir -p initramfs
$(call QUIET_INSTALL, initramfs/init) $(call QUIET_INSTALL, initramfs/init)
...@@ -203,17 +208,20 @@ initramfs: nolibc-test ...@@ -203,17 +208,20 @@ initramfs: nolibc-test
defconfig: defconfig:
$(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) mrproper $(DEFCONFIG) prepare $(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) mrproper $(DEFCONFIG) prepare
kernel: initramfs kernel:
$(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) $(IMAGE_NAME)
kernel-standalone: initramfs
$(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) $(IMAGE_NAME) CONFIG_INITRAMFS_SOURCE=$(CURDIR)/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 the tests after building the kernel
run: kernel run: kernel initramfs.cpio
$(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out" $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -initrd initramfs.cpio -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
$(Q)$(REPORT) $(CURDIR)/run.out $(Q)$(REPORT) $(CURDIR)/run.out
# re-run the tests from an existing kernel # re-run the tests from an existing kernel
rerun: rerun:
$(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out" $(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -initrd initramfs.cpio -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
$(Q)$(REPORT) $(CURDIR)/run.out $(Q)$(REPORT) $(CURDIR)/run.out
# report with existing test log # report with existing test log
...@@ -227,6 +235,8 @@ clean: ...@@ -227,6 +235,8 @@ clean:
$(Q)rm -f nolibc-test $(Q)rm -f nolibc-test
$(call QUIET_CLEAN, libc-test) $(call QUIET_CLEAN, libc-test)
$(Q)rm -f libc-test $(Q)rm -f libc-test
$(call QUIET_CLEAN, initramfs.cpio)
$(Q)rm -rf initramfs.cpio
$(call QUIET_CLEAN, initramfs) $(call QUIET_CLEAN, initramfs)
$(Q)rm -rf initramfs $(Q)rm -rf initramfs
$(call QUIET_CLEAN, run.out) $(call QUIET_CLEAN, run.out)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment