From: Janpieter Sollie <[email protected]> Ktest has now been expanded with cross-binary armv7 (hard float). this should allow some testing on more legacy armv7 hardware, which may still be present in NAS devices. However, due to the nature of the ecosystem, a limit is in place: - 3GB ram for 32 bit systems - 4 CPUs for 32 bit systems I think if you need more, you'd better think of going 64-bit. These constraints allow the ARM emulator to run smoothly.
Signed-off-by: jpsollie <[email protected]> --- build-test-kernel | 19 +++++++++++-------- cross.conf | 2 +- lib/common.sh | 11 +++++++++++ lib/libktest.sh | 11 ++++++++--- tests/kconfig.sh | 25 ++++++++++++++++++++++--- 5 files changed, 53 insertions(+), 15 deletions(-) diff --git a/build-test-kernel b/build-test-kernel index 38cfd25..ea0d56e 100755 --- a/build-test-kernel +++ b/build-test-kernel @@ -139,7 +139,7 @@ new_config() local config_tool="$ktest_kernel_source/scripts/config" if [[ ! -f $kconfig ]]; then - do_make allnoconfig + do_make ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-" allnoconfig # Really undefine everything: sed -i -e 's/\(CONFIG_.*\)=.*/# \1 is not set/' "$kconfig" @@ -186,17 +186,17 @@ build_kernel() mv "$kconfig" "$kconfig".bak fi + MAKEARGS+=("LOCALVERSION=-ktest" ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-") + new_config log_verbose "kernel_config_require: ${ktest_kernel_config_require[@]}" - MAKEARGS+=("LOCALVERSION=-ktest" ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-") - for opt in "${ktest_kernel_config_require[@]}"; do [[ -n $opt ]] && kernel_opt set "$opt" done - do_make olddefconfig + do_make ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-" olddefconfig for opt in "${ktest_kernel_config_require[@]}"; do [[ -n $opt ]] && kernel_opt check "$opt" @@ -209,10 +209,10 @@ build_kernel() case $KERNEL_ARCH in mips) - do_make -k vmlinuz + do_make $MAKEARGS -k vmlinuz ;; *) - do_make -k + do_make $MAKEARGS -k ;; esac @@ -222,6 +222,9 @@ build_kernel() x86*) install -m0644 "$BOOT/bzImage" "$ktest_kernel_binary/vmlinuz" ;; + arm) + install -m0644 "$BOOT/zImage" "$ktest_kernel_binary/vmlinuz" + ;; aarch64) install -m0644 "$BOOT/Image" "$ktest_kernel_binary/vmlinuz" ;; @@ -281,13 +284,13 @@ cmd_boot() cmd_oldconfig() { new_config - do_make oldconfig + do_make ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-" oldconfig } cmd_config() { new_config - do_make nconfig + do_make ARCH="$KERNEL_ARCH" CROSS_COMPILE="$ARCH_TRIPLE-" nconfig } cmd_faddr2line() diff --git a/cross.conf b/cross.conf index 2896885..d98219e 100644 --- a/cross.conf +++ b/cross.conf @@ -5,4 +5,4 @@ ARCH_TRIPLE_X86=x86-linux-gnu ARCH_TRIPLE_X86_64=x86_64-linux-gnu ARCH_TRIPLE_ARM64=aarch64-linux-gnu - +ARCH_TRIPLE_ARMV7=arm-linux-gnueabihf diff --git a/lib/common.sh b/lib/common.sh index 8629e9f..d9012aa 100644 --- a/lib/common.sh +++ b/lib/common.sh @@ -116,6 +116,17 @@ parse_arch() QEMU_PACKAGE=qemu-system-arm QEMU_BIN=qemu-system-aarch64 ;; + armhf|armv7|armv7l|arm) + ktest_arch=arm + DEBIAN_ARCH=armhf + ARCH_TRIPLE=${ARCH_TRIPLE_ARMV7} + + KERNEL_ARCH=arm + BITS=32 + + QEMU_PACKAGE=qemu-system-arm + QEMU_BIN=qemu-system-arm + ;; mips) DEBIAN_ARCH=mips ARCH_TRIPLE=mips-linux-gnu diff --git a/lib/libktest.sh b/lib/libktest.sh index 9e8f4db..689f42f 100644 --- a/lib/libktest.sh +++ b/lib/libktest.sh @@ -223,7 +223,7 @@ ktest_kgdb() ktest_mon() { - exec socat UNIX-CONNECT:"$ktest_out/vm/on" STDIO + exec socat UNIX-CONNECT:"$ktest_out/vm/mon" STDIO exec nc "$ktest_out/vm/mon" } @@ -314,7 +314,7 @@ start_vm() x86|x86_64) qemu_cmd+=(-cpu $cputype -machine type=q35,accel=$accel,nvdimm=on) ;; - aarch64) + aarch64|arm) qemu_cmd+=(-cpu $cputype -machine type=virt,gic-version=max,accel=$accel) ;; mips) @@ -327,9 +327,12 @@ start_vm() esac local maxmem=$(awk '/MemTotal/ {printf "%dG\n", $2/1024/1024}' /proc/meminfo 2>/dev/null) || maxmem="1T" + local memconfig="$ktest_mem,slots=8,maxmem=$maxmem" + + [ $BITS == 32 ] && memconfig="3G" && ktest_cpus=4 #do not be fancy on 32-bit hardware. if it works, it's fine qemu_cmd+=( \ - -m "$ktest_mem,slots=8,maxmem=$maxmem" \ + -m "$memconfig" \ -smp "$ktest_cpus" \ -kernel "$ktest_kernel_binary/vmlinuz" \ -append "$(join_by " " ${kernelargs[@]})" \ @@ -343,6 +346,8 @@ start_vm() -virtfs local,path=/,mount_tag=host,security_model=none,multidevs=remap \ ) + + if [[ -f $ktest_kernel_binary/initramfs ]]; then qemu_cmd+=(-initrd "$ktest_kernel_binary/initramfs") fi diff --git a/tests/kconfig.sh b/tests/kconfig.sh index 73e93db..b259515 100644 --- a/tests/kconfig.sh +++ b/tests/kconfig.sh @@ -12,6 +12,7 @@ case $ktest_arch in require-kernel-config MCORE2 # optimize for core2 require-kernel-config IO_DELAY_0XED require-kernel-config 64BIT=n + require-kernel-config COMPAT_32BIT_TIME require-kernel-config ACPI # way slower without it, do not know why require-kernel-config UNWINDER_FRAME_POINTER require-kernel-config HARDLOCKUP_DETECTOR @@ -38,13 +39,33 @@ case $ktest_arch in have_virtio=1 have_suspend=1 + require-kernel-append console=hvc0 + ;; + arm) + require-kernel-config ARCH_VIRT + require-kernel-config SMP + require-kernel-config VFP + require-kernel-config NEON + require-kernel-config ARM_LPAE + require-kernel-config MMU + require-kernel-config HAVE_PCI + require-kernel-config PCI_HOST_GENERIC + require-kernel-config ARM_AMBA + require-kernel-config COMPAT_32BIT_TIME + require-kernel-config RTC_DRV_PL031 + + have_virtio=1 + have_kvmguest=1 + require-kernel-append console=hvc0 ;; aarch64) require-kernel-config PCI_HOST_GENERIC require-kernel-config RTC_DRV_PL031 + require-kernel-config COMPAT_32BIT_TIME have_virtio=1 + have_kvmguest=1 require-kernel-append console=hvc0 ;; @@ -70,7 +91,7 @@ case $ktest_arch in require-kernel-append console=hvc0 ;; *) - echo "Kernel architecture not supported by kconfig.sh" + echo "Kernel architecture $ktest_arch not supported by kconfig.sh" exit 1 ;; esac @@ -95,8 +116,6 @@ require-kernel-config BINFMT_SCRIPT require-kernel-config COMPACTION # virtfs doesn't do well without it -require-kernel-config PROC_KCORE # XXX Needed? - require-kernel-config TTY require-kernel-config VT -- 2.42.0
