Resume and bio of the author Couple of articles related to my hobby - robotics
My impressions about immigration to Australia. In Russian only. Recipes for everyday problems solving
Linux-related posts Windows-related posts
Software-related posts A lot of info about hardware
Different tools you might find useful Posts about various web technologies
Everything that doesn't fit the rest of the menu RSS feed for this blog

Tag Cloud



Andrey Mikhalchuk’s Blog

Technoblog about life

Feb 23, 2008 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 :)

This post is published in Hardware, How To, Linux, Robotics.

15 Responses to “How to take apart a Linksys WRT54G router”

  1. How to build an inexpensive yet powerful robot - modify the router so it can control servos | Andrey Mikhalchuk's Blog Says:

    […] Blog on How to build an inexpensive yet powerful robot (How to turn your router into a routerbot)How to take apart a Linksys WRT54G router | Andrey Mikhalchuk’s Blog on How to build an inexpensive yet powerful robot (How to turn your router into a routerbot)How to […]

  2. Prince Riley Says:

    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.

  3. Andrey Mikhalchuk Says:


    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!

  4. Matteo Says:

    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

  5. Andrey Mikhalchuk Says:


    The SSC-32 is not my product. You probably can get all the schematics from the manufacturer:


  6. NimitH Says:

    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


  7. Andrey Mikhalchuk Says:


    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.


  8. Janis Says:

    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


  9. Andrey Mikhalchuk Says:


    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.


  10. Janis Says:


    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


  11. Andrey Mikhalchuk Says:


    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!

  12. Alessandro Says:

    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?

  13. Andrey Mikhalchuk Says:


    I used the schema known as “voltage divider”. One of the best explanations of how it works can be found on wikipedia. And Sparkfun describes how it is applicable to serial interfaces voltage conversion best. Also on sparkfun website you can buy prebuilt adapter.


  14. MA Says:

    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.

  15. Andrey Mikhalchuk Says:

    Hi MA,

    Try adding serial port interface to your router and check the console. There should be some output when you click the reset button. What OS are you using?


Leave a Reply

You must be logged in to post a comment.

Site Map (c) Andrey Mikhalchuk, 2005-2008