import os import subprocess import infra.basetest def jffs2dump_find_file(files_list, fname): for file_name in files_list: file_name = file_name.strip() if file_name.startswith("Dirent") and file_name.endswith(fname): return True return False class TestJffs2(infra.basetest.BRTest): config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \ """ BR2_TARGET_ROOTFS_JFFS2=y BR2_TARGET_ROOTFS_JFFS2_CUSTOM=y BR2_TARGET_ROOTFS_JFFS2_CUSTOM_EBSIZE=0x80000 BR2_TARGET_ROOTFS_JFFS2_NOCLEANMARKER=y BR2_TARGET_ROOTFS_JFFS2_PAD=y BR2_TARGET_ROOTFS_JFFS2_PADSIZE=0x4000000 # BR2_TARGET_ROOTFS_TAR is not set """ # TODO: there are some scary JFFS2 messages when one starts to # write files in the rootfs: "jffs2: Newly-erased block contained # word 0x0 at offset 0x046c0000". To be investigated. def test_run(self): img = os.path.join(self.builddir, "images", "rootfs.jffs2") out = subprocess.check_output(["host/usr/sbin/jffs2dump", "-c", img], cwd=self.builddir, env={"LANG": "C"}) out = out.splitlines() self.assertTrue(jffs2dump_find_file(out, "busybox")) self.emulator.boot(arch="armv7", kernel="builtin", kernel_cmdline=["root=/dev/mtdblock0", "rootfstype=jffs2"], options=["-drive", "file={},if=pflash".format(img)]) self.emulator.login() cmd = "mount | grep '/dev/root on / type jffs2'" _, exit_code = self.emulator.run(cmd) self.assertEqual(exit_code, 0)