@@ -481,3 +481,30 @@ IMAGE_INSTALL:append = " systemtap-runtime"
cmd = "crosstap -r root@192.168.7.2 -s %s/process/ syscalls_by_pid.stp" % systemtap_examples
result = runCmd(cmd)
self.assertEqual(0, result.status, 'crosstap syscalls_by_pid returned a non 0 status:%s' % result.output)
+@OETestTag("runqemu")
+class RustKernel(OESelftestTestCase):
+ @classmethod
+ def setUpClass(cls):
+ super(RustKernel, cls).setUpClass()
+ cls.image = "core-image-minimal"
+
+ def test_kernel_rust_sample(self):
+ import textwrap
+ self.write_config(textwrap.dedent("""
+ KERNEL_RUST_SUPPORT = 'True'
+ KERNEL_EXTRA_FEATURES:append = ' features/kernel-sample/kernel-rust-sample.scc'
+ CORE_IMAGE_EXTRA_INSTALL += "kernel-module-rust-minimal"
+ """))
+ bitbake(self.image)
+
+ with runqemu(self.image, runqemuparams = "nographic") as qemu:
+ qemu.run_serial("dmesg -c > /dev/null")
+ status, _ = qemu.run_serial("modprobe rust_minimal")
+ #Disable status check due to intermittent failures on armhost/qemuarm64.
+ #The module loads successfully, but qemu.run_serial() occasionally
+ #returns an incorrect status.
+ #Bug report: https://bugzilla.yoctoproject.org/show_bug.cgi?id=16189
+ #self.assertEqual(status, 1, "Loading rust_minimal module failed!")
+ _, output = qemu.run_serial("dmesg")
+ self.logger.debug(f"rust_minimal dmesg output:\n" + textwrap.indent(output, " "))
+ self.assertIn("Rust minimal sample", output, "Kernel Rust sample expected output not found in dmesg")