OpenWRT on D-Link DSL-G604t

8 07 2007

The default firmware for the router leaves a lot to be desired, dns is fairly painful with bugs such as IPv6 enabled systems returning for IPv4 addresses (Its fixed in the newest Australia firmware release but I’m not sure about other countries). There was also a problem the system dying under heavy load such as BitTorrent or other P2P (also fixed) but there doesn’t seem to be anyway to link hostnames. static ips and MAC addresses together, there are some options such as reserved hosts which map MAC to ip, and another section that maps hostname to ip but these seem to override each other and the IP only seems to be for DHCP not DNS, You could manually edit /etc/hosts on the modem which will be wiped each reboot.

There is a good information on the router at Seattle wireless, including hardware info and the ADAM2 bootloader.

Firstly you need to find the IP address of the routers ADAM2 bootloader.

If you have a working router, you can telnet into it and cat /proc/ticfg/env

Its a good idea to save this information for later as things like the mtd layouts are handy to have. You want to find the ip address entry. There are a few defaults, is common for the ones in Australia, mine is, which I believe is a failsafe address that probably started to be used when I accidentally wrote over the environment variables part of the mtd, fortunately its fairly bullet prof providing you don’t kill mtd2 (0x0 to 0x90010000) which is where the adam2 boot loader lives.

You need to grab the source code for OpenWrt from svn as there currently aren’t any ar7 releases.

There is a guide on the OpenWRT wiki, its important to read as I will be glossing over the details here.

Compiling is fairly painless, ‘make menuconfig’, choose options as shown in the guide and then ‘make’. This will make images in the bin directory. The only one thats important is the openwrt-ar7-2.4-squashfs.img file.

The guide recommends you checksum the image using TI’s GPL code. I;m not sure if this is actually required or not but I did it to be safe.

There is a file in scripts, however it doesn’t seem to be able to find the device, I tried it along time ago with the 2.4 OpenWRT and had a similar problem, manually modified the script to fix the error (i forget how) but then the script refused to flash as the mtd’s where different on the new Australian firmware.

Instead you need to manually upload the firmware with the ADAM2 ftp.

Firstly set your computers ip address to the same subnet as the ADAM2’s ip. Then ftp to the ip address and quickly unplug and replug the modem (your supposed to wait 10 seconds but under windows the interface will go down if the router is off for too long and ftp won’t work.

You should get the ADAM2 login screen, login with ‘adam2’ as user name and password.

You can see the mtd information with:
quote "GETENV mtd0"

Its a good idea to check them all. You will need to modify them for the firmware but don’t touch mtd2 as thats where the boot loader is and screwing it up will brick the router unless you happen to have a JTAG. Its a good idea to workout the partition ordering, its [mtd2]-[mtd1]-[mtd0]-[mtd3] with [mtd4] spanning across the memory of [mtd1] and [mtd0] combined. mtd2=bootloader, mtd1=kernel, mtd2=filesystem and mtd3=adam2-enviroment-variables (nuking this will make adam2 goto the failsafe defaults which will mean you might need to find the failsafe ip address).

You can then use quote "SETENV mtd4, 0x90010000,0x903f0000".

You need to open the openwrt-ar2-2.4-squashfs.img file in a hexeditor and find the memory location that contains the code ‘hsqs’, then add this to the location where the adam2 bootloader ends (0x90010000). This location is where the compressed filesystem is kept. From above you can see that the compressed fs is at mtd0, so the resulting number is where mtd1 ends and mtd0 starts. The rest of the coordinates are unchanged from the defaults.

You can then upload the image
put openwrt.img "openwrt.img mtd4"
quote REBOOT

If ftp dies when attempting the put command, simply reconnect. You should see a bunch of # on the screen thanks to the hash command, so you can see everything is working well.

When you reboot, the modem should come up with the ip address, it might take quite along time to work though. I sugest you set your ip to an address on the subnet and leave ping running. When it responds to a ping it will still take quite a while for the servers to come up, you can keep trying to telnet to

Since this is the first boot, it needs to generate a ssh key. You can see if its still generating the key with ‘top’, it should be a dropbearkey process using a lot of cpu also a firstboot process should be around. You also should set your password with ‘passwd’ to allow ssh and stop anyone logging in.

When you have done that and the key has been generated you can ‘reboot’.

Once again it will take several min to come back up.

Next edit /etc/ethers with vim and you static MAC entries in the form of:

And edit /etc/hosts for the hostnames of the ip addresses.

Then you need rm /etc/resolv.conf as it is a link to an automatically generated file in /tmp. You need to add your isps nameservers to it. Also you need to add them to /etc/ so dnsmasq checks them for clients on the lan.

The TI ACX111 wireless interface needs firmware to be wget’d to /lib/firmware check ‘dmesg | grep acx’ to find out which files are actually needed, mine wanted tiacx111 and tiacx111c16.

You can either reboot or ‘rmmod acx; insmod acx’ to bring up the interface

I have yet to figure out how to get the wireless lan working as an access point, for some reason the /etc/config/wireless only works for 2 chipsets. iwconfig will work to bring up the wireless interface manually and it shows up on a scan but I was unable to authenticate with the access point, I’m not sure if its because there is more setup required or if the drivers are broken although its probably a config problem. For not I have gone back to official firmware but turned of the DNS/DHCP servers and setup a proper one on another system untill the OpenWRT branch is updated to support acx111 in the wireless configuration.



2 responses

4 09 2007
Paul Koan


Your post suggests that while you could not authenticate to the AP, you were able to see it using an iwlist wlan0 scan

Is that right? I have the same router with openwrt installed, and cannot see anything out of the wireless card.

Can you tell me which version of the firmware you used?

Many thanks,


8 09 2007

The G604T would show up as an access point in an iwlist scan but nothing would connect.

I don’t remember the firmware version, it was just a svn checkout (I assume from about the time of my post, maybe a few weeks or months before).

Just to be clear I was attempting to connect to the G604T’s access point, not use it to connect to another access point.

Currently the only hardware I have to check it is a Nintendo DS (which runs Linux with iwlist etc) and a PSP (Haven’t tried Linux on that yet), although I think I had a laptop around at the time which had the same problem.

%d bloggers like this: