Yocto Setup TFTP/NFS: Difference between revisions
(→Host) |
|||
(104 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
<!-- Set release according to "release" parameter in URL and use | <!-- Set release according to "release" parameter in URL and use MORTY_V1.0_DART-6UL as default | ||
--> {{# | --> {{INIT_RELEASE_PARAM|RELEASE_MORTY_V1.0_DART-6UL}}<!-- | ||
--> {{#lst: | --> {{#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}}}} <!-- | ||
--> {{#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__<!-- | |||
-->{{#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 & NFS = | = Running Yocto rootfs on Variscite board using TFTP & NFS = | ||
{{#ifexist: {{#var:ROOTFS_COMP_TARBALL_EXT}} || | |||
{{#ifeq: {{KERNEL_VERSION_NEWER|{{#var:KERNEL_VER}}|6.6.23}} | true | | |||
{{#vardefine:ROOTFS_COMP_TARBALL_EXT|rootfs.tar.zst}} <!-- Releases starting from Scarthgap (6.6.23) --> | |||
| | |||
{{#ifeq: {{KERNEL_VERSION_NEWER|{{#var:KERNEL_VER}}|6.1.22}} | true | | |||
{{#vardefine:ROOTFS_COMP_TARBALL_EXT|tar.zst}} <!-- Releases starting from Mickledore (6.1.22) --> | |||
| | |||
{{#vardefine:ROOTFS_COMP_TARBALL_EXT|tar.gz}} <!-- Older than the statements above --> | |||
}} | |||
}} | |||
}} | |||
== On the Host == | |||
{{#vardefine:decompressionCommand| | |||
{{#switch: {{#var:RECOVERY_SD_NAME_COMP}} | |||
| zst=sudo tar --zstd -xvf ../{{#var:BUILD_FOLDER_DISTRO}}/{{#var:DEPLOY_DIR}}/images/{{#var:MACHINE_NAME}}/{{#var:DEFAULT_IMAGE_BB_NAME}}-{{#var:MACHINE_NAME}}.{{#var:ROOTFS_COMP_TARBALL_EXT}} | |||
| #default=sudo tar xvf ../{{#var:BUILD_FOLDER_DISTRO}}/{{#var:DEPLOY_DIR}}/images/{{#var:MACHINE_NAME}}/{{#var:DEFAULT_IMAGE_BB_NAME}}-{{#var:MACHINE_NAME}}.tar.{{#var:RECOVERY_SD_NAME_COMP|gz}} | |||
}} | |||
}} | |||
Prepare the rootfs folder: | |||
$ cd {{#var:BUILD_FOLDER}} | $ cd {{#var:BUILD_FOLDER}} | ||
$ sudo mkdir rootfs | $ sudo mkdir rootfs | ||
$ cd rootfs | $ cd rootfs | ||
$ sudo | $ {{#var:decompressionCommand}} | ||
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): | |||
{{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/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 mkdir /tftpboot | ||
$ sudo chmod -R 777 /tftpboot | $ sudo chmod -R 777 /tftpboot | ||
$ sudo / | $ sudo systemctl restart xinetd | ||
$ cd {{#var:BUILD_FOLDER}}/{{#var: | $ sudo systemctl restart tftpd-hpa | ||
$ cp | {{#ifeq: {{#var:SOC_SERIES}} | imx8 | | ||
$ | <br> | ||
$ 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 {{#var:DEPLOY_DIR}}/images/{{#var:MACHINE_NAME}}/{{#var:KERNEL_IMAGE}} /tftpboot | |||
$ for f in {{#var:DEPLOY_DIR}}/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 | |||
}} | |||
{{#ifexpr: {{#var:SHOW_CONFIG_FEC}} | | |||
{{Note|'''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 {{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. | |||
Follow this same process to also change the following drivers to built-in:<br> | |||
CONFIG_AT803X_PHY=y<br> | |||
CONFIG_ADIN_PHY=y<br> | |||
Compile the kernel and copy arch/arm64/boot/Image.gz to /tftpboot }} | |||
}} | |||
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 /proc/net/pnp {{#var:BUILD_FOLDER_ABSOLUTE_PATH}}/rootfs/etc/resolv.conf | |||
== On the Target == | |||
{{#switch: {{#var:HARDWARE_NAME}} | |||
|VAR-SOM-AM62 | |||
|VAR-SOM-AM62P= | |||
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 | ||
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. | |||
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 | |||
You are all set. | => 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. |
Latest revision as of 16:28, 24 April 2025
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:
- Visit variwiki.com
- Select your SoM
- Select the software release
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//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 /images/imx6ul-var-dart/zImage /tftpboot $ for f in /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
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.