Briefly, I was trying to boot using an initramfs image but it says: Uncompressing Kernel Image ... Not enough buffer for decompression LZMA ERROR 1 - must RESET board to recover
Obviously my image is smaller than the RAM (few MBs vs 128MB).
Digging inside the GPL code from TP-Link, seems that uboot does some checks reading the size of the currently flashed kernel size and expects an equal or smaller kernel to boot.
I tried to tftpboot the oem firmware and it's working,
How can I solve this problem?
I was wondering (without overwriting the original firmware), is possible to create a "fake small kernel" initramfs that loads the real openwrt image?
Something strange happens if I use ${loadaddr}. I think that ${loadaddr} is empty so uses openwrt-ar71xx-generic-archer-c7-v2-initramfs-kernel.bin as an address ...
AP135> tftpboot ${loadaddr} openwrt-ar71xx-generic-archer-c7-v2-initramfs-kernel
.bin
*** Warning: no boot file name; using '0101A8C0.img'
Using eth0 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.1
Filename '0101A8C0.img'.
Load address: 0x0
Loading: *
TFTP error: 'Operation not permitte' (1)
Starting again
Using 80060000 I have the same Not enough buffer for decompression error...
It may also be that the LZMA compression parameters at image creation cause the expand job to fail. I stumbled upon that 5 years ago with WNDR3700.
Basically the ar71xx compression parameters at image creation needed to be changed for WNDR3700 to use a slightly smaller "dictionary" size. The default was 23bit, causing it be max. 8 MB size, which semi-regularly broke decompression in Nov 2012. Restricting dictionary to 20 bits helped, and that has been the default for WNDR3700/3800 since then.
AP135> tftpboot 0x81000000 openwrt-ar71xx-generic-archer-c7-v2-initramfs-kernel.
bin
dup 1 speed 1000
Using eth0 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.1
Filename 'openwrt-ar71xx-generic-archer-c7-v2-initramfs-kernel.bin'.
Load address: 0x81000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
########################
done
Bytes transferred = 4115789 (3ecd4d hex)
AP135> bootm 0x81000000
## Booting image at 81000000 ...
Uncompressing Kernel Image ... Not enough buffer for decompression
LZMA ERROR 1 - must RESET board to recover
However I think that the problem isn't related to the position in ram... in fact if I try to tftpboot the OEM image works in every position:
AP135> tftpboot 0x81000000 archer_d7_flash_after_uboot.bin
Using eth0 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.1
Filename 'archer_d7_flash_after_uboot.bin'.
Load address: 0x81000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
##
done
Bytes transferred = 16646144 (fe0000 hex)
AP135> bootm 0x81000000
## Booting image at 81000000 ...
Uncompressing Kernel Image ... OK
Starting kernel ...
Booting QCA955x
Linux version 2.6.31--LSDK-9.5.2.18 (root@localhost.localdomain) (gcc version 4.
3.3 (GCC) ) #2 Thu Jan 21 16:05:34 CST 2016
flash_size passed from bootloader = 16
arg 1: console=ttyS0,115200
arg 2: root=31:02
arg 3: rootfstype=squashfs
arg 4: init=/sbin/init
arg 5: mtdparts=ath-nor0:128k(u-boot),1280k(kernel),14656k(rootfs),64k(radioDECT
),64k(config),64k(romfs),64k(rom),64k(radio)
arg 6: mem=128M
CPU revision is: 00019750 (MIPS 74Kc)
cpu apb ddr apb ath_sys_frequency: cpu 720 ddr 600 ahb 200
Determined physical RAM map:
memory: 02000000 @ 00000000 (usable)
User-defined physical RAM map:
memory: 08000000 @ 00000000 (usable)
Zone PFN ranges:
Normal 0x00000000 -> 0x00008000
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0: 0x00000000 -> 0x00008000
etc..
Do you know if is possible to boot another u-boot from u-boot in ram? (u-boot-inception ahah :D) I could try to compile a custom uboot and then start my initarmfs....
If you have the "go" command in your main bl, it should be possible... But you need probably a build without low level initialization...
I think there is no jtag on board?
I would use pepe2k's u-boot_mod and modify this one for your board... There are other board with the same soc, so this shouldn be that hard...
If you backup your spi flash and have a programmer you could also try to replace the factory u-boot with that.
Edit: I have to correct me, he mentions that he supports qca955x soc, but there is no board with this soc mentioned in the readme.
However if I try to boot an image without compression it says:
Uncompressing Kernel Image ... OK
Starting kernel ...
but it stops here... so probably I should give some other instruction to u-boot to start the kernel correctly. Unfortunately I can't find anything online...