Plan 9 Installation for Raspberry Pi Zero WH WARNING: Make sure to purchase a raspberry pi with GPIO headers pre-soldered. For the Pi Zero W, it is marked as the Pi Zero WH. If your board does not have headers, you will need to buy headers and solder them on, or else you will be unable to connect to the UART for serial debug console. First, download Richard Miller's Plan 9 image: https://9p.io/sources/contrib/miller/9pi.img.gz gunzip the file to get 9pi.img, then use dd to copy this image onto a microSD card. Next, we need to configure config.txt and cmdline.txt to specify the proper boot settings. For reference, see https://www.raspberrypi.com/documentation/computers/config_txt.html. Mount the microSD card and make a few edits. In cmdline.txt, add this definition readparts=1 nobootprompt=local console='0 b115200' ether1=type=4330 nvram='#S/sdM0/nvram' to the end of the line. This will accomplish several things: it will configure the serial console, enable the wifi device in the kernel, and specify the location of nvram. NOTE: everything must be on a single command line. Multiple lines will not be parsed correctly in cmdline.txt. If you do not have a display, you may want to remove the default boot user of glenda so you get a normal rc prompt. To do so, remove user=glenda from cmdline.txt. In config.txt, put these lines in the [pi0] block: enable_uart=1 core_freq=250 You will need a USB to TTL serial cable (see https://www.adafruit.com/product/954). It must be attached to the correct pins (see https://learn.adafruit.com/raspberry-pi-zero-creation/give- it-life) Afterwards, if the machine to which the USB cable is connected is running Linux, you might run a command such as: $ sudo screen /dev/ttyUSB0 115200 Afterwards, you should see output like the following: - 2 - Plan 9 from Bell Labs board rev: 0x9000c1 firmware rev: 1648128071 vcore reports memory = 0x1f000000 cpu0: 1000MHz ARM 1176JZF-S clocks: CPU 1000000000 core 250000000 UART 48000000 EMMC 200000000 fp: 16 registers, simd fp: arm arch VFPv2; rev 5 #l0: usb: 100Mbps port 0x0 irq -1: 000000000000 #u/usb/ep1.0: dwcotg: port 0X0 irq 9 496M memory: 52M kernel data, 444M user, 1926M swap user[none]: pi At this point, it's recommended to continue configuration as pi, since pi is hostowner: time... fossil(#S/sdM0/fossil)...version... init: starting /bin/rc Can't cd /usr/pi: '/usr/pi' does not exist lib/profile: rc: .: can't open: '/bin/lib' file does not exist init: rc exit status: rc 31: error init: starting /bin/rc %