Yocto Setup TFTP/NFS

From Variscite Wiki
VAR-SOM-MX7 - Yocto Setup TFTP/NFS

1 Running Yocto rootfs on Variscite board using TFTP & NFS

1.1 On the Host

Prepare the rootfs folder:

$ cd ~/var-fslc-yocto
$ sudo mkdir rootfs
$ cd rootfs
$ sudo tar xvf  ../build_x11/tmp/deploy/images/imx7-var-som/fsl-image-gui-imx7-var-som.tar.gz

Make sure the NFS server is installed:

$ sudo apt-get install nfs-kernel-server

Edit /etc/exports. E.g.

$ sudo gedit /etc/exports

...and add the following line to it (replace <uname> 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:

$ sudo apt-get install xinetd tftpd tftp

Verify the following:

$ ls /usr/sbin/in.tftpd
$ sudo gedit /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 /etc/init.d/xinetd restart

$ cd ~/var-fslc-yocto/build_x11/
$ sudo cp tmp/deploy/images/imx7-var-som/zImage /tftpboot
$ for f in tmp/deploy/images/imx7-var-som/*.dtb; do if [[ -L $f ]] && [[ $f != *imx7-var-som.dtb ]]; then sudo cp $f /tftpboot; fi done
$ sudo rename 's/zImage-//' /tftpboot/zImage-*.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/<uname>/var-fslc-yocto/rootfs/etc/NetworkManager/NetworkManager.conf:


Enable DNS:

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

1.2 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 image zImage
=> 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.