Я создал свой собственный Sysroot с Yocto и монтировал его через NFS на плате ARM. Он использует systemd-networkd и systemd-resolved для работы в сети. Я начинаю доску так:
U-Boot Bootloader загружает ядро и devicetree через tftp и передает
root =/dev/nfs nfsroot = 192.168.xx:/Path/To/Sysroot, vers = 3, tcp rootwait ro ip = dhcp
в ядро. Ядро запускается и получает IP и DNS с нашего локального DHCP-сервера:
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 вступит во владение и запросит IP у DHCP. Даже если он получит тот же IP, что и ядро, полученное ранее, это нарушит nfs-mount. Я избегаю этого, изменив мой файл конфигурации systemd-networkd на:
[Match]
Name=eth0
KernelCommandLine=!nfsroot
[Network]
DHCP=ipv4
Таким образом, файл конфигурации применяется только тогда, когда я не использую nfsroot.
Но сейчас днс не работает. Я вижу ранее обнаруженные 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-серверы?