| Debugging hardware can be tricky especially when doing kernel and drivers | 
 | development. It might become handy for you to add serial console to your | 
 | device as well as using JTAG to debug your code. | 
 |  | 
 | \subsection{Adding a serial port} | 
 |  | 
 | Most routers come with an UART integrated into the System-on-chip | 
 | and its pins are routed on the Printed Circuit Board to allow | 
 | debugging, firmware replacement or serial device connection (like | 
 | modems). | 
 |  | 
 | Finding an UART on a router is fairly easy since it only needs at | 
 | least 4 signals (without modem signaling) to work : VCC, GND, TX and | 
 | RX. Since your router is very likely to have its I/O pins working at | 
 | 3.3V (TTL level), you will need a level shifter such as a Maxim MAX232 | 
 | to change the level from 3.3V to your computer level which is usually | 
 | at 12V. | 
 |  | 
 | To find out the serial console pins on the PCB, you will be looking | 
 | for a populated or unpopulated 4-pin header, which can be far from | 
 | the SoC (signals are relatively slow) and usually with tracks on | 
 | the top or bottom layer of the PCB, and connected to the TX and RX. | 
 |  | 
 | Once found, you can easily check where is GND, which is connected to | 
 | the same ground layer than the power connector. VCC should be fixed | 
 | at 3.3V and connected to the supply layer, TX is also at 3.3V level | 
 | but using a multimeter as an ohm-meter and showing an infinite | 
 | value between TX and VCC pins will tell you about them being different | 
 | signals (or not). RX and GND are by default at 0V, so using the same | 
 | technique you can determine the remaining pins like this. | 
 |  | 
 | If you do not have a multimeter a simple trick that usually works is | 
 | using a speaker or a LED to determine the 3.3V signals. Additionnaly | 
 | most PCB designer will draw a square pad to indicate ping number 1. | 
 |  | 
 | Once found, just interface your level shifter with the device and the | 
 | serial port on the PC on the other side. Most common baudrates for the | 
 | off-the-shelf devices are 9600, 38400 and 115200 with 8-bits data, no | 
 | parity, 1-bit stop. | 
 |  | 
 | \subsection{JTAG} | 
 |  | 
 | JTAG stands for Joint Test Action Group, which is an IEEE workgroup | 
 | defining an electrical interface for integrated circuit testing and | 
 | programming. | 
 |  | 
 | There is usually a JTAG automate integrated into your System-on-Chip | 
 | or CPU which allows an external software, controlling the JTAG adapter | 
 | to make it perform commands like reads and writes at arbitray locations. | 
 | Additionnaly it can be useful to recover your devices if you erased the | 
 | bootloader resident on the flash. | 
 |  | 
 | Different CPUs have different automates behavior and reset sequence, | 
 | most likely you will find ARM and MIPS CPUs, both having their standard | 
 | to allow controlling the CPU behavior using JTAG. | 
 |  | 
 | Finding JTAG connector on a PCB can be a little easier than finding the | 
 | UART since most vendors leave those headers unpopulated after production. | 
 | JTAG connectors are usually 12, 14, or 20-pins headers with one side of | 
 | the connector having some signals at 3.3V and the other side being | 
 | connected to GND. |