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.

[FAQ] [参考译文] [常见问题解答] SK-TDA4VM:如何为 Linux 设置 TFTP 和 NFS?

Guru**** 1815690 points
Other Parts Discussed in Thread: SK-TDA4VM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1411644/faq-sk-tda4vm-how-do-i-set-up-tftp-and-nfs-for-linux

器件型号:SK-TDA4VM

工具与软件:

如何在主机上设置 tftp 和 nfs 以引导板上的 Linux?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    设置 TFTP 和 NFS

    本文档的目的是介绍如何设置电路板以使用 TFTP 和 NFS 启动。 这对于开发人员非常有用、这样他们无需反复拔下 SD 卡即可重建和编辑内核。

    免责声明 :这些指令假定用户正在尝试构建 ti-linux-6.6.6.y 内核并使用 SK-TDA4VM。 但是、这些指令应该可以转交给大多数(如果不是全部) Jacinto 器件。

    1.要求

    该设计的链接
    主机中 运行 tftp 和 nfs 服务器的主机
    以太网线缆 用于连接主机和目标的电缆
    USB 转以太网适配器 用于将主机连接到目标的适配器(可能不需要)

    2.设置硬件

    2.1.设置主机

    2.1.1.安装所需的软件包

    sudo apt install network-manager

    picocom 用于通过串行端口与器件连接。

    $ picocom -b 115200 /dev/ttyUSB2

    2.1.2.设置接口

    将电路板连接到主机。 注意电路板与之关联的接口。 该接口可能是 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
    

    2.2.设定目标

    目标需要已设置具有引导分区的 SD 卡。 引导分区主要需要包含以下文件:

    • tiboot3.bin
    • tispl.bin
    • u-boot.img
    • uEnv.txt (不需要)

    这可以通过使用与该板对应的默认 WIC 映像对 SD 卡进行刷写来实现。 还有其他更复杂的方法可以做到、但这是最简单的方法。

    3.构建内核

    假设、如果使用 tftp 和 nfs 进行开发、则将重建并重新加载内核。 具体步骤如下。

    3.1.下载交叉编译工具链

    $ 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-
    

    3.2.构建内核

    $ 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 ../
    

    4.设置 TFTP

    4.1.安装所需的软件包

    $ sudo apt install tftpd-hpa
    

    4.2.导出文件

    检查正在导出的目录。 该 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

    4.3.测试 TFTP

    重置 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
    

    5.设置 NFS

    5.1.安装所需的软件包

    $ sudo apt install nfs-kernel-server
    

    5.2.设置文件系统

    对相关电路板使用 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
    

    6.使用 TFTP 和 NFS 启动主板

    复位电路板并在 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
    

    7、其他注意事项

    •  uEnv.txt 如果希望环境变量在复位之间保持不变、应该能够在中设置环境变量。
    • 要应用器件树覆盖、您可以使用该 fdtoverlay 应用程序、然后使用 新生成的器件树状块进行引导
    $ fdtoverlay -i <base-dtb> -o <new-dtb> <overlay-dtbo>