Installing OpenWrt on D-Link DIR-600 Router

Introduction

The D-Link DIR-600 is a consumer grade router. Although it’s not a new model, it is still a very capable router at a price tag and feature set that is difficult to beat. Also, OpenWrt can be installed on it to make it even more capable and more configurable.
The DIR-600 comes in several different hardware revisions. My router is B5. This is important as each hardware revision requires a slightly different approach.
Hardware version: B5

Upgrade

After much digging, trial and error I figured how to do it properly. The steps below contain the minimum steps (I found) to successfully upload the latest (15.05) OpenWrt build to the D-Link DIR-600 B5 router. The process is very simple and straightforward (once one figures it out), but it is fairly easy to mess it up, so double and triple check everything you type in the terminal.
The most important rule of thumb you need to follow is that while there is any kind of firmware upgrade is in process, do NOT switch off the router. If a firmware upgrade gets interrupted the router can take permanent damage.

Software tools/Environment needed

I performed the following on my test computer that runs a 64-bit version of Windows 10.
  • Web server – I used IIS from a current Windows 10 installation
  • Firefox browser – I also tried Edge, Internet Explorer and Chrome, they did not work.
  • Telnet client – I used the open source Putty.

Files needed

Get these files before you start the process, because once you start it you may not have internet connection (unless you have another router). Having the latest factory image at hand is also a good idea, although not required.

Steps

  1. Upload dir600b_v2.17_bbox-v1.19.1.bin to the router using the emergency firmware upload page.
  2. Telnet in to the router using Putty on port 2323.
  3. Switch to the /var directory: cd /var
  4. Download  from the web server (replace the Xs with the address of your web server): wget http://X.X.X.X/openwrt-15.05-ramips-rt305x-dir-300-b7-initramfs-uImage.bin
  5. Apply the downloaded firmware: busybox flashcp openwrt-15.05-ramips-rt305x-dir-300-b7-initramfs-uImage.bin /dev/mtd/2
  6. Reboot the rooter: reboot -f
  7. Upgrade to the latest build using OpenWrt’s firmware update page.
Steps 2 to 6 shown from above
Success! OpenWrt seems to be fully functional on my D-Link DIR-600 router.
Status page of OpenWrt

What to do if you brick your router (and how/why I bricked mine)

This router is rather difficult to brick as it has some protection against not suitable firmware. However, if you do manage to make it unresponsive all is not lost. With a bit of soldering skills and some free and/or inexpensive tools it is possible to bring it back to life.
There is a step by step process described at http://wiki.openwrt.org/toh/d-link/dir-300revb for this model/revision, however, this process did not work for me and I ended up having my router “soft-bricked”. This means that I managed to overwrite the factory firmware with one that was not working and I couldn’t connect to the router any more using LAN or WiFi.
At this stage I went on to read up as much and as diverse information on the DIR-600 B5 as possible. The OpenWrt forums are a great starting point. Finally I ended up opening the router (as in I removed its case) and created a connection to its serial interface.
Serial port that needs some means of connecting to it
Pin header soldered on the board with breadboard cables connected to Rx, Tx and Gnd. Vcc is not required. The serial port uses: 57600 baud, 3.3V levels. 
Final setup, connected to a USB-Serial port adapter.
With the serial cable properly attached (see the label I added to the PCB for extra safety) I could now observe what really was going on in the router. When booting up the rooter I could see all the messages it spit out on the serial port. Looking through the messages I found that at some stage it displayed a menu and, very briefly, it was waiting for a selection, then it continued with a default selection of “3”:
Please choose the operation:

   1: Load system code to SDRAM via TFTP.
   2: Load system code then write to Flash via TFTP.
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
   7: Load Boot Loader code then write to Flash via Serial.
   9: Load Boot Loader code then write to Flash via TFTP.

At the next boot I chose #1 and used tftp to upload the original firmware. At this stage the router was running the original firmware from memory – switching the router off would make it forget this. However, this was enough for me to get in to the emergency firmware upload page:
Emergency firmware upload page
On this page I was able to upload the original firmware to the router and restore its workings to factory default. Back to square one. At least I could continue to try other ways knowing that I can get back to this any time.

Software tools used

  • Tftpd32 – an open source, lightweight tftp client
  • Firefox browser – I also tried Edge, Internet Explorer and Chrome, they did not work.

Hardware tools used

