| |
mtd is a utility we use to write to an MTD (Memory Technology Device). Please read the Notes to learn more.
Usage: mtd [<options> ...] <command> [<arguments> ...] <device>[:<device>...]
unlock <dev> | unlock the device |
refresh <dev> | refresh mtd partition |
erase <dev> | erase all data on device |
write <imagefile>|- | write <imagefile> (use - for stdin) to device |
jffs2write <file> | append <file> to the jffs2 partition on the device |
fixtrx <dev> | fix the checksum in a trx header on first boot |
-q | quiet mode (once: no [w] on writing, twice: no status messages) |
-n | write without first erasing the blocks |
-r | reboot after successful command |
-f | force write without trx checks |
-e <device> | erase <device> before executing the command |
-d <name> | directory for jffs2write, defaults to “tmp” |
-j <name> | integrate <file> into jffs2 data when writing an image |
-o offset | offset of the image header in the partition(for fixtrx) |
-F <part>[:<size>[:<entrypoint>]][,<part>...] | alter the fis partition table to create new partitions replacing the partitions provided as argument to the write command (only valid together with the write command) |
Download linux.bin from Internet (it's not safe to do so, here is for demonstration purpose only), then write linux.bin to a MTD partition labeled as linux (could be mtd4) and reboot afterwards:
cd /tmp wget http://www.example.org/linux.bin mtd -r write /tmp/linux.bin linux
Tested on Marvell EspressoBinBoard based on MVEBU, (see forum topic)
Download flash-image.bin for your specific hardware from SnapShots
You can checks your mtd partitions from proc :
root@EBIN:~# cat /proc/mtd dev: size erasesize name mtd0: 003f0000 00010000 "firmware" mtd1: 00010000 00010000 "u-boot-env"
(it's not safe to do so, here is for demonstration purpose only),
then write flash-image.bin to a MTD partition labeled as spi0.0 (could be mtd0 or firmware) and reboot afterwards :
cd /tmp wget https://downloads.openwrt.org/snapshots/targets/mvebu/cortexa53/trusted-firmware-a-espressobin-v7-1gb/flash-image.bin mtd -r write /tmp/flash-image.bin /dev/mtd0
mtd can even be used with vendor-firmware, as long as the kernel had mtd-support and not using something “home-brewed”. When the vendor is not shipping the binary it can probably transferred via scp, netcat, tftp, ftp, httponto the board. The original binary from the OpenWrt-package might not run on the vendor-os, but linking it static should do the trick.
With OpenWrt-21.02 I was using a small hack to to let the buildroot create a static binary:
sed -i -e "s/^LDFLAGS += /LDFLAGS += -static /" package/system/mtd/src/Makefile make package/mtd/compile
This patches the mtd source to include the “-static” option when building the binary. This way the binary gets all dependent library-code embedded to make it run itself, as long as the correct CPU-target is used. The new binary can be extracted from the resulting package or just copied from build_dir/target-<ARCH>/linux-<TARGET>-<SUBTARGET>/mtd.