OpenWRT on WRT54GL

From Exterior Memory
Jump to: navigation, search
This article was written in August 2008, and last updated in December 2009. This article was written with OpenWRT 8. I have not upgraded to the latest version. Given the volatile nature of this topic, expect that the content of this article is outdated after about two years time.
Linksys WRT54GL v1.1 (Broadcom BCM4320 wireless chipset)
OpenWRT 8.09.2 (Kamikaze) with Linux 2.6.25 kernel

See also OpenWRT with WRT54GL hardware.


Unfortunately, it is not yet possible to install the Linux 2.6 kernel directly. The reason is that you really want to set boot_wait to on, and that is only possible with the Linux 2.4 kernel. So the firmware has to be upgraded in two steps, first to the 2.4 kernel, then to the 2.6 kernel.

Broadcom wireless controller

The Linux 2.4 kernel uses the proprietary BCM4320 wireless controller which is closed source but rather stable. The 2.6 kernel uses the b43 open source driver which is less stable.

The b43 driver (identified as 80211 interface type) was removed from 8.09.1 due to it's instability. If you try 8.09, you will get this error:

wlan0(mac80211): Interface type not supported

Support for the b43 driver resurfaced in the Backfire distribution (10.03). I have not upgraded, but it is reported to be stable.

I tried the trunk before Backfire was released, but got problems with my Ethernet bridge, so at that time moved back to the 2.4 kernel with the BCM4320 driver. I have not yet upgraded to 10.03 yet.

Install from LinkSys to Kamikaze with Linux 2.4 kernel

I simply installed OpenWRT using the GUI of the Linksys firmware. The for 2.4 kernels can be found in

Finish the installation using telnet (username: root, no password), set the password using passwd

% telnet -l root    ( is the default IP address)
# passwd

This will automatically enable SSH access and disable telnet access.

Then set boot_wait:

# nvram set boot_wait=on
# nvram get boot_wait           (just to confirm, should respond with "on")
# nvram commit                  (takes a few seconds to complete)

This final step is essential, since it gives you a way out in case you ever screw up the configuration. You will be very grateful you did this at that time. Trust me. Essentially, boot wait will delay the startup of the basestation after power up, and gives you a few seconds to boot in safe mode. See the mini how-to boot_wait - What it is, and how it works.

Upgrade to Kamikaze 8.09 with Linux 2.6 kernel

First of all, make a copy of your files in /etc, as you will loose these during an upgrade.

[on openwrt]  tar czvf etc.tgz /etc
[on computer] scp root@ ./

Now log into the device and download the new image (this is the experimental 2.6 kernel for Broadcom-based basestations such as the LinkSys OpenWRT54GL):

cd /tmp 

Then install the kernel and reboot:

mtd write /tmp/openwrt-brcm47xx-squashfs.trx linux

The device is now back in it's original state, with only telnet allowed to Log in, set the password, reboot, and you can use the new webinterface from there on.

My Configuration

A very good starting point, which describes all the generic network concepts is:

My desired configuration has

  • Basestation in bridge mode, optionally routed if required, definitely not NAT. As I have 16 public IPv4 addresses at home, I don't need NAT. However, with about 10 IP addresses in active use, I don't have space to create subnets.
  • (Transparent) Firewall, allowing only few specific connections to IP/port combinations. I prefer a fine-grained access control, just as a precaution.
  • IPv6 tunnel endpoint. I prefer a single termination point in my network over the 6to4 solution with termination points at all individual hosts.

The details are described on these two pages:


Boot in fail safe mode. You reboot by unplugging the power cable and plug it back in. The boot process goes as follows:

  • The power LED starts flashing. The boot loader is running. If you press the reset button (labeled with Cisco systems on the Linksys) now, the NVRAM will be reset.
  • The DMZ LED lights up. OpenWRT is running its startup scripts. If you press the reset button now, it will boot in fail safe mode, using some predefined setting (no wireless, and IP address, reachable from port 1). You need to keep the reset button pressed until the DMZ light starts flashing.

See the OpenWRT Troubleshooting documentation for more information.

After booting in fail safe mode, telnet to, and see if you can still mount the JFFS2 file system:

% telnet
# /sbin/mount_root