* [Buildroot] [PATCH next 1/2] DEVELOPERS: add Julien Olivain for package/kexec
@ 2023-03-03 22:26 Julien Olivain
2023-03-03 22:26 ` [Buildroot] [PATCH next 2/2] support/testing/tests/package/test_kexec.py: new runtime test Julien Olivain
2023-03-09 20:06 ` [Buildroot] [PATCH next 1/2] DEVELOPERS: add Julien Olivain for package/kexec Arnout Vandecappelle
0 siblings, 2 replies; 5+ messages in thread
From: Julien Olivain @ 2023-03-03 22:26 UTC (permalink / raw)
To: buildroot; +Cc: Julien Olivain
Signed-off-by: Julien Olivain <ju.o@free.fr>
---
DEVELOPERS | 1 +
1 file changed, 1 insertion(+)
diff --git a/DEVELOPERS b/DEVELOPERS
index d052e59122..21ea2b53e8 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1693,6 +1693,7 @@ F: package/fluidsynth/
F: package/glslsandbox-player/
F: package/gnupg2/
F: package/highway/
+F: package/kexec/
F: package/libjxl/
F: package/octave/
F: package/ola/
--
2.39.2
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Buildroot] [PATCH next 2/2] support/testing/tests/package/test_kexec.py: new runtime test
2023-03-03 22:26 [Buildroot] [PATCH next 1/2] DEVELOPERS: add Julien Olivain for package/kexec Julien Olivain
@ 2023-03-03 22:26 ` Julien Olivain
2023-03-12 13:13 ` Thomas Petazzoni via buildroot
2023-05-26 12:09 ` Romain Naour
2023-03-09 20:06 ` [Buildroot] [PATCH next 1/2] DEVELOPERS: add Julien Olivain for package/kexec Arnout Vandecappelle
1 sibling, 2 replies; 5+ messages in thread
From: Julien Olivain @ 2023-03-03 22:26 UTC (permalink / raw)
To: buildroot; +Cc: Julien Olivain
Signed-off-by: Julien Olivain <ju.o@free.fr>
---
Patch tested on branch next at commit b793f3a with commands:
python3 -m flake8 \
support/testing/tests/package/test_kexec.py
[no-output]
support/testing/run-tests \
-d dl -o output_folder \
tests.package.test_kexec
...
OK
---
DEVELOPERS | 2 +
support/testing/tests/package/test_kexec.py | 93 +++++++++++++++++++
.../package/test_kexec/linux-kexec.fragment | 5 +
3 files changed, 100 insertions(+)
create mode 100644 support/testing/tests/package/test_kexec.py
create mode 100644 support/testing/tests/package/test_kexec/linux-kexec.fragment
diff --git a/DEVELOPERS b/DEVELOPERS
index 21ea2b53e8..5cebaeb4f3 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1719,6 +1719,8 @@ F: support/testing/tests/package/sample_python_spake2.py
F: support/testing/tests/package/test_gnupg2.py
F: support/testing/tests/package/test_highway.py
F: support/testing/tests/package/test_hwloc.py
+F: support/testing/tests/package/test_kexec.py
+F: support/testing/tests/package/test_kexec/
F: support/testing/tests/package/test_libjxl.py
F: support/testing/tests/package/test_ncdu.py
F: support/testing/tests/package/test_octave.py
diff --git a/support/testing/tests/package/test_kexec.py b/support/testing/tests/package/test_kexec.py
new file mode 100644
index 0000000000..77e383373e
--- /dev/null
+++ b/support/testing/tests/package/test_kexec.py
@@ -0,0 +1,93 @@
+import os
+
+import infra.basetest
+
+
+class TestKexec(infra.basetest.BRTest):
+
+ # A specific configuration is needed for using kexec:
+ # - We use Aarch64 since it is well supported for kexec,
+ # - A kernel config fragment enables all the kexec parts,
+ # - The kernel Image is installed on target filesystem to be
+ # reloaded through kexec,
+ # - We use a ext4 rootfs image exposed as a virtio storage (rather
+ # than cpio initrd). This avoids needing to install the initrd
+ # inside the rootfs.
+ config = \
+ """
+ BR2_aarch64=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
+ BR2_LINUX_KERNEL=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.1.15"
+ BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
+ BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{}"
+ BR2_LINUX_KERNEL_INSTALL_TARGET=y
+ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+ BR2_PACKAGE_KEXEC=y
+ BR2_TARGET_ROOTFS_EXT2=y
+ BR2_TARGET_ROOTFS_EXT2_4=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """.format(
+ infra.filepath("tests/package/test_kexec/linux-kexec.fragment")
+ )
+
+ def test_run(self):
+ hda = os.path.join(self.builddir, "images", "rootfs.ext4")
+ kern = os.path.join(self.builddir, "images", "Image")
+ # Notes:
+ # Sufficient memory is needed to load the kernel: having at
+ # least 512MB works. kexec could silently fail if not enough
+ # memory is present. KASLR needs to be disabled for the test:
+ # we pass "nokaslr" to kernel bootargs, and also pass
+ # "dtb-kaslr-seed=off" to qemu virt machine.
+ bootargs = ["root=/dev/vda console=ttyAMA0 nokaslr"]
+ qemu_opts = ["-M", "virt,dtb-kaslr-seed=off", "-cpu", "cortex-a57", "-m", "512M",
+ "-drive", f"file={hda},if=virtio,format=raw"]
+ self.emulator.boot(arch="aarch64",
+ kernel=kern,
+ kernel_cmdline=bootargs,
+ options=qemu_opts)
+ self.emulator.login()
+
+ # Test the program can execute
+ self.assertRunOk("kexec --version")
+
+ # Check the kexec kernel is NOT loaded:
+ self.assertRunOk("test \"$(cat /sys/kernel/kexec_loaded)\" -eq 0")
+
+ # Load the Kernel:
+ # "--append br-test" adds a dummy kernel args we'll be able to
+ # check in the second executed kernel.
+ # We use the dtb image from /sys/firmware/fdt (since we don't
+ # have the dtb file in the system)
+ self.assertRunOk("kexec -d -l --dtb=/sys/firmware/fdt --reuse-cmdline --serial=ttyAMA0 --append=br-test /boot/Image")
+
+ # Check the kexec kernel IS loaded:
+ self.assertRunOk("test \"$(cat /sys/kernel/kexec_loaded)\" -eq 1")
+
+ # Create a marker file in tmpfs which is supposed to disappear
+ # after kexec kernel restart.
+ self.assertRunOk("touch /dev/shm/br-kexec-marker")
+
+ # Execute the loaded kernel (i.e perform a kexec reboot)
+ # qemu.sendline() is used here because no exit code nor
+ # program return is expected, since kexec is like a
+ # reboot. The login is expected to be reached after the
+ # command is issued.
+ self.emulator.qemu.sendline("kexec -d -e")
+
+ # Wait for the login, and log again
+ self.emulator.login()
+
+ # Check the "br-test" dummy kernel arg is present
+ self.assertRunOk("grep br-test /proc/cmdline")
+
+ # Check the test marker file is no longer here
+ self.assertRunOk("test ! -e /dev/shm/br-kexec-marker")
+
+ # After restart, the kernel is not supposed to have a kexec
+ # loaded image:
+ self.assertRunOk("test \"$(cat /sys/kernel/kexec_loaded)\" -eq 0")
diff --git a/support/testing/tests/package/test_kexec/linux-kexec.fragment b/support/testing/tests/package/test_kexec/linux-kexec.fragment
new file mode 100644
index 0000000000..04c65f5cae
--- /dev/null
+++ b/support/testing/tests/package/test_kexec/linux-kexec.fragment
@@ -0,0 +1,5 @@
+CONFIG_KEXEC=y
+CONFIG_KEXEC_FILE=y
+CONFIG_PROC_KCORE=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_KALLSYMS_ALL=y
--
2.39.2
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH next 1/2] DEVELOPERS: add Julien Olivain for package/kexec
2023-03-03 22:26 [Buildroot] [PATCH next 1/2] DEVELOPERS: add Julien Olivain for package/kexec Julien Olivain
2023-03-03 22:26 ` [Buildroot] [PATCH next 2/2] support/testing/tests/package/test_kexec.py: new runtime test Julien Olivain
@ 2023-03-09 20:06 ` Arnout Vandecappelle
1 sibling, 0 replies; 5+ messages in thread
From: Arnout Vandecappelle @ 2023-03-09 20:06 UTC (permalink / raw)
To: Julien Olivain, buildroot
On 03/03/2023 23:26, Julien Olivain wrote:
> Signed-off-by: Julien Olivain <ju.o@free.fr>
Applied to master, thanks.
Regards,
Arnout
> ---
> DEVELOPERS | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/DEVELOPERS b/DEVELOPERS
> index d052e59122..21ea2b53e8 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -1693,6 +1693,7 @@ F: package/fluidsynth/
> F: package/glslsandbox-player/
> F: package/gnupg2/
> F: package/highway/
> +F: package/kexec/
> F: package/libjxl/
> F: package/octave/
> F: package/ola/
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH next 2/2] support/testing/tests/package/test_kexec.py: new runtime test
2023-03-03 22:26 ` [Buildroot] [PATCH next 2/2] support/testing/tests/package/test_kexec.py: new runtime test Julien Olivain
@ 2023-03-12 13:13 ` Thomas Petazzoni via buildroot
2023-05-26 12:09 ` Romain Naour
1 sibling, 0 replies; 5+ messages in thread
From: Thomas Petazzoni via buildroot @ 2023-03-12 13:13 UTC (permalink / raw)
To: Julien Olivain; +Cc: buildroot
On Fri, 3 Mar 2023 23:26:58 +0100
Julien Olivain <ju.o@free.fr> wrote:
> Signed-off-by: Julien Olivain <ju.o@free.fr>
> ---
> Patch tested on branch next at commit b793f3a with commands:
Applied to next, thanks.
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Buildroot] [PATCH next 2/2] support/testing/tests/package/test_kexec.py: new runtime test
2023-03-03 22:26 ` [Buildroot] [PATCH next 2/2] support/testing/tests/package/test_kexec.py: new runtime test Julien Olivain
2023-03-12 13:13 ` Thomas Petazzoni via buildroot
@ 2023-05-26 12:09 ` Romain Naour
1 sibling, 0 replies; 5+ messages in thread
From: Romain Naour @ 2023-05-26 12:09 UTC (permalink / raw)
To: Julien Olivain, buildroot
Hello Julien,
Le 03/03/2023 à 23:26, Julien Olivain a écrit :
> Signed-off-by: Julien Olivain <ju.o@free.fr>
> ---
> Patch tested on branch next at commit b793f3a with commands:
>
> python3 -m flake8 \
> support/testing/tests/package/test_kexec.py
> [no-output]
>
> support/testing/run-tests \
> -d dl -o output_folder \
> tests.package.test_kexec
> ...
> OK
Thanks for the runtime test!
> ---
> DEVELOPERS | 2 +
> support/testing/tests/package/test_kexec.py | 93 +++++++++++++++++++
> .../package/test_kexec/linux-kexec.fragment | 5 +
> 3 files changed, 100 insertions(+)
> create mode 100644 support/testing/tests/package/test_kexec.py
> create mode 100644 support/testing/tests/package/test_kexec/linux-kexec.fragment
>
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 21ea2b53e8..5cebaeb4f3 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -1719,6 +1719,8 @@ F: support/testing/tests/package/sample_python_spake2.py
> F: support/testing/tests/package/test_gnupg2.py
> F: support/testing/tests/package/test_highway.py
> F: support/testing/tests/package/test_hwloc.py
> +F: support/testing/tests/package/test_kexec.py
> +F: support/testing/tests/package/test_kexec/
> F: support/testing/tests/package/test_libjxl.py
> F: support/testing/tests/package/test_ncdu.py
> F: support/testing/tests/package/test_octave.py
> diff --git a/support/testing/tests/package/test_kexec.py b/support/testing/tests/package/test_kexec.py
> new file mode 100644
> index 0000000000..77e383373e
> --- /dev/null
> +++ b/support/testing/tests/package/test_kexec.py
> @@ -0,0 +1,93 @@
> +import os
> +
> +import infra.basetest
> +
> +
> +class TestKexec(infra.basetest.BRTest):
> +
> + # A specific configuration is needed for using kexec:
> + # - We use Aarch64 since it is well supported for kexec,
> + # - A kernel config fragment enables all the kexec parts,
> + # - The kernel Image is installed on target filesystem to be
> + # reloaded through kexec,
> + # - We use a ext4 rootfs image exposed as a virtio storage (rather
> + # than cpio initrd). This avoids needing to install the initrd
> + # inside the rootfs.
> + config = \
> + """
> + BR2_aarch64=y
> + BR2_TOOLCHAIN_EXTERNAL=y
> + BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
> + BR2_LINUX_KERNEL=y
> + BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> + BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.1.15"
> + BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
> + BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
> + BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{}"
> + BR2_LINUX_KERNEL_INSTALL_TARGET=y
> + BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
> + BR2_PACKAGE_KEXEC=y
> + BR2_TARGET_ROOTFS_EXT2=y
> + BR2_TARGET_ROOTFS_EXT2_4=y
> + # BR2_TARGET_ROOTFS_TAR is not set
> + """.format(
> + infra.filepath("tests/package/test_kexec/linux-kexec.fragment")
> + )
> +
> + def test_run(self):
> + hda = os.path.join(self.builddir, "images", "rootfs.ext4")
> + kern = os.path.join(self.builddir, "images", "Image")
> + # Notes:
> + # Sufficient memory is needed to load the kernel: having at
> + # least 512MB works. kexec could silently fail if not enough
> + # memory is present. KASLR needs to be disabled for the test:
> + # we pass "nokaslr" to kernel bootargs, and also pass
> + # "dtb-kaslr-seed=off" to qemu virt machine.
> + bootargs = ["root=/dev/vda console=ttyAMA0 nokaslr"]
> + qemu_opts = ["-M", "virt,dtb-kaslr-seed=off", "-cpu", "cortex-a57", "-m", "512M",
kaslr-seed requires at least qemu 5.1.x but the test fail in the gitlab runner
using a docker image
"qemu-system-aarch64: Property 'virt-5.2-machine.dtb-kaslr-seed' not found"
See: https://gitlab.com/buildroot.org/buildroot/-/jobs/4322819092
The test actually requires at least qemu 7.0.0 in order to be able to disable
kaslr_seed via dtb:
[qemu 7.0.x]
https://gitlab.com/qemu-project/qemu/-/commit/33973e1e1f88b7588fe9629645e279ff2c6ca1c4
Also dtb-kaslr-seed is aleady deprecaded by qemu.
[qemu 5.1.x]
https://gitlab.com/qemu-project/qemu/-/commit/60592cfed2b685ef114a454d176ef539528cb0cf
[qemu 7.1.x]
https://gitlab.com/qemu-project/qemu/-/commit/5242876f37ca21017e3f6eafbaefaa174babd9b7
Best regards,
Romain
> + "-drive", f"file={hda},if=virtio,format=raw"]
> + self.emulator.boot(arch="aarch64",
> + kernel=kern,
> + kernel_cmdline=bootargs,
> + options=qemu_opts)
> + self.emulator.login()
> +
> + # Test the program can execute
> + self.assertRunOk("kexec --version")
> +
> + # Check the kexec kernel is NOT loaded:
> + self.assertRunOk("test \"$(cat /sys/kernel/kexec_loaded)\" -eq 0")
> +
> + # Load the Kernel:
> + # "--append br-test" adds a dummy kernel args we'll be able to
> + # check in the second executed kernel.
> + # We use the dtb image from /sys/firmware/fdt (since we don't
> + # have the dtb file in the system)
> + self.assertRunOk("kexec -d -l --dtb=/sys/firmware/fdt --reuse-cmdline --serial=ttyAMA0 --append=br-test /boot/Image")
> +
> + # Check the kexec kernel IS loaded:
> + self.assertRunOk("test \"$(cat /sys/kernel/kexec_loaded)\" -eq 1")
> +
> + # Create a marker file in tmpfs which is supposed to disappear
> + # after kexec kernel restart.
> + self.assertRunOk("touch /dev/shm/br-kexec-marker")
> +
> + # Execute the loaded kernel (i.e perform a kexec reboot)
> + # qemu.sendline() is used here because no exit code nor
> + # program return is expected, since kexec is like a
> + # reboot. The login is expected to be reached after the
> + # command is issued.
> + self.emulator.qemu.sendline("kexec -d -e")
> +
> + # Wait for the login, and log again
> + self.emulator.login()
> +
> + # Check the "br-test" dummy kernel arg is present
> + self.assertRunOk("grep br-test /proc/cmdline")
> +
> + # Check the test marker file is no longer here
> + self.assertRunOk("test ! -e /dev/shm/br-kexec-marker")
> +
> + # After restart, the kernel is not supposed to have a kexec
> + # loaded image:
> + self.assertRunOk("test \"$(cat /sys/kernel/kexec_loaded)\" -eq 0")
> diff --git a/support/testing/tests/package/test_kexec/linux-kexec.fragment b/support/testing/tests/package/test_kexec/linux-kexec.fragment
> new file mode 100644
> index 0000000000..04c65f5cae
> --- /dev/null
> +++ b/support/testing/tests/package/test_kexec/linux-kexec.fragment
> @@ -0,0 +1,5 @@
> +CONFIG_KEXEC=y
> +CONFIG_KEXEC_FILE=y
> +CONFIG_PROC_KCORE=y
> +CONFIG_DEBUG_KERNEL=y
> +CONFIG_KALLSYMS_ALL=y
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-05-26 12:10 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-03 22:26 [Buildroot] [PATCH next 1/2] DEVELOPERS: add Julien Olivain for package/kexec Julien Olivain
2023-03-03 22:26 ` [Buildroot] [PATCH next 2/2] support/testing/tests/package/test_kexec.py: new runtime test Julien Olivain
2023-03-12 13:13 ` Thomas Petazzoni via buildroot
2023-05-26 12:09 ` Romain Naour
2023-03-09 20:06 ` [Buildroot] [PATCH next 1/2] DEVELOPERS: add Julien Olivain for package/kexec Arnout Vandecappelle
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox