树莓派3B、3B+、2B v1.2和4(需要修改Bootloader)都支持从有线网网络启动,网络启动可以使一些型号的树莓派无需SD卡即可使用。用dnsmasq引导树莓派启动的方法在官方文档中已经说得很清楚了,但如果内网已经配置成用ISC的DHCP服务端给客户机分配IP地址,我们如何把它配置成能引导树莓派网络启动的程序呢?

通过对dnsmasq的DHCP响应抓包分析可得,在/etc/dhcp/dhcpd.conf中添加以下配置即可使isc-dhcp-server发出同样的DHCP响应:

...
option space RPi code width 1 length width 1;
option RPi.discovery code 6 = unsigned integer 8;
option RPi.menu-prompt code 10 = text;
option RPi.menu-item code 9 = text;
group {
  vendor-option-space RPi;
  option RPi.discovery 3;
  option RPi.menu-prompt "PXE";
  option RPi.menu-item "Raspberry Pi Boot ";

  option routers <网关IP>;
  next-server <TFTP服务器IP>;

  host rpi-1 {
    hardware ethernet b8:27:eb:xx:xx:xx;
    fixed-address 192.168.1.140;
  }
}
...

与此同时,我们仍然需要dnsmasq提供TFTP服务。但是要禁用dnsmasq的DHCP服务,不然dnsmasq会因为isc-dhcp-server已经在监听UDP 53端口而不能启动。

/etc/dnsmasq.conf:

port=0
enable-tftp
tftp-root=/srv/raspberrypi/boot
interface=eth1