工具与软件:
如何在主机上设置 tftp 和 nfs 以引导板上的 Linux?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
本文档的目的是介绍如何设置电路板以使用 TFTP 和 NFS 启动。 这对于开发人员非常有用、这样他们无需反复拔下 SD 卡即可重建和编辑内核。
免责声明 :这些指令假定用户正在尝试构建 ti-linux-6.6.6.y 内核并使用 SK-TDA4VM。 但是、这些指令应该可以转交给大多数(如果不是全部) Jacinto 器件。
项 | 该设计的链接 |
---|---|
主机中 | 运行 tftp 和 nfs 服务器的主机 |
以太网线缆 | 用于连接主机和目标的电缆 |
USB 转以太网适配器 | 用于将主机连接到目标的适配器(可能不需要) |
sudo apt install network-manager
picocom
用于通过串行端口与器件连接。
$ picocom -b 115200 /dev/ttyUSB2
将电路板连接到主机。 注意电路板与之关联的接口。 该接口可能是 enxxx
。 您还可以检查 ifconfg
插入电缆时显示的接口。
# ethernet cable (and adapter) is unplugged
$ ifconfig
# note interfaces
# plug in cable
$ ifconfig
# note the new interface
然后、您将配置该接口的 IP 地址。
$ nmcli con add type ethernet ifname <enxxx> ip4 192.168.1.1/24
目标需要已设置具有引导分区的 SD 卡。 引导分区主要需要包含以下文件:
tiboot3.bin
tispl.bin
u-boot.img
uEnv.txt
(不需要) 这可以通过使用与该板对应的默认 WIC 映像对 SD 卡进行刷写来实现。 还有其他更复杂的方法可以做到、但这是最简单的方法。
假设、如果使用 tftp 和 nfs 进行开发、则将重建并重新加载内核。 具体步骤如下。
$ wget https://developer.arm.com/-/media/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
$ tar -xf https://developer.arm.com/-/media/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
$ export PATH=$PATH:arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-linux-gnu/bin
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-none-linux-gnu-
$ git clone -b ti-linux-6.6.y https://git.ti.com/git/ti-linux-kernel/ti-linux-kernel.git
$ cd ti-linux-kernel
$ make defconfig ti_arm64_prune.config
$ make -j`nproc` Image modules dtbs
$ cd ../
$ sudo apt install tftpd-hpa
检查正在导出的目录。 该 sed
命令集 TFTP_DIR
可以简化将来复制命令的过程。
$ grep TFTP_DIRECTORY /etc/default/tftpd-hpa
$ export TFTP_DIR=`sed -n 's/TFTP_DIRECTORY="\(.*\)"/\1/p' /etc/default/tftpd-hpa`
将内核映像和设备树 blob 复制到导出的目录中。
$ cp ti-linux-kernel/arch/arm64/boot/Image $TFTP_DIR/
$ cp ti-linux-kernel/arch/arm64/boot/dts/ti/k3-j721e-sk.dtb $TFTP_DIR/
如果 tftp 目录需要超级用户访问权限、您可以执行以下命令来授予您的用户读取、写入和执行权限:
$ sudo setfacl -m u:`whoami`:rwx $TFTP_DIR
重置 tftp 服务器以确保没有问题:
$ sudo /etc/init.d/tftpd-hpa restart
启动电路板并在 u-boot 提示符处将其停止:
Hit any key to stop autoboot: 0
=>
设置环境变量:
=> setenv ipaddr 192.168.1.100
=> setenv serverip 192.168.1.1
传输映像和器件树状块:
=> tftp 0x80000000 Image
=> tftp 0x83000000 k3-j721e-sk.dtb
$ sudo apt install nfs-kernel-server
对相关电路板使用 rootfs tarball。 例如、您可以使用 tisdk-default-image-j721e-sk.rootfs.tar.xz
。 该模块可以使用 Yocto 进行构建。
$ mkdir nfsroot
$ tar -xf tisdk-default-image-j721e-sk.rootfs.tar.xz -C nfsroot
$ echo "$PWD/nfsroot 192.168.1.100(rw,no_root_squash,no_subtree_check)" >> /etc/exports
$ sudo exportfs -r
复位电路板并在 u-boot 提示符处停止。
您需要 <nfsroot-directory>
使用正确的路径替换。
=> setenv ipaddr 192.168.1.100
=> setenv serverip 192.168.1.1
=> setenv bootcmd 'tftp 0x80000000 Image; tftp 0x83000000 k3-j721e-sk.dtb; booti 0x80000000 - 0x83000000'
=> setenv bootargs root=/dev/nfs rw ip=192.168.1.100:::::eth0 console=ttyS2,115200n8 nfsroot=192.168.1.1:<nfsroot-directory>,nfsvers=3,tcp
=> boot
uEnv.txt
如果希望环境变量在复位之间保持不变、应该能够在中设置环境变量。 fdtoverlay
应用程序、然后使用 新生成的器件树状块进行引导 $ fdtoverlay -i <base-dtb> -o <new-dtb> <overlay-dtbo>