Yocto Setup TFTP/NFS
Running Yocto rootfs on Variscite board using TFTP & NFS
On the Host
Prepare the rootfs folder:
$ cd ~/var-fsl-yocto $ sudo mkdir rootfs $ cd rootfs $ sudo tar xvf ../build_xwayland//images/imx8mm-var-dart/fsl-image-gui-imx8mm-var-dart.tar.gz
Make sure the NFS server is installed:
$ sudo apt-get install nfs-kernel-server
Edit /etc/exports. E.g.
$ sudo nano /etc/exports
...and add the following line to it (replace <uname> with the actual username):
/home/<uname>/var-fsl-yocto/rootfs *(rw,sync,no_root_squash,no_all_squash,no_subtree_check)
Restart the NFS server:
$ sudo /etc/init.d/nfs-kernel-server restart
Make sure the TFTP server is installed:
# Ubuntu 24.04 and newer $ sudo apt-get install xinetd tftpd-hpa tftp-hpa # Ubuntu 22.04 and older $ sudo apt-get install xinetd tftpd tftp
Configure tftpd-hpa for Ubuntu 24.04 and newer:
$ sudo nano /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure"
Configure tftpd for Ubuntu 22.04 and older:
$ ls /usr/sbin/in.tftpd $ sudo nano /etc/xinetd.d/tftp service tftp { protocol = udp port = 69 socket_type = dgram wait = yes user = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot disable = no }
and run:
$ sudo mkdir /tftpboot $ sudo chmod -R 777 /tftpboot $ sudo systemctl restart xinetd $ sudo systemctl restart tftpd-hpa
$ sudo cp -a /home/<uname>/var-fsl-yocto/rootfs/boot/*.dtb /tftpboot $ sudo cp /home/<uname>/var-fsl-yocto/rootfs/boot/Image.gz /tftpboot
Follow our kernel compilation guide Build kernel from source code
Run "make menuconfig", go to "Device Drivers → Network device support → Ethernet driver support → Freescale devices → FEC ethernet controller" and press y.
Follow this same process to also change the following drivers to built-in:
CONFIG_AT803X_PHY=y
CONFIG_ADIN_PHY=y
Make adjustments to the rootfs:
When using NetworkManager on the target, configure NetworkManager not to manage the interface used for the NFS boot by adding the following to /home/<uname>/var-fsl-yocto/rootfs/etc/NetworkManager/NetworkManager.conf:
[keyfile] unmanaged-devices=interface-name:eth0
Enable DNS:
$ sudo ln -fs /proc/net/pnp /home/<uname>/var-fsl-yocto/rootfs/etc/resolv.conf
On the Target
You are all set. Connect the target board to the same network as the host using an Ethernet cable, power cycle it and it should boot over NFS.