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