In order to do this, I modified the EEPROM bootloader bootloader according to the instructions in the Raspberry Pi documentation. That page is also on GitHub which might be a more stable location. On Raspbian on the Raspberry Pi:
I enabled UART debugging, and set the boot order to be: network
0x2, SD card
0x1, USB mass storage
0x4, and finally reboot
0xf. These steps need to be
repeated if the bootloader is updated via apt.
I enabled the TFTP server on my Mac:
I’m not sure if the
enable command is actually necessary. This doesn’t
actually start the
tftpd daemon. Instead, macOS starts the daemon on demand
when it notices an incoming tftp request on the network. Don’t be alarmed!
The tftp server looks for files to serve out of
/private/tftpboot, and those
things need to be world
777. By default (this is configurable) the
Raspberry Pi queries for a directory named by its serial number.
Raspberry Pi looks for files of various names in that directory, one in
particular by the name of
Next, I had to update my Ubiquiti router’s DHCP server configuration (on the
command line) to pass a
tftp-server parameter in the DHCP payload. This step
may be optional because you can also set
TFTP_IP in the
to specify the IP directly. On my router:
I also gave my Mac a static IP, and renewed the DHCP lease so it took the new IP to make the whole process a little more smooth. Now, it appears the Raspberry Pi will attempt a TFTP boot, and I see queries in the logs on my Mac.