[E3-hacking] Config / content filesystem

Jonathan McDowell noodles at earth.li
Thu Apr 18 11:58:11 BST 2019


On Wed, Apr 17, 2019 at 01:26:40PM +0000, Nick Griffin wrote:

> Do you remember if you were able to mount the Cramfs and look at its
> filesystem..?  What's Q;Q; blocks in flash, another files system…?
> Can’t find any info on it, were you able to mount that too. So does it
> have 2 partitions on mtd4 then..?

You need to remember the E3 dates from a time when embedded Linux
systems were a lot simpler, and the E3 was designed to be a low cost
platform (even allowing for the subsidy). It doesn't have the sort of
NAND setup seen on modern systems; it simply didn't have the resources.

So, the MTD partitions do not directly map to a kernel or a Linux
filesystem. The "Q;Q;" blocks are an Amstrad specific way of putting
data into those partitions, with a type + description associated with
each one. For example the kernel lives in a Q;Q; block in mtd3 called
"LINUX". mtd3 also has Q;Q; blocks for LDR (the second stage boot
loader), and PARMS (the kernel boot parameters).

The CRAMFS filesystem is in mtd4; Q;Q; block name "LNXFSYS". There are 2
of them (I imagine to allow for an active + fallback). There are various
other bits of content in mtd4 too - you can see them by doing:

 hexdump -C e3-nand-backup.4 | grep -A 1 "Q;Q;"

Finally the nanddump files have 16 bytes of out of band (OOB) data per
512 byte block, so if you want something that might be writable back to
the flash you need to strip those out. The attached Python should do the
trick:

 nand-oob-strip e3-nand-backup.0 e3-nand.0

will dump out e3-nand.0 with the OOB data stripped.

J.

-- 
    One-seventh of your life is    |  .''`.  Debian GNU/Linux Developer
         spent on Monday.          | : :' :  Happy to accept PGP signed
                                   | `. `'   or encrypted mail - RSA
                                   |   `-    key on the keyservers.
-------------- next part --------------
#!/usr/bin/python3

import sys

if len(sys.argv) < 3:
    print("Must provide filename to dump + file to write.")
    sys.exit(-1)

with open(sys.argv[1], mode="rb") as infile:
    with open(sys.argv[2], mode="wb") as outfile:
        data = infile.read()
        ofs = 0
        while ofs < len(data):
            outfile.write(data[ofs:ofs + 512])
            ofs += (512 + 16)


More information about the e3-hacking mailing list