openwrt/tools
Bjørn Mork 48cad07a55 firmware-utils: zytrx: Add util for ZyXEL specific header
The ZyXEL NR7101 prepend an additional header to U-Boot images. This
header use the TRX magic 0x30524448 (HDR0), but is incompatible with
TRX images.

This code is reverse-engineered based on matching 32 bit numbers
found in the header with lengths and different checksum
calculations of the vendor images found on the device.  The result
was matched against the validation output produced by the
bootloader to name the associated header fields.

Example bootloader validation output:

 Zyxel TRX Image 1 --> Found!  Header Checksum OK
 ============ZyXEL header information==================
         chipId             : MT7621A
         boardId            : NR7101
         modelId            : 07 01 00 01
         kernel_len         : (14177560)
         kernelChksum       : (0x8DD31F69)
         swVersionInt       : 1.00(ABUV.0)D1
         swVersionExt       : 1.00(ABUV.0)D1

 Zyxel TRX Image 2 --> Found!  Header Checksum OK
 ============ZyXEL header information==================
         chipId             : MT7621A
         boardId            : NR7101
         modelId            : 07 01 00 01
         kernel_len         : (14176660)
         kernelChksum       : (0x951A7637)
         swVersionInt       : 1.00(ABUV.0)D0
         swVersionExt       : 1.00(ABUV.0)D0

 =================================================
 Check image validation:
 Image1 Header Magic Number --> OK
 Image2 Header Magic Number --> OK
 Image1 Header Checksum --> OK
 Image2 Header Checksum --> OK
 Image1 Data Checksum --> OK
 Image2 Data Checksum --> OK
 Image1 Stable Flag --> Stable
 Image1 Try Counter --> 0
 Image1: OK
 Image2: OK

The coverage and algorithm for the kernelChksum field is unknown.
This field is not validated by the bootloader or the OEM firmware
upgrade tool. It is therefore set to a static value for now.

The swVersion fields contain free form string values.  The OEM firmware
use ZyXEL structured version numbers as shown above.  The strings are
not interpreted or validated on boot, so they can be repurposed for
anything we want the bootloader to display to the user.  But the OEM
web GUI fails to flash images with freeform strings.

The purpose of the other strings in the header is not known.  The
values appear to be static.  We assume they are fixed for now, until
we have other examples.  One of these strings is the platform name,
which is taken as an input parameter for support other members of
the device family.

