Flashing linear flash cards – quick notes

I recently bought an HP OmniBook 430 that needed a system ROM card, which has to be on a linear flash card.

Creating such a card, however, was a bit of an ordeal, so I’ll quickly document what exactly I did.

Ultimately, I used a ThinkPad 365XD, but the card I used would’ve been usable on most any laptop with PCMCIA. (I tried a Fujitsu Lifebook P1620, as well, but had trouble with finding sufficiently old Linux that worked with its hardware… although now I think I could have used something more modern, now that I know what I was doing wrong.) I used a Viking Technology 24 MiB card, that was an Intel Value Series 200 card. This is a 3.3/5 volt read, 3.3/5 volt program card, using Intel StrataFlash, or what we’d now refer to as MLC flash. Complicating matters, this card did not have attribute memory, and was completely blank, meaning that many tools couldn’t automatically figure out what it was. (I’m still not sure if it’ll actually work in the target device, partially because of being Value Series 200 – if not, I’ve ordered a Series 2+ card, which is likely a better choice anyway – but my goal here was to successfully program it, and that’s definitely been done.) And, for software, I used Damn Small Linux 4.4.10, plus the DSL MTD kernel modules from here.

In a root terminal, I issued the following commands, after saving mtd-modules.tgz in /home/dsl/.

cd /
tar -xzf mtd-modules.tgz
depmod
modprobe pcmciamtd buswidth=2 force_size=24 vpp=50 setvpp=1
modprobe mtdchar
rm /etc/pcmcia/config
cp /KNOPPIX/etc/pcmcia/config /etc/pcmcia/config
nano /etc/pcmcia/config

(OK, in reality, I issued a bunch of other commands, but those are the ones that were actually important, I think.)

At this point, I added two lines near the beginning of the file:

device "pcmciamtd"
  class "memory" module "pcmciamtd"

Then, I changed the binding of Anonymous Memory from memory_cs to pcmciamtd, later in the file.

After saving that, killing cardmgr, and relaunching it, I found that /proc/mtd listed the device, and dmesg showed that it was configured (and that CFI had successfully figured out what kind of flash chip it was working with)… but there was no device node. Apparently MTD didn’t actually make nodes automatically, back then, so a quick mknod /dev/mtd0 c 90 0 took care of it. At that point, I could simply cat the firmware image to /dev/mtd0, and it flashed it successfully, which could be verified by ejecting the card, reinserting it, recreating the device node, and running cat on that device node.

Hopefully, if someone needs this, it’s available as a reference now.