How to take apart a Linksys WRT54G router

Linksys WRT54G router and similar are very famous because of great modifications potential hidden in the device. For some purposes you may want to add a serial port to the router. You may need that for development purposes or to turn the router into a robot for instance. This post describes the procedure of taking the router apart so you can get access to the serial port connector hidden inside.

The process is actually described in many places and in various formats. Except for one – video. So I made a video that shows the process. Here it is:

Now you have your router taken apart. If you’re thinking about what to do next take a look at the most hacked router in the world ever :)

15 thoughts on “How to take apart a Linksys WRT54G router

  1. OK thanks for this video. I am working with a WAP54G Linksys router and going to buy another one to make an ethernet wireless bridge.

  2. Prince,

    I’m glad this video was useful. I used a WRT54GL as a bridge working under OpenWRT too (before turning it into a robot). It worked flawlessly and way more reliably then the original Linksys OS. Actually DD-WRT seems to be even better OS for this purpose as it has better web interface. Let me suggest getting an _old_ WRT54GS instead of GL as it has twice more memory onboard. Just check the HW revision: newer versions cannot be reflashed at all.

    Good luck!

  3. can you send me the electric plan of the servo’s control board please?

    i hope that you have understood ( my english is not very good)

    thanks Matteo

  4. Hi Andrey,

    I am not the linux guy but i know a bit of the Progammer in C and other. I found you by accident search from Google and youtube so cool!!!!!

    I used to be the robot builder and found this will be my new project. I have WRT54GL and already have DD-WRT, Do I need to re-flash your firmware or just add some of your files in there. I hope it will work for me, I have every part ready to go and Board. this project get my attention for other project that i have in mind for long time/.

    Thank you and keep the good work, LOVE YOUR WORK


  5. NimitH,

    Unfortunately the current version is provided as a new firmware only. I plan to release it as a package later, but not sure when exactly.

    If you want to try the new firmware right now you can probably try to backup the DD-WRT (Administration->Backup) and make sure you have recorded your key in a safe place. Later you should be able to restore DD-WRT with this information.


  6. Thank you for many-many hours of fun building my own version!!!!
    My RouterBot is being controlled by PIC18F452 and everything is working fine.
    I have just one problem.
    My LinkSys WRT54GL routerbot is in client mode and I can do telnet to it and controll movements.
    Recetly I bought IP camera (capable of static and DHCP IP). Being very naive I thought that
    just by plugging this IP camera in free ethernet port on my robo-router I will immediatelly see
    it’s IP on the network too. Bad luck. So when camera is connected to central home router I can access it by IP, but when connected to routerbot i can not see it. Can you give me at least a clue where to start looking for solution? Is it some magical “trunk”, “vlan” configuration, bridging? If you can providem me with concept how it should be organised, then I hope that details I can figure our myself.

    Thank you in advance


  7. Janis,

    I need some more information about your configuration. What is your firmware version: v1 or v2? If it is v2 then in what mode you’re trying to run your robot?

    Brief answer:
    – if you’re still using v1 I highly recommend upgrading to v2. Just backup the files you have modified so you can reapply those mods to the new firmware
    – in comments to the following post you will find info about how to patch the web interface to support your web camera in the routerbot web interface:

    Please let me know if problems.


  8. Andrey

    In your V2 my camera is working now, took a bit of research. But I’m struggling with one theoretical issue now. I do not understand the data flow in your V2 from web page click to exact data transmit to port. I do not have your servo controller and therefore thinkering with my self made PIC board.
    What I got from reading source files on routerbot is that
    index.htm have – > onclick event -> fucntion in main.js – > what calls do.cgi -> what calls “command”(?) executable- > what reads> what … I’m lost (blush)
    The thing I’m trying to get working now is that on click to one button the letter “A” is transmitted to my PIC controller. Yesterday I changed everything-everywhere, but nothing works still. If I trasmit “A” in shell then my servo moves correctly to leftmost position.

    Could you share some information?

    Best regards


  9. Janis,

    The beginning of the chain is correct: index.htm have – > onclick event -> fucntion in main.js – > calls do.cgi -> calls cmd() shell script function defined in -> calls command executable that communicates with the serial port and sends commands to SSC-32. Nice job tracing all this stuff. I probably need to desribe it in details.

    Did I correctly understand that you’re you built your own servo controller instead of SSC-32? If so you need to take a look at and modify function cmd(). In particular you need to comment out the line that calls command executable and uncomment the line that echoes command to the serial interface /dev/tts/1. Then you need to implement your own set of commands because for now entire is talking “SSC-32 language”. Let me know if problems, I’ll try to help.

    Good luck!

  10. Hey Andrey, thanx for the tutorial, but i don’t have understand so well how you solve the 3.3v/5v problem, can you give some tricks?! I have seen the tutorial link about some ideas to solve the problem but it’s a little confuse to me…can you show some schematic of resistor connection?

  11. I have a WTR54G that will not “reset” itself or at least I cannot feel the reset button give.. Any suggestions? And no it does not seem like it’s resetting to defaults either.

Leave a Reply