Yocto Setup TFTP/NFS: Difference between revisions
No edit summary |
No edit summary |
||
(69 intermediate revisions by 7 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 = | ||
== 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: | |||
$ cd {{#var:BUILD_FOLDER}} | $ cd {{#var:BUILD_FOLDER}} | ||
$ sudo mkdir rootfs | $ sudo mkdir rootfs | ||
$ cd rootfs | $ cd rootfs | ||
$ | $ {{#var:decompressionCommand}} | ||
add ( | 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 | |||
$ ls /usr/sbin/in.tftpd | $ sudo apt-get install xinetd tftpd tftp | ||
$ sudo | |||
service tftp | Configure tftpd-hpa for '''Ubuntu 24.04''' and newer: | ||
{ | $ sudo nano /etc/default/tftpd-hpa | ||
protocol = udp | TFTP_USERNAME="tftp" | ||
port = 69 | TFTP_DIRECTORY="/tftpboot" | ||
socket_type = dgram | TFTP_ADDRESS=":69" | ||
wait = yes | TFTP_OPTIONS="--secure" | ||
user = nobody | |||
server = /usr/sbin/in.tftpd | Configure tftpd for '''Ubuntu 22.04''' and older: | ||
server_args = /tftpboot | $ ls /usr/sbin/in.tftpd | ||
disable = no | $ 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: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 | ||
}} | |||
{{#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 == | |||
{{#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 | |||
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:14, 29 October 2024
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/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.