Skip to content

Boot2Qt Setup TFTP/NFS

Running Yocto rootfs on Variscite board using TFTP & NFS

On the Host

Prepare the rootfs folder:

cd ~/var-b2qt
sudo mkdir rootfs
cd rootfs
sudo tar xvf ../build_xwayland/images/imx7-var-som/b2qt-embedded-qt6-imx7-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-fslc-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
sudo cp -a /home/<uname>/var-fslc-yocto/rootfs/boot/*.dtb /tftpboot
sudo cp /home/<uname>/var-fslc-yocto/rootfs/boot/Image.gz /tftpboot

The default kernel configuration should be modified to compile Ethernet driver into kernel image instead compiling it as a loadable module.

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

Compile the kernel and copy arch/arm64/boot/Image.gz to /tftpboot

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

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

Enable DNS:

sudo ln -fs /proc/net/pnp /home/<uname>/var-fslc-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:

=> setenv serverip <HOST_IP_ADDRESS>  (replace <HOST_IP_ADDRESS> with the actual IP address of your host - run 'ifconfig' on the host to get it)
=> setenv nfsroot /home/<uname>/var-fslc-yocto/rootfs  (replace <uname> with the actual username)
=> 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.