Serial debugging/Serial Gadget

From postmarketOS Wiki

For devices where getting a physical UART cable is not possible, or not feasible, the kernels USB serial gadget can be a good option for debugging when you know that the kernel is booting.

Enabling serial gadget

Turn on the following config options:

CONFIG_USB_G_SERIAL=y
CONFIG_U_SERIAL_CONSOLE=y
CONFIG_USB_U_SERIAL=y

Add the following to your kernel cmdline to enable logging to the gadget console:

console=ttyGS0,115200

Using the gadget

Now when booting your device, you should see a new serial device appear on your host, usually it's /dev/ttyACM0. This one liner can make sure you don't miss anything (although usually the output is buffered until you open the device). Sometimes the gadget buffer breaks down and it sends a lot of the same few characters over and over, when this includes newlines it can cause you to lose a lot of the logs, hence the grep below.

Leave this running in a console and the boot logs will be printed every boot.

while true; do test -e /dev/ttyACM0 && sleep 0.1 && cat /dev/ttyACM0 | grep -vE "^\s?\n$"; done

Initramfs debugging

You may also drop a shell in the initramfs by adding pmos.debug-shell to your kernel cmdline. A shell will automatically be spawned on the USB serial gadget device.

References