Skip to content

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/imx8qm-var-som/fsl-image-gui-imx8qm-var-som.tar.gz

Make sure the NFS server is installed:

sudo apt install nfs-kernel-server

Edit /etc/exports, e.g.:

sudo nano /etc/exports

And add the following line to it (replace with the actual username):

/home/<uname>/var-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 install xinetd tftpd-hpa tftp-hpa

Ubuntu 22.04 and older:

sudo apt 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
cd ~/var-fsl-yocto/build_xwayland/
sudo cp /images/imx8qm-var-som/Image.gz /tftpboot
for f in /images/imx8qm-var-som/*.dtb; do if [[ -L $f ]] && [[ $f != *imx8qm-var-som.dtb ]]; then sudo cp $f /tftpboot; fi done
sudo rename 's/Image.gz-//' /tftpboot/Image.gz-*.dtb

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//var-yocto/rootfs/etc/NetworkManager/NetworkManager.conf:

[keyfile]
unmanaged-devices=interface-name:eth0

Enable DNS:

sudo ln -fs /proc/net/pnp /home/<uname>/var-yocto/rootfs/etc/resolv.conf

On the Target

Make sure you have a serial connection to the target.

Boot the board and hit any key to stop the autoboot and get to the U-Boot command line. Run the following in the U-Boot command line:

Replace <HOST_IP_ADDRESS> with the actual IP address of your host. Run ifconfig on the host to get it.

Replace <uname> with the actual username.

setenv serverip <HOST_IP_ADDRESS>

setenv nfsroot /home/<uname>/var-yocto/rootfs

setenv bootcmd run netboot
saveenv

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.