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.
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.
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.
- dir600b_v2.17_bbox-v1.19.1.bin – a modified version of the original firmware that includes a telnet daemon so that remote connection is possible to the router.
- openwrt-15.05-ramips-rt305x-dir-300-b7-initramfs-uImage.bin – inital OpenWrt firmware, place it in the root of your web server
- openwrt-ramips-rt305x-dir-610-a1-squashfs-sysupgrade.bin – final OpenWrt firmware
- Upload dir600b_v2.17_bbox-v1.19.1.bin to the router using the emergency firmware upload page.
- Telnet in to the router using Putty on port 2323.
- Switch to the /var directory: cd /var
- 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
- Apply the downloaded firmware: busybox flashcp openwrt-15.05-ramips-rt305x-dir-300-b7-initramfs-uImage.bin /dev/mtd/2
- Reboot the rooter: reboot -f
- 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|
|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
- cheap USB-serial converter from eBay
- some pin headers and cables
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
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.
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.
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).
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.
Which step (from this page)?
Still cheksum errors.
I have exactly this error, your suggested firmware bricked it.
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
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.
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).
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.
“My device is B5E.” So then it IS a different version.
I’m afraid, I can’t help you more on this as I am not set up currently for OpenWrt development.
Please guide me in more detailed way. I can pass the Telnet step. I have the exact model DIR 600 B5
I can’t pass telnet*
“My router is B5. ” And there is a picture underneath, which one shows B5E, you have identical device
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.
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.
I can confirm, the LEDE 17.01.1. DIR-610-A1 is rock stable, working flawlessly.
Awesome! I’m glad it worked out finally!
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:
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
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.
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.
Just saw your comment:
Wrong expression on my side:
I mean after every reboot or power cyvle.
Sorry, I’m afraid I don’t know what the problem might be. Experts over at openwrt may be able to help you further.