1
0
Fork 0
Single static binary bootloader updater using MTD. Written in zig
Go to file
Shawn Nock 850c1b584d Readme massaging 2020-01-13 15:58:39 -05:00
bin Working version 2020-01-13 13:30:48 -05:00
src Removes unused cImport 2020-01-13 15:54:16 -05:00
.gitignore Adds gitignore 2020-01-13 14:05:05 -05:00
LICENSE Removes unused cImport 2020-01-13 15:54:16 -05:00
README.md Readme massaging 2020-01-13 15:58:39 -05:00
build.zig Rename binary for clarity 2020-01-13 13:38:14 -05:00
mtd-magic.c Adds readme, license and small program to dump mtd ioctl magic 2020-01-13 15:52:55 -05:00

README.md

update-uboot: Self-contained, Online u-boot updater

update-uboot is a completely self-contained way to update u-boot. The generated binary includes the updated u-boot binary and Linux kernel module to allow rw access to the (often protected) /dev/mtd0 partition.

Installation

  1. Install zig (https://ziglang.org/download/)
  • Requires sentinel-terminated slices, only in master (as of 2020-01-13) or 0.6.0+
  1. git clone https://git.sr.ht/~monadnock/zig-mtd

  2. zig build

Modification

This code only currently supports mipsel out of the box. The only parts specific to mipsel are:

  • mtd-rw.ko; The embedded kernel module is compiled for mipsel. You can replace this file with a version compiled for your arch, or comment out the function if you don't require it.

  • uboot-feb2019.bin: Same story. This is the version of u-boot I needed for mt7628 product. You'll almost certainly want to replace this file. Ask your doctor what version of u-boot is right for you

  • The ioctl numbers used to ERASE and UNLOCK the mtd are arch specific

    zig couldn't grok the nested ioctl #define horrors from the mtd headers. The easiest way I've found to determine these magic numbers is to compile the mtd-magic.c file in the repo with your target toolchain and run it on the target. It'll print out the macro expansions (e.g. mipsel-openwrt-linux-gcc -o mtd-magic mtd-magic.c)