Re: WRT54GX-v2 support

Jsilicon: Only just now saw your replies, for some reason the forum didn't email me about them.  Good to see somebody taking another look at this - have you made any further progress?

102 (edited by _Peter_ 2008-09-17 18:07:02)

Re: WRT54GX-v2 support

To understand the .bix-format, inspect the last lines of
WRT54GX_ALL_Realtek/vendors/Realtek/RTL865XB/Makefile
in the WRT54GX_V2_2.00.20.tar.gz -archive (Linksys.com GPL-code for WRT54GX v2).

The last steps are:
...
Make a compressed rom file system -> cramfs.img
Copy vmlinux to kernel bin
Zip kernel.bin -> kernel.bin.gz
Add header -> kernel.bix
    (24-bytes in front of kernel.bin.gz)
Combine kernel.bix and cramfs.img, padding zeros -> run_tmp.bin
    (It has the form [kernel.bix0000...0000cramfs.img],
     size: CONFIG_FLASH_SIZE_OF_KERNEL - size(Header) + size(cramfs.img))
Split run_tmp.bin, pad FFFF... -> run.bin
    (Split at 0x(3E0000-18) FFFF...FFFF  continued at 0x(3E1000-18),
     form [run_tmpPART1.binFFFF...FFFFrun_tmpPART2.bin]
Add header -> run.bix ( = WRT54GX_V2_EU_2.00.20.bix)
    (24-bytes in front of run.bin)

Commands                                               Result                      Size
mkcramfs    $(ROMFSDIR)  cramfs.img     :  -> cramfs.img        (3248128 0x319000)
cp vmlinux  kernel.bin                                :  -> kernel.bin          (2685952 0x28FC00)
gzip -9f kernel.bin                                      :  -> kernel.bin.gz      (994749 0xF2DBD)
packbin  kernel.bin.gz  r  0  kernel.bix         :  -> kernel.bix           (994774 0xF2DD6)
kfspad  kernel.bix  $(KERNEL_FLASH_SIZE)  cramfs.img  run_tmp.bin
                                                                :  -> run_tmp.bin        (4296680 0x418FE8)
packer  run.bin 0=run_tmp.bin,0,3e0000-18  0x3e1000-18=run_tmp.bin,3e0000-18
                                                                :  -> run.bin               (4300776 0x419FE8)
packbin  run.bin  k  0  run.bix                      :  -> run.bix               (4300800 0x41A000)


Header: Size (24 0x18)
  .productMagic         4byte    : (0x 59 A0 E8 42)   
  .imageType            2byte
  .imageHdrVer         1byte
  .reserved1              1byte
  .date                      4byte       : (dateofday)
  .time                      4byte       : (timeofday)
  .imageLen              4byte       : (imgSize)
  .reserverd2             2byte
  .imageBdyCksm     1byte        : checksum ^= image
  .imageHdrCksm      1byte       : checksum ^= header

Sources for packer, packerbin and kfspad in /WRT54GX_ALL_Realtek/tools/...
Header-declaration also in WRT54GX_ALL_Realtek/user/httpds/LINUX/rtl_image.h
Checksum-calculation in packbin.c

WRT54GX_V2_EU_2.00.20.bix:
Header (run.bix)       59 A0 EB 42 ...        0              - 24              0             - 0x18
Header (kernel.bix)   59 A0 EB 42 ...        25            - 48              0x18        - 0x30
Kernel.bin.gz            1F 8B 08 08 ...        49            - 994797       0x31        - 0xF2DED
0000...                    00 00 00 00 ...          994798                         0xF2DEE
...0000                     .. 00 00 00                              - 1048576                     - 0x100000
cramfs.img (part 1)   45 3D CD 28 ...        1048577  - 4063231      0x100001  - 0x3DFFFF
FFFF...                   FF FF FF FF ...         4063232  -                   0x3E0000
...FFFF                    .. FF FF FF                            - 4067327                      - 0x3E0FFF
cramfs.img (part 2)   4E 55 F4 62 ...          4067328  - 4300800      0x3E1000 - 0x41A000

To get the cramfs.img -filesystem-image in WRT54GX_V2_EU_2.00.20.bix:
Start at the end of the 0000...0000-block and remove the FFFF...FFFF-block -> cramfs.img

dd bs=1 skip=1048576 count=3014656 if=WRT54GX_V2_EU_2.00.20.bix of=cramfs_1.img
dd bs=1 skip=4067328 if=WRT54GX_V2_EU_2.00.20.bix of=cramfs_2.img
cat cramfs_1.img cramfs_2.img >cramfs.img
mount -t cramfs -o loop cramfs.img /mnt

The source-code of the ROME-loader is not part of WRT54GX_V2_2.00.20.tar.gz but can be found in
Belkin_RTL8651B/loader_srcroot/...
in the GPL-F5D8230-v2-2.00.xx.tgz -archive (Belkin.com GPL-code for F5D8230-4 v2 70MB).