23 Comments

  1. Lex

    Hi! I bricked mine too, pleae explain me how did you proceed after opening the putty terminal? I have unreadable charaters only and no idea how to fix it, I tried everything

    1. If you have unreadable characters, most likely you have the wrong speed set up in Putty.

      Double check your serial connection to the PCB (tx/rx). Make sure you are using a level converter if your serial adapter is for TTL levels.

      1. Lex

        Baud rates are triple checked. I use CP2102 USB to TTL Serial Adapter, is this cause the problem? If I connect the GND pin, nothng appears on the screen.

        1. TTL voltage levels (0V – 5V) may destroy your router’s serial port which is designed to handle 0v -3.3V levels. For correct operation you need to use either a 3.3V – USB serial adapter or a TTL – USB adapter with a level shifter.
          Also, you need to connect at least the GND, Rx and Tx lines correctly (one device’s Rx line goes to the other device’s Tx line, and vice versa).

  2. Lex

    I managed to purchase a 3.3V ttl usb device, now everything is readable, however if I try to upload the firmware, it gives me cheksum error, tried several different firmware, same error.

  3. Lex

    Still cheksum errors.
    I have exactly this error, your suggested firmware bricked it.

    DIR-600 B5E
    Have a look at this blog: http://diy.viktak.com/2016/02/installing-openwrt-on-d-link-dir-600.html

    First you have to downgrade the u-boot to get a emergency web interface. To do so you can use the firmware created only for this purpose from: https://www.dropbox.com/s/jfmqx2qlrhe0oje/dir600b_v2.17_bbox-v1.19.1.bin?dl=0
    Use the emergency web interface on 192.168.0.1.
    Upload the …-ramips-rt305x-dir-610-a1-squashfs-factory.bin firmware.
    After this your OpenWrt is running under 192.168.1.1.
    ❗ NOTE: Suggested firmware openwrt-ramips-rt305x-dir-610-a1-*.bin leads to a kernel panic.
    VFS: Cannot open root device “(null)” or unknown-block(0,0): error -6
    The problem exists in OpenWrt 14.07, 15.05 and 15.05.1.
    The reason is the lacking option
    CONFIG_MTD_SPLIT_SEAMA_FW=y
    in target/linux/ramips/rt305x/config-3.18 resp. config-3.10.
    This means you have to add the line above and build OpenWrt from the sources.

    1. Interesting observation… I don’t know what changed in the meantime, but my router worked exactly the way I described with the very firmware I linked in the post.

      My best guess is that your router is slightly different than my router (perhaps a different hardware revision?) and that is the reason for your troubles.

      I cannot redo the whole process to verify, as the router in question is now running in my home network, and has been doing it for the past few years now (ever since I put up this article in the first instance).

      1. Lex

        I managed to install another 610 firmware on it, but this one forget all the settings upon resart, quite annoying, and I cant return to the factory firmware. As I had my research this firmware occupie so much space, all the settings go into the ram. The best thing would be add that extra argument into the openwrt, just I have no idea how to unpack the firmware and rebuild. My device is B5E.

    1. Sorry, can you post the picture of yours? My picture clearly says: “Hardware version B5”. That is the important bit, the rest is marketing…
      Regardless, it is possible that your router turns out to be identical to mine, but then I don’t know what else to suggest.

      1. Lex

        My bad sorry, your part number says B5E, not the hardware version, so yes, mine is different. However as a last resort I tried LEDE 17.01.1. DIR-610-A1, first factory flash than a sysupgrade. I am testing now, everything seems to be fine so far. Maybe you should update this walkthrough if it works for me.

  4. Me

    Hi,

    got exactly the same Model like in the photo (HW Ver. B5, B5E in the top row, EU version).

    Nice instructions, worked flawlessly.

    I even flashed various firmwares without problems.

    The 15.05 – of course, a 17.01.7 and also a 19.07.2.

    Full names are:

    openwrt-19.07.2-ramips-rt305x-dir-610-a1-squashfs-sysupgrade.bin

    lede-17.01.7-ramips-rt305x-dir-610-a1-squashfs-sysupgrade.bin

    BUT:

    Every firmware works (as far as i tested) perfectly, but after
    a reset all me settings are gone :-/

    Happens with the 15.05, the 17.01.7 and the 19.07.2

    Any hints?

    1. Not really… Working fine for me. Do you mean reset or restart? After a reset, it IS supposed to forget the settings. After restart it should remember the settings. And it does for me.

  5. Me

    Strange observation:

    After switching back to the original D-Link firmware
    the router seem to remember my stored settings from
    the original firmware.

    With the D-Link firmware i had the router at 192.168.1.2.

    With openWRT i could set that address, but lost it after
    every reboot / power cycle.

    Now that i re-flashed the original firmware (2.18) my
    router is reachable at 192.168.1.2 instantly.

  6. cybericius

    I’d like to flash to either DD-WRT or OpenWRT my B5E.
    I cannot see any pictures here anymore. Is it the one you made this blog entry for, Viktor?
    Lex, I don’t have a JTAG connector to unbrick my router in case of problems. Can you please post here a modified version of the instructions of Viktor with your changes applied? Thanks!
    Or any new ideas are welcome 🙂

Your thoughts?

This site uses Akismet to reduce spam. Learn how your comment data is processed.