Yocto Setup TFTP/NFS: Difference between revisions

From Variscite Wiki
No edit summary
(40 intermediate revisions by 5 users not shown)
Line 1: Line 1:
<!-- Set release according to "release" parameter in URL and use MORTY_BETA_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}}}} <!--
--> {{#vardefine:RELEASE_PARAM|{{#urlget:release|RELEASE_MORTY_V1.0_DART-6UL}}}} <!--
--> {{#lst:Yocto_Platform_Customization|{{#var:RELEASE_PARAM|RELEASE_MORTY_BETA_DART-6UL}}}} <!--
--> {{#lst:Yocto_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{PageHeader|{{#var:HARDWARE_NAME}}- Yocto Setup TFTP/NFS}} {{DocImage|category1={{#var:HARDWARE_NAME}}|category2=Yocto}} __toc__
--> {{#lst:B2QT_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{PageHeader|{{#var:HARDWARE_NAME}} - Yocto Setup TFTP/NFS}} {{DocImage|category1={{#var:HARDWARE_NAME}}|category2=Yocto}} __toc__<!--
 
-->{{#vardefine:BUILD_FOLDER_DISTRO | {{ #varexists:BUILD_FOLDER_X11 | {{#var:BUILD_FOLDER_X11}} | {{ #varexists:BUILD_FOLDER_XWAYLAND | {{#var:BUILD_FOLDER_XWAYLAND}} | {{#var:BUILD_FOLDER_B2QT}} }} }} }}<!--
-->{{ #varexists:DEFAULT_IMAGE_BB_NAME | | {{ #vardefine:DEFAULT_IMAGE_BB_NAME | fsl-image-gui }} }}<!--
 
Show CONFIG_FEC note if these conditions met:
1. KERNEL_VER >= 5.4.24
2. KERNEL_DEFCONFIG == imx8mq_var_dart_defconfig
3. SOC_SERIES == imx8
or
1. KERNEL_VER < 5.4.24
2. SOC_SERIES == imx8
 
-->{{#vardefine:KERNEL_VER_VER|{{#explode:{{#var:KERNEL_VER}}|.|0}}}}<!--                                                                                    Parse Kernel Version XX.yy.zz
-->{{#vardefine:KERNEL_VER_MAJOR|{{#explode:{{#var:KERNEL_VER}}|.|1}}}}<!--                                                                                  Parse Kernel Version xx.YY.zz
-->{{#vardefine:KERNEL_VER_MINOR|{{#explode:{{#var:KERNEL_VER}}|.|2}}}}<!--                                                                                  Parse Kernel Version xx.yy.ZZ
-->{{#vardefine:SHOW_CONFIG_FEC|1}}<!--
Initialize SHOW_CONFIG_FEC = 1
 
Check KERNEL_VER and KERNEL_DEFCONFIG
-->{{#ifexpr: {{#var:KERNEL_VER_VER}}.{{#var:KERNEL_VER_MAJOR}} >= 5.4|{{#ifexpr: {{#var:KERNEL_VER_MINOR}} >= 24|<!--                                      if KERNEL_VER > 5.4.24
-->{{#ifeq: {{#var:KERNEL_DEFCONFIG}} | imx8mq_var_dart_defconfig ||<!--                                                                                    and KERNEL_DEFCONFIG != imx8mq_var_dart_defconfig
-->{{#vardefine:SHOW_CONFIG_FEC | 0}}<!--                                                                                                                    SHOW_CONFIG_FEC = 0
-->}}|<!--minor >= 24-->}}|<!--major >= 5.4-->}}<!--
-->{{#ifeq: {{#var:SOC_SERIES}} | imx8 ||{{#vardefine:SHOW_CONFIG_FEC|0}}}}<!--                                                                              if SOC_SERIES != mx8, SHOW_CONFIG_FEC = 0 -->
= Running Yocto rootfs on Variscite board using TFTP &amp; NFS  =
= Running Yocto rootfs on Variscite board using TFTP &amp; NFS  =


== Host  ==
== On the Host  ==
 
Prepare the rootfs folder:
Make sure you installed NFS server:  
$ sudo apt-get install nfs-kernel-server
  $ cd {{#var:BUILD_FOLDER}}
  $ cd {{#var:BUILD_FOLDER}}
  $ sudo mkdir rootfs
  $ sudo mkdir rootfs
  $ cd rootfs
  $ cd rootfs
  $ sudo tar xvf  ../{{#var:BUILD_FOLDER_X11}}/tmp/deploy/images/{{#var:MACHINE_NAME}}/fsl-image-gui-{{#var:MACHINE_NAME}}.tar.gz
  $ sudo tar xvf  ../{{#var:BUILD_FOLDER_DISTRO}}/tmp/deploy/images/{{#var:MACHINE_NAME}}/{{#var:DEFAULT_IMAGE_BB_NAME}}-{{#var:MACHINE_NAME}}.tar.gz
<pre>
$ sudo gedit /etc/exports
</pre>
Add the following line (change <uname> to the name of user):


  /home/<uname>/rootfs    *(rw,sync,no_root_squash,no_all_squash,no_subtree_check)
Make sure the NFS server is installed:
  $ sudo apt-get install nfs-kernel-server


exit &amp; save
 
<pre>$ sudo /etc/init.d/nfs-kernel-server restart</pre>
Edit /etc/exports. E.g.
Make sure you installed TFTP server:  
$ sudo gedit /etc/exports
<pre>$ sudo apt-get install xinetd tftpd tftp
...and add the following line to it (replace <uname> with the actual username):
Verify:
{{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs    *(rw,sync,no_root_squash,no_all_squash,no_subtree_check)
$ ls /usr/sbin/in.tftpd
 
$ sudo gedit /etc/xinetd.d/tftp
 
service tftp
Restart the NFS server:
{
$ sudo /etc/init.d/nfs-kernel-server restart
protocol = udp
 
port = 69
Make sure the TFTP server is installed:
socket_type = dgram
$ sudo apt-get install xinetd tftpd tftp
wait = yes
 
user = nobody
Verify the following:
server = /usr/sbin/in.tftpd
$ ls /usr/sbin/in.tftpd
server_args = /tftpboot
$ sudo gedit /etc/xinetd.d/tftp
disable = no
service tftp
}
{
</pre>
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 mkdir /tftpboot
  $ sudo chmod -R 777 /tftpboot
  $ sudo chmod -R 777 /tftpboot
  $ sudo /etc/init.d/xinetd restart
  $ sudo /etc/init.d/xinetd restart
  $ cd {{#var:BUILD_FOLDER}}/{{#var:BUILD_FOLDER_X11}}/
{{#ifeq: {{#var:SOC_SERIES}} | imx8 |
  $ cp tmp/deploy/images/{{#var:MACHINE_NAME}}/{{#var:KERNEL_IMAGE}} /tftpboot
<br>
  $ cp tmp/deploy/images/{{#var:MACHINE_NAME}}/{{#var:KERNEL_IMAGE}}-imx*.dtb /tftpboot
$ sudo cp -a {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs/boot/*.dtb /tftpboot
$ sudo cp {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs/boot/{{#var:KERNEL_IMAGE}} /tftpboot
|
<br>
  $ cd {{#var:BUILD_FOLDER}}/{{#var:BUILD_FOLDER_DISTRO}}/
  $ sudo cp tmp/deploy/images/{{#var:MACHINE_NAME}}/{{#var:KERNEL_IMAGE}} /tftpboot
  $ 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 rename 's/{{#var:KERNEL_IMAGE}}-//' /tftpboot/{{#var:KERNEL_IMAGE}}-*.dtb
  $ sudo rename 's/{{#var:KERNEL_IMAGE}}-//' /tftpboot/{{#var:KERNEL_IMAGE}}-*.dtb
{{#ifeq: {{#var:HARDWARE_NAME}} | DART-MX8M |
}}
$ cd /tftpboot
$ ln -s {{#var:MACHINE_NAME}}-dcss-lvds.dtb {{#var:MACHINE_NAME}}.dtb
}}


{{#ifeq: {{#var:HARDWARE_NAME}} | DART-MX8M |
{{#ifexpr: {{#var:SHOW_CONFIG_FEC}} |
{{Note|
{{Note|'''The default kernel configuration should be modified to compile Ethernet driver into kernel image instead compiling it as a loadable module.'''
Default kernel configuration should be modified to compile Ethernet driver into kernel image instead compiling it as a loadable module.<br>
Follow our kernel compilation guide {{Varlink|Yocto_Build_Linux|{{#var:RELEASE_LINK}}|Build kernel from source code}}<br>
Follow our kernel compilation guide [[#Yocto Build Linux|Build kernel from Source]]
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:
Compile the kernel and copy arch/arm64/boot/Image.gz to /tftpbbot   
CONFIG_AT803X_PHY=y
}}
CONFIG_ADIN_PHY=y
Compile the kernel and copy arch/arm64/boot/Image.gz to /tftpboot }}
}}
}}


== Target  ==
 
Make adjustments to the rootfs:<br><br>
 
When using NetworkManager on the target, configure NetworkManager not to manage the interface used for the NFS boot by adding the following to ''{{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs/etc/NetworkManager/NetworkManager.conf'':
[keyfile]
unmanaged-devices=interface-name:eth0
 
Enable DNS:
$ sudo ln -fs {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs/proc/net/pnp {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs/etc/resolv.conf
 
== On the Target  ==


Make sure you have a serial connection to the target.  
Make sure you have a serial connection to the target.  


Reset and hold the space bar. This will bring you to 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:
{{#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 - run 'ifconfig' on the host to get it)
=> setenv nfsroot {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs  (replace <uname> with the actual username)
=> setenv bootcmd run netboot
=> saveenv


$ setenv serverip 192.168.1.188
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.
$ setenv nfsroot {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs (change <uname> to the name of user)
$ setenv bootcmd run netboot
$ saveenv
You are all set. Pushing reset on the {{#var:HARDWARE_NAME}} board will run your Yocto result file system.<br>
<br>

Revision as of 17:22, 25 May 2022

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 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/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 /home/<uname>/var-fslc-yocto/rootfs/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.