[Home] Roll your own Tomato (or DD-WRT) firmware


Customize / rebrand the Tomato / DD-WRT firmware by modifying the Web Interface.


This has been tested from a fresh VirtualBox installs of Ubuntu 11.04 (both 32-bit and 64-bit tested) from OS X 10.7 Lion.

First you need to intsall the dependencies:

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y \
  virtualbox-ose-guest-utils \
  build-essential \
  zlib1g-dev \
  subversion \
  unrar \
  wget \
  curl \
  git \

Then you should checkout firmware-mod-kit:

mkdir ~/Code
cd ~/Code
svn checkout http://firmware-mod-kit.googlecode.com/svn/trunk/ ~/firmware-mod-kit-read-only
cd firmware-mod-kit-read-only/trunk

Next get your firmware build (currently build 54):

# ASUS RT-N16 (32MB NAND, 128MiB RAM)
curl -v 'http://downloads.sourceforge.net/project/tomatousb/Experimental%20%28beta%29/K26-MIPSR2/tomato-K26USB-1.28.9054MIPSR2-beta-Ext.rar?r=http%3A%2F%2Ftomatousb.org%2Fdownload&ts=1317161608&use_mirror=voxel' 2>&1 | grep Location
wget 'http://voxel.dl.sourceforge.net/project/tomatousb/Experimental%20%28beta%29/K26-MIPSR2/tomato-K26USB-1.28.9054MIPSR2-beta-Ext.rar'

curl -v 'http://downloads.sourceforge.net/project/tomatousb/Experimental%20%28beta%29/K26-MIPSR1/tomato-K26USB-1.28.9054MIPSR1-beta-Ext.rar?r=http%3A%2F%2Ftomatousb.org%2Fdownload&ts=1317164364&use_mirror=hivelocity' 2>&1 | grep Location
wget 'http://hivelocity.dl.sourceforge.net/project/tomatousb/Experimental%20%28beta%29/K26-MIPSR1/tomato-K26USB-1.28.9054MIPSR1-beta-Ext.rar'


unrar x tomato-K26USB-1.28.9054MIPSR2-beta-Ext.rar
rm -rf ~/Code/custom-tomato/
./extract_firmware.sh tomato-K26USB-1.28.9054MIPSR2-beta-Ext.trx ~/Code/custom-tomato/
# Or
./extract-ng.sh dd-wrt.bin ~/Code/custom-dd-wrt/


vim ~/Code/custom-tomato/rootfs/www/basic-network.asp
# change "(beta)" to "I AM THE WALRUS GOO GOO GACHU"

Repackage and Upgrade:

./build_firmware.sh ~/Code/custom-tomato-rebuilds/ ~/Code/custom-tomato/
# or
./build-ng.sh ~/Code/custom-dd-wrt/
# creates ~/Code/custom-dd-wrt/new-firmware.bin

WARNING: I haven't had success with Tomato and build-ng, just DD-WRT and build-ng

Assuming that you already have default Tomato on your router (which you definitely should before testing a custom build, duh!):

  1. As a precaution, do both a Soft Reset and Hard Reset of your router.
  2. Visit
    • if someone would hit me back with how to do this on curl, I'd appreciate it.
  3. As a precaution, select "After flashing, erase all data in NVRAM memory"
  4. Load custom-tomato-rebuilds/custom_image_00001-asus.trx


cd ~/Code/firmware-mod-kit/trunk
mkdir -p ~/Code/vanilla-dd-wrt
wget 'http://www.dd-wrt.com/routerdb/de/download/Asus/RT-N16/-/dd-wrt.v24-14896_NEWD-2_K2.6_big.bin/3764' -O ~/Code/vanilla-dd-wrt/dd-wrt-rt-n16.bin
./extract-ng.sh ~/Code/vanilla-dd-wrt/dd-wrt-rt-n16.bin ~/Code/custom-dd-wrt/
./ddwrt-gui-extract.sh ~/Code/custom-dd-wrt-webui/ ~/Code/custom-dd-wrt/rootfs/
# made changes to `index.asp` and `Info.htm` successfully
# created page `test.asp`, but it wasn't accessible 
./ddwrt-gui-rebuild.sh ~/Code/custom-dd-wrt-webui/ ~/Code/custom-dd-wrt/rootfs/
# created a page `~/Code/custom-dd-wrt/rootfs/www/test.html` and it was accessible! W00T!
./build-ng.sh ~/Code/custom-dd-wrt/

If Tomato or DD-WRT is already installed, then the resultant package file can be uploaded and used readily.


Otherwise you'll need to use the simple tftp method or the preliminary updater first

wget 'http://www.dd-wrt.com/routerdb/de/download/Asus/RT-N16/-/dd-wrt.v24-14896_NEWD-2_K2.6_mini_RT-N16.trx/3763' -O pre-dd-wrt-rt-n16.bin

For my test I renamed index.asp to router.asp and Info.htm to Status_Info.htm and overwrote the original contents with plain text.

I had success in accessing the new files, but not in accessing the original renamed ones.

Wouldn't you know, I didn't find that dd-wrt actually has this information on their wiki until just now: http://www.dd-wrt.com/wiki/index.php/Building_From_Source#Building_DD-WRT_From_Source

blog comments powered by Disqus Updated at 2011-09-27