1import os
2import re
3
4import infra.basetest
5
6
7class TestAarch64Pages64kBase(infra.basetest.BRTest):
8    __test__ = False
9    config = \
10        """
11        BR2_aarch64=y
12        BR2_ARM64_PAGE_SIZE_64K=y
13        BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_15=y
14        BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
15        BR2_LINUX_KERNEL=y
16        BR2_LINUX_KERNEL_CUSTOM_VERSION=y
17        BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.15.18"
18        BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
19        BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
20        BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
21        BR2_TARGET_ROOTFS_CPIO=y
22        BR2_TARGET_ROOTFS_CPIO_GZIP=y
23        """
24
25    def login(self):
26        img = os.path.join(self.builddir, "images", "rootfs.cpio.gz")
27        kern = os.path.join(self.builddir, "images", "Image")
28        self.emulator.boot(arch="aarch64",
29                           kernel=kern,
30                           kernel_cmdline=["console=ttyAMA0"],
31                           options=["-M", "virt", "-cpu", "cortex-a57", "-m", "512M", "-initrd", img])
32        self.emulator.login()
33
34    def test_run(self):
35        self.login()
36
37        cmd = "dmesg | grep 'Dentry cache'"
38        output, exit_code = self.emulator.run(cmd, 120)
39        r = re.match(r".*Dentry cache hash table entries: [0-9]* \(order: ([0-9]*), ([0-9]*) bytes.*", output[0])
40        order = int(r.group(1))
41        size = int(r.group(2))
42        self.assertEqual(2 ** order * 64 * 1024, size)
43
44
45class TestAarch64Pages64kGlibc(TestAarch64Pages64kBase):
46    __test__ = True
47    config = TestAarch64Pages64kBase.config + \
48        """
49        BR2_TOOLCHAIN_BUILDROOT_GLIBC=y
50        """
51
52
53class TestAarch64Pages64kuClibc(TestAarch64Pages64kBase):
54    __test__ = True
55    config = TestAarch64Pages64kBase.config + \
56        """
57        BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y
58        """
59
60
61class TestAarch64Pages64kMusl(TestAarch64Pages64kBase):
62    __test__ = True
63    config = TestAarch64Pages64kBase.config + \
64        """
65        BR2_TOOLCHAIN_BUILDROOT_MUSL=y
66        """
67