A serial console is the cable I reach for when a Raspberry Pi is alive enough to boot but not alive enough to join the network. It shows kernel messages before SSH could possibly work and gives you a login without a monitor. It can also damage GPIO in an instant if a 5 V adapter is involved, so we will begin with electricity rather than software.
Confirm the board and adapter before wiring
The adapter must expose 3.3 V TTL logic; a DB9 RS-232 adapter uses incompatible voltage levels.
Raspberry Pi 4 and earlier normally expose the primary UART on GPIO14 and GPIO15 of the 40-pin header.
Raspberry Pi 5 exposes its primary Linux console on the dedicated three-pin debug header by default.
Wire colours are not a standard. Trust the labels or adapter documentation, never an old photograph.
Wiring Raspberry Pi 4 and earlier models
Pi GND, physical pin 6 → adapter GND: both sides need a common reference.
Pi GPIO14/TXD, physical pin 8 → adapter RXD: the Pi transmitter feeds the host receiver.
Pi GPIO15/RXD, physical pin 10 → adapter TXD: the host transmitter feeds the Pi receiver.
Adapter VCC/5V/3V3 → not connected: power the Pi separately.
TX and RX must cross
A transmitter talks to a receiver. If both sides are labelled from their own perspective, TX connects to RX and RX connects to TX. A console that shows output but ignores keyboard input often has only one direction correctly wired.
Raspberry Pi 5 uses a different default console header
On Raspberry Pi 5, use the dedicated debug UART connector and its documented orientation for the default console. Do not assume the Pi 4 physical-pin recipe automatically applies. GPIO14/15 can be configured for another UART, but that is a separate overlay and console-routing design.
Enable the login console with raspi-config
sudo raspi-config3 Interface Options → I6 Serial Port
Login shell over serial? Yes
Serial port hardware enabled? YesRisk level: caution. Review the command before running it.
Those two questions control different layers
The login-shell answer controls kernel console/getty use of the serial port.
The hardware answer enables the UART itself.
For a debugging console, answer Yes to both; for an application UART, normally answer No to login shell and Yes to hardware.
Reboot after leaving
raspi-configso bootloader, kernel, and systemd settings agree.
sudo rebootConnection closes while Raspberry Pi restarts.Risk level: caution. Review the command before running it.
What reboot activates
Raspberry Pi OS applies the serial hardware configuration at boot.
The kernel command line selects the console device and baud rate.
A serial getty supplies the login prompt after userspace starts.
Save work first because reboot ends all current sessions.
Understand the files raspi-config manages
grep -n '^enable_uart' /boot/firmware/config.txt 2>/dev/null || \
+ grep -n '^enable_uart' /boot/config.txt
cat /proc/cmdline
readlink -f /dev/serial0enable_uart=1
... console=serial0,115200 ...
/dev/ttyAMA0Prefer aliases over guessed device names
Current Raspberry Pi OS uses
/boot/firmware/config.txt; older releases commonly used/boot/config.txt.cmdline.txtmust remain one physical line if edited manually./dev/serial0follows the model’s primary UART and may resolve tottyAMA0,ttyS0, or on Pi 5 a different console UART.enable_uart=1is especially relevant when the mini UART is primary because its baud rate depends on core clock behavior.
Find the USB serial adapter on Ubuntu
sudo dmesg --follow
# Plug in the adapter, observe the assigned device, then press Ctrl-C.
ls -l /dev/serial/by-id/ 2>/dev/null
ls -l /dev/ttyUSB* /dev/ttyACM* 2>/dev/nullusb ... converter now attached to ttyUSB0
/dev/ttyUSB0Choose a stable host-side name when available
USB UART drivers commonly create
/dev/ttyUSB0; CDC adapters may create/dev/ttyACM0.dmesg --followties the new node to the device you just inserted./dev/serial/by-idcan remain stable when numeric tty assignments change.Do not copy
/dev/ttyUSB0blindly when several adapters are connected.
Open the console at 115200 8-N-1
sudo apt install minicom
minicom -D /dev/ttyUSB0 -b 115200 -8Welcome to minicom
Press CTRL-A Z for help on special keysSerial settings that must agree
-Dselects the verified host device and-bsets 115200 bits per second.-8selects eight data bits; use no parity and one stop bit.Disable hardware and software flow control because the three-wire connection has no RTS/CTS lines.
Exit minicom with Ctrl-A then X; do not simply close a terminal while another process still owns the port.
Boot and log in
Open the host terminal before applying Pi power so early messages are not missed.
Power the Raspberry Pi from its normal supply.
Watch for firmware or kernel output, then the Raspberry Pi OS login prompt.
Press Enter if the prompt is present but not freshly drawn.
Sign in with an existing local account; modern Raspberry Pi OS does not rely on a universal default password.
Troubleshoot by symptom
No characters at all: verify common ground, adapter voltage, model-specific header, TX/RX crossing, console configuration, and host device.
Unreadable characters: both sides disagree on baud or framing, or a mini-UART clock is unstable.
Output but no keyboard input: check adapter TX → Pi RX and disable flow control.
Permission denied: add the host user to the appropriate serial-device group such as
dialout, then log out and back in.Device busy: close ModemManager, another terminal, or any process holding the tty.
Boot messages but no login: inspect the kernel
console=argument and serial-getty state.Works until Bluetooth changes: older wireless models may route PL011 and mini UART differently; use
/dev/serial0and review the selected overlay.
Do not add earlycon casually
The normal serial console begins after substantial boot setup. Raspberry Pi documents model-specific earlycon parameters for earlier failures, but selecting the wrong UART or address can prevent boot. Add early console only for a defined kernel-debugging need and keep a known-good SD-card rollback.
Primary Raspberry Pi references
Raspberry Pi UART configuration documents serial settings, model routing, voltage, aliases, and early console.
Raspberry Pi hardware documentation identifies GPIO14/15 and safe 3.3 V GPIO behavior.
Raspberry Pi configuration reference defines boot configuration behavior.
Comments and corrections