Signed-off-by: Bjørn Mork <bjorn@mork.no>
2021-05-09 09:15:44 +02:00
..
autoconf treewide: clean up download hashes 2016-12-16 22:39:22 +01:00
autoconf-archive tools: add autoconf-archive 2020-05-20 15:37:16 +02:00
automake tools/automake: Revert "Do not use $(V) - force AM_V=1" 2019-11-06 00:21:15 +01:00
b43-tools tools/b43-tools/b43-fwsquash: convert to Python 3 with 2-to-3 2019-07-26 08:09:16 +02:00
bc tools/bc: use autoreconf to fix build failure on macOS with recent Xcode versions 2020-11-14 14:48:30 +01:00
bison tools/bison: update to 3.7.4 2020-11-21 18:49:08 +01:00
cbootimage treewide: update email address of Tomasz Maciej Nowak 2020-11-24 15:39:07 +01:00
cbootimage-configs treewide: update email address of Tomasz Maciej Nowak 2020-11-24 15:39:07 +01:00
ccache ccache: update to 4.2.1 2021-04-23 20:57:33 +02:00
cmake tools/cmake: always use non-ccache CC and CXX variables 2021-01-06 21:44:56 -10:00
coreutils tools/coreutils: update to 8.32 2020-08-30 22:21:34 +02:00
cpio tools: add cpio 2021-02-28 00:09:09 +00:00
dosfstools add PKG_CPE_ID ids to package and tools 2017-11-17 02:24:35 +01:00
e2fsprogs tools/e2fsprogs: fix build under macos 2020-04-10 11:52:00 +01:00
elftosb treewide: clean up download hashes 2016-12-16 22:39:22 +01:00
expat tools/expat: update to 2.2.10 2020-11-21 18:48:39 +01:00
fakeroot download: add mirror alias for Debian 2021-02-26 20:41:00 +01:00
findutils tools/findutils: Update to 4.7.0 2020-04-09 22:08:38 +02:00
firmware-utils firmware-utils: zytrx: Add util for ZyXEL specific header 2021-05-09 09:15:44 +02:00
flex flex: Add a lex symlink 2018-11-25 19:23:03 +01:00
flock tools/flock: add PKG_{VERSION,RELEASE} 2020-07-23 11:30:22 +02:00
genext2fs treewide: clean up download hashes 2016-12-16 22:39:22 +01:00
gengetopt tools/gengetopt: Update to 2.23 2019-07-08 16:42:26 +02:00
gmp tools/gmp: update to 6.2.1 2020-11-21 18:49:17 +01:00
include build: fix kernel 5.4 on macos 2020-03-14 13:20:06 +00:00
isl tools/isl: update to 0.20 2019-02-26 23:20:04 +01:00
kernel2minor tools: kernel2minor: update to latest version 2018-07-12 18:15:33 +02:00
libressl ccache: update to 4.1 2020-12-31 10:03:21 +01:00
libtool add PKG_CPE_ID ids to package and tools 2017-11-17 02:24:35 +01:00
lzma treewide: unify OpenWrt hosted source via @OPENWRT 2021-02-05 12:00:24 -10:00
lzma-old treewide: unify OpenWrt hosted source via @OPENWRT 2021-02-05 12:00:24 -10:00
m4 tools: m4: fix compilation with glibc 2.28 2018-08-10 06:29:32 +02:00
make-ext4fs make_ext4fs: Update to version 2020-01-05 2020-01-05 20:04:37 +01:00
missing-macros treewide: remove empty default cases 2020-09-17 12:46:19 +02:00
mkimage tools: mkimage: add patches for 64-bit MediaTek BootROM 2021-03-11 16:24:20 +00:00
mklibs download: add mirror alias for Debian 2021-02-26 20:41:00 +01:00
mm-macros tools/mm-macros: Update to 1.0.0 2020-04-09 22:09:21 +02:00
mpc tools/mpc: update to 1.2.1 2020-11-21 18:49:27 +01:00
mpfr tools/mpfr: update to 4.1.0 2020-08-23 19:40:32 +02:00
mtd-utils tools: mtd-utils: Update to version 2.1.2 2020-08-26 23:29:35 +02:00
mtools tools/mtools: Update to 4.0.24 2020-04-09 22:09:04 +02:00
padjffs2 tools: drop PKG_VERSION for purely local packages 2020-07-23 10:54:33 +02:00
patch tools/patch: apply upstream patch for cve-2019-13638 2019-08-13 10:00:10 +02:00
patch-image rb532: drop target 2020-09-02 16:29:22 +02:00
patchelf tools/patchelf: bump to use latest master 2021-02-15 07:12:51 +01:00
pkgconf ccache: update to 4.1 2020-12-31 10:03:21 +01:00
quilt tools/quilt: update to 0.66 2019-11-24 21:35:45 +01:00
sdimage tools/sdimage: Fix build with host Linux headers < 3.18 2018-12-16 14:03:35 +01:00
sed tools/sed: Update to 4.8 2020-02-18 21:39:14 +01:00
sparse tools/sparse: update to version 0.6.3 2021-03-19 00:59:22 +01:00
squashfs squashfs: Fix compile with GCC 10 2020-05-24 14:38:40 +02:00
squashfskit4 tools/squashfskit4: fix build on non-linux systems 2020-09-01 17:01:56 +02:00
sstrip tools/sstrip: update to latest version 2020-11-26 12:44:25 -10:00
tar tools: tar: update to version 1.32 2019-03-10 21:36:28 +01:00
xxd tools/xxd: fix source URL 2021-03-01 16:39:17 +00:00
xz tools/xz: Update to 5.2.5 2020-04-09 22:09:13 +02:00
zip tools: zip: add option for reproducible archives 2019-01-15 19:11:53 +01:00
zlib tools: zlib: do not hardcode the install prefix in zlib.pc 2018-05-24 17:07:10 +02:00
zstd tools/zstd: compile with cmake 2021-01-30 18:14:50 -10:00
Makefile tools/libelf: remove unneeded host library 2021-03-13 22:20:02 +00:00