Help Needed: Recovering TP-Link EAP225-Outdoor v3 via U-Boot After Wrong Firmware Flash
Hi everyone,
I'm currently trying to recover a TP-Link EAP225-Outdoor v3 access point that became semi-bricked after flashing the wrong firmware.
This topic was written with the help of ChatGPT to clearly explain my situation and get accurate support.
Current status:
The device powers on, and I have full access to the U-Boot console via serial connection .
I can use U-Boot commands like tftpboot, erase, cp.b, etc.
However, the system does not boot — attempting bootm results in errors like "Bad Magic Number" .
No network or web access is available; only serial console is working.
How I got here:
I was experimenting with OpenWRT and mistakenly flashed an incompatible firmware .
I still have the original TP-Link firmware file:
EAP225-OUTDOORv3_5.1.11_[20250401-rel50587]_up_signed.bin
I tried loading it via tftpboot in U-Boot and flashing it to different offsets (0x9f050000, etc.), but the device won't boot properly.
I also tried different RAM load addresses like 0x80060000, 0x81000000, and ran into Bad Magic Number on bootm.
Questions:
Does the OEM firmware need to be renamed or converted (e.g., to .img or uImage) for U-Boot to accept it?
What image format does bootm expect on this device? Is the TP-Link .bin signed and therefore rejected?
Is it safe to flash directly to 0x9f000000, or should I respect offsets like 0x9f050000 to avoid overwriting the bootloader?
I'm looking for advice on:
How to properly format or prepare the firmware to be bootable from RAM (tftpboot + bootm)
Whether there’s an OpenWRT stripped/factory image that could be flashed directly from U-Boot
Tips on recovering from this specific state
Any help or shared experience would be greatly appreciated !
HI frollic i tried this solution but the system keeps loading
Loadin . text 0x80060000 (6d0133 hex) 2619275 b es
also i tried bootm but show bad magic number, which firmware i need load , i tried openwrt initramfs kernel , sysupgrade and firmware
Post your complete u-boot session, use the </> button when you do, it makes the text more readable.
yes thanks, this is my uboot session
U-Boot 1.1.4--LSDK-10.2-00082-4-gfc48af86 (Nov 14 2021 - 12:06:52)
board956x - Dragonfly 1.0DRAM:
sri
ath_ddr_initial_config(287): (ddr2 init)
ath_ddr_initial_config: DDR_EMR2_ADDRESS=0x180000bc, EMR2 value=0x80
ath_sys_frequency: ref_clk 25000000
ath_sys_frequency: cpu 775 ddr 650 ahb 258
Tap values = (0x11, 0x11, 0x11, 0x11)
128 MB
Top of RAM usable for U-Boot at: 88000000
Reserving 165k for U-Boot at: 87fd4000
Reserving 192k for malloc() at: 87fa4000
Reserving 44 Bytes for Board Info at: 87fa3fd4
Reserving 36 Bytes for Global Data at: 87fa3fb0
Reserving 128k for boot params() at: 87f83fb0
Stack Pointer at: 87f83f98
Now running in RAM - U-Boot at: 87fd4000
Flash Manuf Id 0x1c, DeviceId0 0x70, DeviceId1 0x18
flash size 16MB, sector count = 256
Flash: 16 MB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Setting 0x181162c0 to 0x30602100
Hit Ctrl+B to stop autoboot: 0
## No elf image at address 0x9f040000
Net: ath_gmac_enet_initialize...
No valid address in Flash. Using fixed address
athr_mgmt_init ::done
Dragonfly ----> S17 PHY *
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
RTL8211 PHY reg init
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
Max resets limit reached exiting...
athr_gmac_sgmii_setup SGMII done
: cfg1 0x80000000 cfg2 0x7114
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
eth0 up
eth0
ath>
That looks like the standard boot sequence, not your session...
Maybe this sorry
U-Boot 1.1.4--LSDK-10.2-00082-4-gfc48af86 (Nov 14 2021 - 12:06:52)
board956x - Dragonfly 1.0DRAM:
sri
ath_ddr_initial_config(287): (ddr2 init)
ath_ddr_initial_config: DDR_EMR2_ADDRESS=0x180000bc, EMR2 value=0x80
ath_sys_frequency: ref_clk 25000000
ath_sys_frequency: cpu 775 ddr 650 ahb 258
Tap values = (0x11, 0x11, 0x11, 0x11)
128 MB
Top of RAM usable for U-Boot at: 88000000
Reserving 165k for U-Boot at: 87fd4000
Reserving 192k for malloc() at: 87fa4000
Reserving 44 Bytes for Board Info at: 87fa3fd4
Reserving 36 Bytes for Global Data at: 87fa3fb0
Reserving 128k for boot params() at: 87f83fb0
Stack Pointer at: 87f83f98
Now running in RAM - U-Boot at: 87fd4000
Flash Manuf Id 0x1c, DeviceId0 0x70, DeviceId1 0x18
flash size 16MB, sector count = 256
Flash: 16 MB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Setting 0x181162c0 to 0x30602100
Hit Ctrl+B to stop autoboot: 0
## No elf image at address 0x9f040000
Net: ath_gmac_enet_initialize...
No valid address in Flash. Using fixed address
athr_mgmt_init ::done
Dragonfly ----> S17 PHY *
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
RTL8211 PHY reg init
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
Max resets limit reached exiting...
athr_gmac_sgmii_setup SGMII done
: cfg1 0x80000000 cfg2 0x7114
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
eth0 up
eth0
ath> printenv
bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdpar ts=ath-nor0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mib0), 64k(ART)
bootcmd=bootelf 0x9f040000
bootdelay=2
baudrate=115200
ethaddr=0x00:0xaa:0xbb:0xcc:0xdd:0xee
ipaddr=192.168.1.1
serverip=192.168.1.10
dir=
lu=tftp 0x80060000 ${dir}u-boot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize
lf=tftp 0x80060000 ${dir}board956x${bc}-jffs2&&erase 0x9f050000 +0xE30000&&cp.b $fileaddr 0x9f050000 $filesize
lk=tftp 0x80060000 ${dir}vmlinux${bc}.lzma.uImage&&erase 0x9fe80000 +$filesize&& cp.b $fileaddr 0x9fe80000 $filesize
stdin=serial
stdout=serial
stderr=serial
ethact=eth0
Environment size: 690/65532 bytes
ath> d
Unknown command 'd' - try 'help'
ath>
ath> tftpboot 0x80060000 openwrt-24.10.2-ath79-generic-tplink_eap225-v3-initramfs-kernel.bin
Trying eth0
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
dup 1 speed 1000
Using eth0 device
TFTP from server 192.168.1.10; our IP address is 192.168.1.1
Filename 'openwrt-24.10.2-ath79-generic-tplink_eap225-v3-initramfs-kernel.bin'.
Load address: 0x80060000
Loading: T #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###########################
done
Bytes transferred = 6789232 (679870 hex)
ath> bootelf 0x80060000
Loading .text @ 0x80060000 (6784722 bytes)
mk24
July 31, 2025, 4:11pm
8
First off you are still using the wrong firmware. There are two EAP225 models, and the outdoor one is a different build than the other EAP225, which is a wall-mounted indoor AP. Look for outdoor-v3 in the file name.
Give tftpboot a load address of 82000000 not 80060000. And use bootm 82000000 not bootelf. This should result in OpenWrt booting in RAM. From there transfer the correct sysupgrade image to OpenWrt and use sysupgrade to install it.
i understood sorry im confused i tried but
ath> tftpboot 0x82000000 openwrt-24.10.2-ath79-generic-tplink_eap225-outdoor-v3-squashfs-sysupgrade.bin
Trying eth0
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
dup 1 speed 1000
Using eth0 device
TFTP from server 192.168.1.10; our IP address is 192.168.1.1
Filename 'openwrt-24.10.2-ath79-generic-tplink_eap225-outdoor-v3-squashfs-sysupgrade.bin'.
Load address: 0x82000000
Loading: T #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###############################
done
Bytes transferred = 7143747 (6d0143 hex)
ath> bootm 0x82000000
## Booting image at 82000000 ...
Bad Magic Number
ath>
Unknown command '' - try 'help'
ath> bootm 82000000
## Booting image at 82000000 ...
Bad Magic Number
ath>
mk24
July 31, 2025, 6:32pm
10
Use the initramfs file to boot from memory using tftp. You tried the sysupgrade.
stil
ath> tftpboot 0x82000000 openwrt-24.10.2-ath79-generic-tplink_eap225-outdoor-v3-initramfs-kernel.bin
Trying eth0
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
Using eth0 device
TFTP from server 192.168.1.10; our IP address is 192.168.1.1
Filename 'openwrt-24.10.2-ath79-generic-tplink_eap225-outdoor-v3-initramfs-kernel.bin'.
Load address: 0x82000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###########################
done
Bytes transferred = 6789232 (679870 hex)
ath> bootm 0x82000000
## Booting image at 82000000 ...
Bad Magic Number
ath> tftp 0x82000000 initramfs.bin
Trying eth0
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
Using eth0 device
TFTP from server 192.168.1.10; our IP address is 192.168.1.1
Filename 'initramfs.bin'.
Load address: 0x82000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###########################
done
Bytes transferred = 6789232 (679870 hex)
ath> bootm 0x82000000
## Booting image at 82000000 ...
Bad Magic Number
As pointed by @frollic try these commands:
tftp 0x80800000 initramfs.bin
bootelf $fileaddr
Both initramfs and sysupgrade have elf format. bootm command expect uimage header.
1 Like
Hi 123serge123 i tried but now the console show this
ath> tftp 0x80800000 initramfs.bin
Trying eth0
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
dup 1 speed 1000
Using eth0 device
TFTP from server 192.168.1.10; our IP address is 192.168.1.1
Filename 'initramfs.bin'.
Load address: 0x0
Loading: T #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###########################
done
Bytes transferred = 6789232 (679870 hex)
ath> bootelf $fileaddr
Loading .text @ 0x80060000 (6784722 bytes)
OpenWrt kernel loader for AR7XXX/AR9XXX
Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
Decompressing kernel... failed, data error!
System halted!
mk24
August 1, 2025, 3:01pm
14
Using a low address causes data error as uncompressed data overwrites the compressed image before it is complete. Use 0x82000000 as the file load address. This is ~32 MB away from where the uncompressed kernel will reside at 80060000.
well
ath> tftp 0x82000000 initramfs.bin
Trying eth0
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
PHY ID: 0xffffffff
PHY ID: 0x1cc916
PHY ID: 0x1cc916
ath_reg_rd(0x1804006c)=82
ath_reg_rd(0x1804006c)=82
dup 1 speed 1000
Using eth0 device
TFTP from server 192.168.1.10; our IP address is 192.168.1.1
Filename 'initramfs.bin'.
Load address: 0x82000000
Loading: T #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###########################
done
Bytes transferred = 6789232 (679870 hex)
ath> bootelf 0x82000000
Loading .text @ 0x80060000 (6784722 bytes)
## Starting application at 0x80060000 ...
OpenWrt kernel loader for AR7XXX/AR9XXX
Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
Decompressing kernel... on(){return _('PPPoE');}
still
hi guys this is de md of tftp direction, what means? :
ath> md 0x80060000
80060000: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
80060010: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
80060020: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
80060030: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
80060040: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
80060050: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
80060060: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
80060070: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
80060080: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
80060090: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
800600a0: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
800600b0: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
800600c0: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
800600d0: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
800600e0: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
800600f0: 339a339a 339a339a 339a339a 339a339a 3.3.3.3.3.3.3.3.
Just for test try older versions of initramfs.bin
Can you try files fron [url=https://disk.yandex.ru/d/qntlga9NH3Vh5A\ ]this archive[/url]
To restore use these commands:
tftpboot 80060000 k24.raw
go 80060000
I have a EAP225 v3 (not the outdoor model) and I am in the exact same boat. I’m trying to figure out if/how I can save this thing from the trash.
I have serial (TTL) up and running and a working tftp server. I’ve tried pretty much everything that @charlesff did and have had the exact same results.
Just wondering if anybody was ever able progress with recovering via u-boot?