Here's how to build your own linux kernel that can then natively read/write these
images. I've not checked to see if it still works. It worked for the first few
months of these firmware releases. This is the info that I had posted in the past.
Dan
The firmware downloads get a list of firmware from
http://firmware.makerbot.com/bwfw/list.json
and the .zip files referenced come from that same "directory".
As a side note, the new MakerWare embedded in Makerbot Desktop
has profiles for the 5th Gen bots under the name "birdwing".
So, that appears to be the platform or firmware name and the
"bwfw" in the above URL is likely "birdwing firmware".
The sole firmware file right now is
http://firmware.makerbot.com/bwfw/firmware_replicator_release_1_0_0_2.zip
Downloading that and unpacking yields four files all dated
10 March 2014,
manifest.json (291 bytes)
rootfs (91553792 bytes)
signature (230 bytes)
uImage (2788552 bytes)
That "rootfs" looks suspiciously like a "root file system" image.
But how to mount it? That's described at the end of this message.
From our mounting this rootfs, it looks like MBI is using ARM 9 and
they may be using the PRUSS (real time subsystem). Kind of a tricky
beast to use. And they appear to be using TI's angstrom linux build
which is unfortunate as the sole person maintaining it is reported to
have left TI a few months back; its future is uncertain. Also, TI's
angstrom is reportedly much more buggy than the Beaglebone variant.
And, WiFi is known to be pretty dodgy. Is WiFi working yet on the
Gen 5's? It's listed in the marketing material, but doesn't appear
in the online user manual.
Mounting the rootfs
-------------------
Using a Ubuntu 13.10 x64 Desktop virtual machine, download the kernel
sources and build them as per,
https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
But before building, modify
drivers/mtd/nand/nand_ids.c
by adding the section indicated by the diff below,
# diff -Naur nand_ids.c nand_ids.c.orig
--- nand_ids.c 2014-03-16 13:36:45.316000000 -0600
+++ nand_ids.c.orig 2014-03-16 08:57:38.476000000 -0600
@@ -44,13 +44,6 @@
{ .id = {0x98, 0xde, 0x94, 0x82, 0x76, 0x56, 0x04, 0x20} },
SZ_8K, SZ_8K, SZ_2M, 0, 8, 640},
- {"MB 1M NAND 4G 3.3V 8-bit",
- { .dev_id = 0x80 },
- .pagesize = SZ_4K,
- .chipsize = SZ_4K,
- .erasesize = SZ_1M,
- .options = SP_OPTIONS },
-
LEGACY_ID_NAND("NAND 4MiB 5V 8-bit", 0x6B, 4, SZ_8K, SP_OPTIONS),
LEGACY_ID_NAND("NAND 4MiB 3,3V 8-bit", 0xE3, 4, SZ_8K, SP_OPTIONS),
LEGACY_ID_NAND("NAND 4MiB 3,3V 8-bit", 0xE5, 4, SZ_8K, SP_OPTIONS),
[Hint: you're adding to nand_ids.c the section with the "-" marks. Leave the
"-" out.]
This change will create a new nand flash device with id 0x80, 4K block size,
and a 1MB erase block size.
To install the kernel after compiling, you can follow the BuildYourOwnKernel
directions,
# from the kernel source root directory,
cd ..
dpkg -i linux*3.11.0-18.32*.deb
then reboot. The dpkg command above may complain about linux-tools dependencies.
You like can ignore them -- we did and the world didn't end, the VM booted fine.
We did need to do an apt-get install -f to force some things since Ubuntu did
want those linux-tools after rebooting.
After Ubuntu reboots, run these commands,
apt-get install mtd-utils
mkdir /mnt/ubi
You only need to do those commands once; no need to do them each time you reboot.
Now, to load that rootfs image from the zip file,
1. Mount an SD card into your physical machine and make sure it is available
to the Ubuntu VM.
2. Move to the directory containing the rootfs file from the .zip file.
3. Run the load-rootfs.sh shell script below. It wipes the SD card,
loads the rootfs image onto it, and then mounts the SD card with that
file system at the mount point /mnt/ubi you previously created
# cat load-rootfs.sh
#!/bin/sh
modprobe nandsim first_id_byte=0x00 second_id_byte=0x80 third_id_byte=0x00 fourth_id_byte=0x00
mtdinfo /dev/mtd0
flash_erase /dev/mtd0 0 0
ubiformat /dev/mtd0 -s 4096 -O 4096
modprobe ubi
modprobe ubifs
ubiattach /dev/ubi_ctrl -m 0 -O 4096
ubimkvol /dev/ubi0 -N rootfs -s $((0x8000000))
ubiupdatevol /dev/ubi0_0 rootfs
mount -t ubifs ubi0:rootfs /mnt/ubi
Note that the device /dev/mtd0 is created by modprobe. Do not worry
that you do not see /deb/mtd0 before you run the script.
Once mounted,
# ls /mnt/ubi
4. To unmount, you can use this shell script,
# cat unload-rootfs.sh
#!/bin/sh
umount /mnt/ubi
ubidetach -d 0
modprobe -r ubifs
modprobe -r ubi
modprobe -r nandsim