我已经使用 Yocto 创建了自己的 Sysroot,并通过 NFS 将其安装在 ARM 板上。它使用 systemd-networkd 和 systemd-resolved 进行联网。我是这样启动主板的:
U-Boot Bootloader 通过 tftp 加载内核和设备树,并通过
root=/dev/nfs nfsroot=192.168.xx:/Path/To/Sysroot,vers=3,tcp rootwait ro ip=dhcp
到内核。内核启动并从本地 DHCP 服务器接收 IP 和 DNS:
IP-Config: Complete:
device=eth0, hwaddr=XX:XX:XX:XX:XX:XX, ipaddr=192.168.X.X, mask=255.255.255.0, gw=192.168.X.X
host=192.168.XX.XX, domain=XXX.XX, nis-domain=(none)
bootserver=0.0.0.0, rootserver=192.168.XX.XX, rootpath=
nameserver0=192.168.XX.XX, nameserver1=192.168.XX.XX
之后,内核会挂载 NFS-Sysroot 并启动 SystemD。此时,systemd-networkd 服务将接管并从 DHCP 请求 IP。即使它收到的 IP 与内核之前收到的 IP 相同,也会破坏 nfs-mount。我通过将 systemd-networkd 配置文件更改为以下内容来避免这种情况:
[Match]
Name=eth0
KernelCommandLine=!nfsroot
[Network]
DHCP=ipv4
因此,仅当我不使用 nfsroot 时才应用该配置文件。
但是现在 DNS 不起作用。我可以使用以下命令查看之前检测到的 DNS 服务器:
cat /proc/net/pnp
#PROTO: DHCP
domain XXX.XX
nameserver 192.168.XX.XX
nameserver 192.168.XX.XX
bootserver 0.0.0.0
但系统似乎不使用它们。我该如何使用这些 DNS 服务器?