OpenWRT on TP-Link TL-WR743ND

TP-Link TL-WR743ND is the PoE brother of the common TL-WR741ND wireless router which is supported flawlessly by openwrt. Since I’ve got one WR743ND, I wanted to convert it into a useful OpenWRT router but I figured out that, unfortunately, the WR743ND is not supported by OpenWRT (at least officially). Given the similarity to the supported WR741ND, I’ve decided to hack it a bit to get it work with OpenWRT.

The first step is to get a working serial console. The procedure is similar to the one shown in the openwrt’s page dedicated to the WR741ND with the exception that (at least on the WR743ND which I got) the capacitor C496 and the resistor R610 were missing, so it was necessary to:

  1. Shortcut the C496 pins
  2. Solder a 2.7K resistor in place of R610 (I think short circuit would work as well — untested)

Follows a photo (low resolution, sorry) indicating where the soldering should be made:

Be aware that this hack requires some attention given the tiny dimension of SMD components.

Next step is to connect to the console via a serial cable and level converter. In my case I’ve assembled some circuitry with a MAX232 which was externally powered with 5v. Since the TX pin of the router is providing a positive level at 3.3v there is no issue with the MAX232 which is able to recognize the logic level, on contrary with the RX line we should care to not send +5v to the router which is using 3.3v logic levels (it may burn the router?). To accomplish that I’ve used a zener diode shunt to clamp the signal at 3.3v.

The whole thing was connected via a Profilic 232-to-USB adapter.

To test  the serial link connection, just boot the router and blind type tpl when the autoboot prompt is shown. The U-Boot loader will show a > prompt:

U-Boot 1.1.4 (Jan 18 2010 - 14:26:54)

AP91 (ar7240) U-boot
DRAM:
sri
#### TAP VALUE 1 = a, 2 = b
32 MB
id read 0x100000ff
flash size 4194304, sector count = 64
Flash:  4 MB
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   ag7240_enet_initialize...
No valid address in Flash. Using fixed address
: cfg1 0xf cfg2 0x7014
eth0: 00:03:7f:09:0b:ad
eth0 up
No valid address in Flash. Using fixed address
: cfg1 0xf cfg2 0x7214
eth1: 00:03:7f:09:0b:ad
ATHRS26: resetting s26
ATHRS26: s26 reset done
eth1 up
eth0, eth1
Autobooting in 1 seconds
tlp
ar7240>

Now that the console is working it’s time to proceed with the flashing. Download openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin from the OpenWRT website and have it published by a tftp server in your local network. Then connect the router to such a network and issue the following commands (here the tftp server is 192.168.1.45):

ar7240> setenv ipaddr 192.168.1.60
ar7240> setenv serverip 192.168.1.45
ar7240> printenv
bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ar7240-nor0:256k(u-boot),64k(u-boot-env),2752k(rootfs),896k(uImage),64k(NVRAM),64k(ART)
bootcmd=bootm 0x9f020000
bootdelay=1
baudrate=115200
ethaddr=0x00:0xaa:0xbb:0xcc:0xdd:0xee
stdin=serial
stdout=serial
stderr=serial
ethact=eth0
serverip=192.168.1.45
ipaddr=192.168.1.60

Environment size: 357/65532 bytes
ar7240> tftpboot 0x80000000 openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin
dup 1 speed 1000
Using eth1 device
TFTP from server 192.168.1.45; our IP address is 192.168.1.60
Filename 'openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin'.
Load address: 0x80000000
Loading: #################################################################
 #################################################################
 #################################################################
 #################################################################
 #################################################################
 #################################################################
 #################################################################
 #################################################################
 #################################################################
 #################################################################
 #################################################################
 ######################################################
done
Bytes transferred = 3932160 (3c0000 hex)
ar7240> erase 0x9f020000 +0x3c0000

First 0x2 last 0x3d sector size 0x10000
 61
Erased 60 sectors
ar7240> cp.b 0x80000000 0x9f020000 0x3c0000
Copy to Flash... write addr: 9f020000
done
ar7240> bootm 0x9f020000
## Booting image at 9f020000 ...
 Uncompressing Kernel Image ... OK

Starting kernel ...

Linux version 2.6.32.10 (openwrt@wrt1.marcant.net) (gcc version 4.3.3 (GCC) ) #20 Tue Apr 6 15:01:26 CEST 2010
bootconsole [early0] enabled
CPU revision is: 00019374 (MIPS 24Kc)
Atheros AR7240 rev 2, CPU:350.000 MHz, AHB:175.000 MHz, DDR:350.000 MHz
Determined physical RAM map:
 memory: 02000000 @ 00000000 (usable)
Initrd not found or empty - disabling initrd
Zone PFN ranges:
 Normal   0x00000000 -> 0x00002000
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
 0: 0x00000000 -> 0x00002000
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128
Kernel command line: rootfstype=squashfs,yaffs,jffs2 noinitrd console=ttyS0,115200 board=TL-WR741ND
PID hash table entries: 128 (order: -3, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

Enjoy your new OpenWRT router!

NOTE: in case you would like to use the WT743ND as an access point and not as a router, OpenWRT documentation suggest to simply ignore the WAN interface and connect the AP via a LAN port. Unfortunately If you’re willing to use PoE the WAN port is the only port capable to receive power! In my case I successfully connected the PoE pins from the WAN to the first LAN port, having the router powered-on via PoE on the first LAN port (thus acting as an access point).