Skip to content

Boot2Qt Setup TFTP/NFS

Running Boot2Qt 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/imx6ul-var-dart/b2qt-embedded-qt6-imx6ul-var-dart.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 the kernel image instead of 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:

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

setenv serverip <HOST_IP_ADDRESS>

Replace <uname> with the actual username.

setenv nfsroot /home/<uname>/var-fslc-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.