Pi Zero W Flashrom and USB Gadget Debug


dd Raspbian image to microsd:

dd bs=4M if=2017-03-02-raspbian-jessie.img of=/dev/sdb status=progress

Boot from SD (Pi Zero will not start without it).
Connect to wireless.
Enable SSH on startup:

sudo systemctl enable ssh
sudo systemctl start ssh


Log in over SSH and enable the SPI:

sudo vim /boot/config.txt

and uncomment:


Then reboot.

Install libraries necessary to compile ChromeOS Flashrom:

sudo apt install libpci-dev libfdt-dev libusb-dev libusb-1.0-0-dev

Clone ChromeOS Flashrom master:

git clone https://chromium.googlesource.com/chromiumos/third_party/flashrom

Build it:


Test with:

flashrom/flashrom -V -r backup.rom -p linux_spi:dev=/dev/spidev1.0

USB Debug Gadget

The usual update routine:

sudo apt-get update -y
sudo apt-get upgrade -y

Update the kernel:

sudo rpi-update

Get rpi-source:

sudo wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source -O /usr/bin/rpi-source

Make it executable:

sudo chmod +x /usr/bin/rpi-source

Tell the update mechanism that this is the latest version of the script:

/usr/bin/rpi-source -q --tag-update

Get the kernel files thingies:

cd linux

Enable g_dbgp in menuconfig as a module – Device Drivers -> USB Support -> USB Gadget Support -> EHCI Debug Device Gadget:

make menuconfig

Prepare the newly selected module(s) for actual building:

make modules_prepare

Apply updated 4.x EHCI debug patches:

tar -xJf debug_patches.tar.xz
patch -p0 < dbgp.patch
patch -p0 < gadget.patch
patch -p0 < u_serial.patch

Make the modules:

make M=drivers/usb/dwc2
make M=drivers/usb/gadget

Copy them to the relevant places:

sudo for f in $(find drivers/usb/gadget/ -name *.ko); do sudo cp $f /lib/modules/$(uname -r)/kernel/drivers/usb/gadget/ ; done
sudo for f in $(find drivers/usb/dwc2/ -name *.ko); do sudo cp $f /lib/modules/$(uname -r)/kernel/drivers/usb/dwc2/ ; done
sudo for f in $(find drivers/usb/gadget/function -name *.ko); do sudo cp $f /lib/modules/$(uname -r)/kernel/drivers/usb/gadget/function ; done

Run depmod so the modules work:

sudo depmod -a

Enable the dwc2 USB controller driver:

echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt

Reboot. Load the module:

sudo modprobe g_dbgp

Configure the virtual serial device to strip out CR/LF’s to sanitise output:

stty -icrnl -inlcr -F /dev/ttyGS0

Cat that serial device good:

cat /dev/ttyGS0

Switch on the Intel based Chromebook, or other device with coreboot compatible USB debug.

Done. With thanks to Kyösti Mälkki for actually getting the damned thing working. :)

Sources in no particular order:







Leave a Reply