Yocto Setup TFTP/NFS: Difference between revisions

From Variscite Wiki
No edit summary
 
(23 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<!-- Set release according to "release" parameter in URL and use MORTY_V1.0_DART-6UL as default
<!-- Set release according to "release" parameter in URL and use MORTY_V1.0_DART-6UL as default
--> {{#vardefine:RELEASE_PARAM|{{#urlget:release|RELEASE_MORTY_V1.0_DART-6UL}}}} <!--
--> {{INIT_RELEASE_PARAM|RELEASE_MORTY_V1.0_DART-6UL}}<!--
--> {{#lst:Yocto_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#lst:Yocto_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#lst:B2QT_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#lst:B2QT_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#lst:Debian_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{COMMON_YOCTO_VARS}}<!--
--> {{PageHeader|{{#var:HARDWARE_NAME}} - Yocto Setup TFTP/NFS}} {{DocImage|category1={{#var:HARDWARE_NAME}}|category2=Yocto}} __toc__<!--
--> {{PageHeader|{{#var:HARDWARE_NAME}} - Yocto Setup TFTP/NFS}} {{DocImage|category1={{#var:HARDWARE_NAME}}|category2=Yocto}} __toc__<!--


Line 31: Line 33:


== On the Host  ==
== On the Host  ==
{{#vardefine:decompressionCommand|
{{#switch: {{#var:RECOVERY_SD_NAME_COMP}}
| zst=sudo zstd -d ../{{#var:BUILD_FOLDER_DISTRO}}/{{#var:TMPDIR}}/deploy/images/{{#var:MACHINE_NAME}}/{{#var:DEFAULT_IMAGE_BB_NAME}}-{{#var:MACHINE_NAME}}.tar.zst --stdout {{!}} sudo tar xvf -
| #default=sudo tar xvf ../{{#var:BUILD_FOLDER_DISTRO}}/{{#var:TMPDIR}}/deploy/images/{{#var:MACHINE_NAME}}/{{#var:DEFAULT_IMAGE_BB_NAME}}-{{#var:MACHINE_NAME}}.tar.{{#var:RECOVERY_SD_NAME_COMP|gz}}
}}
}}
Prepare the rootfs folder:
Prepare the rootfs folder:
  $ cd {{#var:BUILD_FOLDER}}
  $ cd {{#var:BUILD_FOLDER}}
  $ sudo mkdir rootfs
  $ sudo mkdir rootfs
  $ cd rootfs
  $ cd rootfs
  $ sudo tar xvf  ../{{#var:BUILD_FOLDER_DISTRO}}/tmp/deploy/images/{{#var:MACHINE_NAME}}/{{#var:DEFAULT_IMAGE_BB_NAME}}-{{#var:MACHINE_NAME}}.tar.gz
  $ {{#var:decompressionCommand}}


Make sure the NFS server is installed:
Make sure the NFS server is installed:
Line 42: Line 51:


Edit /etc/exports. E.g.
Edit /etc/exports. E.g.
  $ sudo gedit /etc/exports
  $ sudo nano /etc/exports
...and add the following line to it (replace <uname> with the actual username):  
...and add the following line to it (replace <uname> with the actual username):  
  {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs    *(rw,sync,no_root_squash,no_all_squash,no_subtree_check)  
  {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs    *(rw,sync,no_root_squash,no_all_squash,no_subtree_check)  
Line 51: Line 60:


Make sure the TFTP server is installed:
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
  $ sudo apt-get install xinetd tftpd tftp


Verify the following:
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
  $ ls /usr/sbin/in.tftpd
  $ sudo gedit /etc/xinetd.d/tftp
  $ sudo nano /etc/xinetd.d/tftp
  service tftp
  service tftp
  {
  {
Line 67: Line 87:
  disable = no
  disable = no
  }
  }
and run:
and run:
  $ sudo mkdir /tftpboot
  $ sudo mkdir /tftpboot
  $ sudo chmod -R 777 /tftpboot
  $ sudo chmod -R 777 /tftpboot
  $ sudo /etc/init.d/xinetd restart
  $ sudo systemctl restart xinetd
  $ cd {{#var:BUILD_FOLDER}}/{{#var:BUILD_FOLDER_DISTRO}}/
  $ sudo systemctl restart tftpd-hpa
{{#ifeq: {{#var:SOC_SERIES}} | imx8 |
{{#ifeq: {{#var:SOC_SERIES}} | imx8 |
<br>
<br>
Line 78: Line 99:
|
|
<br>
<br>
  $ sudo cp tmp/deploy/images/{{#var:MACHINE_NAME}}/{{#var:KERNEL_IMAGE}} /tftpboot
$ cd {{#var:BUILD_FOLDER}}/{{#var:BUILD_FOLDER_DISTRO}}/
  $ for f in tmp/deploy/images/{{#var:MACHINE_NAME}}/*.dtb; do if <nowiki>[[ -L $f ]] && [[</nowiki> $f != *{{#var:MACHINE_NAME}}.dtb <nowiki>]]</nowiki>; then sudo cp $f /tftpboot; fi done
  $ sudo cp {{#var:TMPDIR}}/deploy/images/{{#var:MACHINE_NAME}}/{{#var:KERNEL_IMAGE}} /tftpboot
  $ for f in {{#var:TMPDIR}}/deploy/images/{{#var:MACHINE_NAME}}/*.dtb; do if <nowiki>[[ -L $f ]] && [[</nowiki> $f != *{{#var:MACHINE_NAME}}.dtb <nowiki>]]</nowiki>; then sudo cp $f /tftpboot; fi done
  $ sudo rename 's/{{#var:KERNEL_IMAGE}}-//' /tftpboot/{{#var:KERNEL_IMAGE}}-*.dtb
  $ sudo rename 's/{{#var:KERNEL_IMAGE}}-//' /tftpboot/{{#var:KERNEL_IMAGE}}-*.dtb
}}
}}
Line 87: Line 109:
Follow our kernel compilation guide {{Varlink|Yocto_Build_Linux|{{#var:RELEASE_LINK}}|Build kernel from source code}}<br>
Follow our kernel compilation guide {{Varlink|Yocto_Build_Linux|{{#var:RELEASE_LINK}}|Build kernel from source code}}<br>
Run "make menuconfig", go to "Device Drivers → Network device support → Ethernet driver support → Freescale devices → FEC ethernet controller" and press y.
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:<br>
CONFIG_AT803X_PHY&#61;y<br>
CONFIG_ADIN_PHY&#61;y<br>
Compile the kernel and copy arch/arm64/boot/Image.gz to /tftpboot }}
Compile the kernel and copy arch/arm64/boot/Image.gz to /tftpboot }}
}}
}}
Line 98: Line 123:


Enable DNS:
Enable DNS:
  $ ln -fs {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs/proc/net/pnp {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs/etc/resolv.conf
  $ sudo ln -fs /proc/net/pnp {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs/etc/resolv.conf
 
== On the Target  ==
{{#ifeq: {{#var:HARDWARE_NAME}} | VAR-SOM-AM62 |
Update the U-Boot enviroment by adding the following lines to the uEnv.txt file on the SD card/eMMC boot partition:
<pre>
svrip=<HOST_IP_ADDRESS>  (replace <HOST_IP_ADDRESS> with the actual IP address of your host - run 'ifconfig' on the host to get it)
ipaddr=<TARGET_IP_ADDRESS> (replace <TARGET_IP_ADDRESS> with the IP address for the target)
image=Image
 
rootpath=/home/<uname>/var-fslc-yocto/rootfs
fdtfile=k3-am625-var-som-symphony.dtb


netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},nolock,v3 rw ip=${ipaddr}:::::eth0


== On the Target  ==
netboot=tftp ${loadaddr} ${image}; tftp ${fdtaddr} ${fdtfile}; run netargs; booti ${loadaddr} - ${fdtaddr}


uenvcmd=setenv serverip ${svrip}; setenv ipaddr ${ipaddr}; run netboot
</pre>
|
Make sure you have a serial connection to 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.
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 :
Run the following in the U-Boot command line:
  {{#ifeq: {{#var:HARDWARE_NAME}} | VAR-SOM-MX7 | => setenv image zImage}}
  {{#ifeq: {{#var:HARDWARE_NAME}} | VAR-SOM-MX7 | => setenv image zImage}}
  => setenv serverip <HOST_IP_ADDRESS>  (replace <HOST_IP_ADDRESS> with the actual IP address of your host running the TFTP server)
  => 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 {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs  (replace <uname> with the actual username)
  => setenv nfsroot {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs  (replace <uname> with the actual username)
  => setenv bootcmd run netboot
  => setenv bootcmd run netboot
  => saveenv
  => 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.
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.

Latest revision as of 16:14, 29 October 2024

Warning: This page is designed to be used with a 'release' URL parameter.

This page is using the default release RELEASE_MORTY_V1.0_DART-6UL.
To view this page for a specific Variscite SoM and software release, please follow these steps:

  1. Visit variwiki.com
  2. Select your SoM
  3. Select the software release
DART-6UL - Yocto Setup TFTP/NFS

Running Yocto rootfs on Variscite board using TFTP & NFS

On the Host

Prepare the rootfs folder:

$ cd ~/var-fslc-yocto
$ sudo mkdir rootfs
$ cd rootfs
$ sudo tar xvf ../build_x11/tmp/deploy/images/imx6ul-var-dart/fsl-image-gui-imx6ul-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-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-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


$ cd ~/var-fslc-yocto/build_x11/
$ sudo cp tmp/deploy/images/imx6ul-var-dart/zImage /tftpboot
$ for f in tmp/deploy/images/imx6ul-var-dart/*.dtb; do if [[ -L $f ]] && [[ $f != *imx6ul-var-dart.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:

[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.