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.

[参考译文] Linux/TMDSICE3359:TFTP 引导

Guru**** 2539500 points
Other Parts Discussed in Thread: AM3359

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/807700/linux-tmdsice3359-tftp-boot

器件型号:TMDSICE3359
主题中讨论的其他器件:AM3359

工具/软件:Linux

您好!

我有一个 TMDSICE_v2、我将使用它来设置工作开发基准。

到目前为止:

1) 1)我已设置基于 Ubuntu 18.0.4的主机 Linux 开发平台。

2) 2)我已在主机上下载并安装了 AM3359的 SDK、并运行 setup.sh 脚本。

3) 3)我已删除 TMDSICE_v2上的 SPI 闪存并准备好 SD 卡。

3) 3)我还通过 USB1完成了 Minicom 工作。  

4) 4)我可以使用 minicom 和 SD 卡引导 TMDSICE_v2、我可以以 root 身份登录。 am3359-EVM 在目标上引导。

5) 5)我现在想通过 TFTP 引导。 我以前在 Ubuntu 主机上安装了 TFTP 服务器、并使用另一台 Windows 计算机对其进行了测试。 我可以使用 get 和 put 命令将文件从 Linux 主机传输到 Windows 计算机。 我认为 Ubuntu 主机上的 TFTP 工作正常、并且正在运行。

6) 6)要通过 TFTP 使用 U-boot 进行引导、我会中断目标引导过程。 我使用"=>"提示输入 U-Boot 命令行。 我在该部分中找不到直接的 TI 文档来帮助我。 但使用通用 U-Boot 指南、但此处的过程显示了我所做的:

U-Boot 2018.01-g9d984f4548 (2019年4月06日- 07:42:30 +0000)

CPU:AM335X-GP 修订版2.1
型号:TI AM3359 ICE-V2
DRAM:256 MIB
eth0、PRU
ETH1、PRU
NAND:0 MIB
MMC:OMAP SD/MMC:0
NET:cpsw、USB_ether
按任意键停止自动引导:0
=>设置 serverip 192.168.2.60
=> saveenv
正在将环境保存到 FAT...
正在写入 uboot.env
FAT:未对齐的缓冲器地址(8def12f8)
完成
=>设置 origbootcmd "bootcmd"
=> printenv origbootcmd
origbootcmd=bootcmd
=>设置自动载入否
=>设置 bootcmd "tftp ${kernel_addr}${serverip}:zImage;tftp ${fdt_addr}${serverip}:AM335x-icev2.dtb;booti ${kernel_addr}-${fdt_addr}"
=>重新引导
未知命令'reboot'-尝试'help'
=>引导
端口0、速度100、全双工上的链路
使用 cpsw 器件
来自服务器192.168.2.60的 TFTP;我们的 IP 地址为192.168.2.63
文件名'zImage'。
加载地址:0x82000000
正在加载:*
超过 ARP 重试计数;重新开始
端口0、速度100、全双工上的链路
使用 cpsw 器件
来自服务器192.168.2.60的 TFTP;我们的 IP 地址为192.168.2.63
文件名'AM335x-icev2.dtb'。
加载地址:0x82000000
正在加载:*
超过 ARP 重试计数;重新开始
未知命令'booti'-尝试'help'
=> printenv bootcmd
bootcmd=tftp 192.168.2.60:zImage;tftp 192.168.2.60:am335x-icev2.dtb;booti -
=>

我已定义变量"serverip"以提供服务器 IP。 我还创建了"bootcmd"以告诉 U-boot 在何处获取 zImage 文件以及要加载的器件树。 在我查看的参考中、有一个 booti 命令似乎无法被 TI 提供的 U-boot 构建识别。 但是,TFTP 服务器和客户端尝试连接时,无法识别 booti,系统在两次尝试后停止。  

使用 ifconfig、我已获取主机和 TMDSICE_v2目标的 IP 地址。 我还通过查看路由器确认主机和 TMDSICE_v2的 IP 地址正确。

请看一下上述程序、并告诉我是否有任何错误、如果有、请告诉我哪里。 此外、您能否告诉我、"booti"命令是否有不同的格式、用于使"bootcmd"正常工作。  

谢谢你。

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

    明天我将尝试在工作台上设置它。 如果可以、主机/目标之间的 Wireshark 捕获将大大有助于确定 ARP 丢失的位置。

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

    尊敬的 Ron:

    感谢您的留言。

    我以前没有 Wireshark 的经验。 尽管如此,我已经成功安装了它,并且可以打开 dumpcap -我认为这就是它被称为-页面和相应的用户界面。 我必须阅读有关设置筛选器的更多信息。  

    我在 Linux 主机和运行 tftpd64应用程序的另一台 Windows 计算机之间使用 TFTP 传输文件。 我可以在 TFTP 上看到从一台 PC 到另一台 PC 的文件、但我无法在 Wireshark 上捕获数据包。 这可能是用户问题。

    现在返回到我一直使用的引导脚本。  

     我从 SD 卡引导时、U-boot bootcmd 将执行一系列命令。 当您从 U-boot =>提示符执行=> printenv bootcmd 时,bootcmd 会像这样运行;

    bootcmd=if test ${boot_fit}-eq 1;然后运行 update_TO_fit;fi;运行 findfdt; 运行 init_console; 运行 envboot;运行 distro_bootcmd

    所以、我昨天发送给您的脚本的第一个问题是、它不执行"run findftd;"来确定主机/tftpboot 目录中正确的映像和器件树文件。 但我知道那里还有更多的问题。  

    我正在尝试分解上面提到的"标准"bootcmd、以了解如何使用一个使 tftp 运行的过程来交换它。 因此、如果您能告诉我以下内容、将会非常有帮助;

    a)我想跳过 bootcmd 中的第一条 if 语句。 我看不到它为我们做了什么。 这是 bootcmd 开始并附带"if test ${boot_fit}-eq 1;then run update_to;fit;this part 看起来不会执行、因为 printenv boot_fit 返回 boot_fit =0。 因此、我想省略该测试。 请评论为什么需要保留。

    b)我想用"run finddt"启动 bootcmd;请确认我的猜测是否正确。

    c)我还想 保持运行"init_console"、因为这似乎可以正常工作、并通过 minicom 设置控制台。

    d)=> printenv envboot 返回"envboot= MMC dev ${mmcdev};如果 MMC 重新扫描;然后回显在器件${mmcdev}上找到的 SD/MMC;如果运行 loadbootscript;然后运行 bootscript;否则运行 loadbootenv;然后从${bootenvfile}回显已加载的 env;运行 import bootenv;如果运行 envcmd–envn、则运行 envcmd–envu 命令;如果运行 envu–envn f; fi; fi;

    上面(d)中的大多数引导命令都是从 MMC 引导的、但我并不完全清楚它们与 eachother 的关系。 如果有一个文档将其分段、那会更好。 我不确定是否可以在编写自己的 bootcmd 时跳过此步骤。 我可以看到"bootenvfile"与 U-boot 的 uEnv.txt 文件相同、但我认为需要做一些更详细的说明。

    e)它会显示 "run distro_bootcmd"; "根据我们要从中引导的介质运行某些 bootcmd 变体。  

    总之、如果您能确认这是 U-boot 的配置方式、并参考提供一些示例的文档、我将不胜感激。 此外、如果可以通过一些方法调整 U-boot 命令结构以允许从 TFTP 引导、如果您能告诉我、我会很感激。

    谢谢、此致

     

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

    您好!

    我不想在此时回答您以上的每个具体问题、而是想让您启动并运行。 下面是我刚刚通过 CPSW 以太网运行到 TFTP 引导 ICE 板的命令列表。 我使用了以下 h/w 设置。 请勿使用哪种连接器和突出显示的跳线、因为进行以太网通信需要这些跳线。

    我希望这张图片清晰明了。  

    下面是我为引导电路板而运行的命令的日志。 请在您的设置中尝试此操作、让我们至少达到相同的点。 然后、如果您对其工作方式有具体问题、我很乐意向他们提出。 我已将答案保留在中、以便您可以将它们与您看到的结果进行比较。

    => pr bootcmd
    bootcmd=if test ${boot_fit}-eq 1;然后运行 update_TO_fit;fi;运行 findfdt;运行 init_console; 运行 en
    vboot;运行 distro_bootcmd
    => pr init_console
    init_console=if test $board_name = A335_ICE;然后 setenv 控制台 ttyO3、115200n8;否则 setenv 控制台
    ttyO0、115200n8;fi;
    => setenv ethact cpsw
    => setenv serverip xxx.xxx.xxx.xxx (在此处使用您的 IP)
    =>运行 findfdt
    =>运行 init_console
    =>运行 args_MMC
    => pr bootcmd
    bootcmd=if test ${boot_fit}-eq 1;然后运行 update_TO_fit;fi;运行 findfdt;运行 init_console; 运行 en
    vboot;运行 distro_bootcmd
    => pr bootargs
    bootargs=console=ttyO3、115200n8 root=PARTUUUID=0001aabc-02 rw rootfstype=ext4 rootwait
    => DHCP
    端口0、速度100、全双工上的链路
    BOOTP 广播1
    BOOTP 广播2.
    BOOTP 广播3.
    DHCP 客户端绑定到地址192.168.2.20 (1205ms)
    使用 cpsw 器件
    来自服务器192.168.2.1的 TFTP;我们的 IP 地址为192.168.2.20
    文件名'zImage'。
    加载地址:0x82000000
    正在加载:############################################################################
    ####################################################
    ####################################################
    ####################################################
    ####
    2.3 MIB/s
    完成
    传输的字节= 3871232 (3b1200十六进制)
    =>运行 netloadfdt
    端口0、速度100、全双工上的链路
    使用 cpsw 器件
    来自服务器192.168.2.1的 TFTP;我们的 IP 地址为192.168.2.20
    文件名'AM335x-icev2.dtb'。
    加载地址:0x88000000
    正在加载:###
    2.2 MIB/s
    完成
    传输的字节= 37204 (9154十六进制)
    => bootz ${loadaddr}-${fdtaddr}
    ###展开的设备树 blob、88000000
    使用0x88000000处的 FDT blob 进行引导
    正在将设备树加载到8df04000,结束8df10153... 好的

    正在启动内核...

    [0.000000]在物理 CPU 0x0上引导 Linux
    [0.000000] Linux 版本4.14.79-ge669d52447 (OE-USER@OE-host)(gcc 版本7.2.1 20171011 (Lina.
    RO GCC 7.2-2017.11))#1抢先于 UTC 2019年4月6日03:14:17星期六
    [0.000000] CPU:ARMv7处理器[413fc082]修订版2 (ARMv7)、CR=10c5387d
    [0.000000] CPU:PIPT/VIPT 非混叠数据高速缓存、VIPT 别名指令高速缓存
    [0.0000M]、共页:FDT:机器模型:TI AM3359 ICE-V2 -双 CPSW
    [0.000000]内存策略:数据高速缓存写回
    [0.000000] EFI:从 FDT 获取 EFI 参数:
    [0.000000] EFI:未找到 UEFI。
    [0.000000] CMA:保留0x8a800000处的48 MIB
    [0.000000] CPU:所有 CPU 均在 SVC 模式下启动。
    [0.000000] AM335X ES2.1 (NEON)
    [0.000000]在上构建了1个区域列表、移动分组。 总页数:64960
    [0.000000]内核命令行:console=ttyO3、115200n8 root=PARTUUID =0001aabc-02 RW rootfstype=e
    Xt4 rootwait
    [0.000000] PID 哈希表条目:1024 (顺序:0、4096字节)

    我希望这有助于你向前迈进。

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

    尊敬的 Ron:

    感谢您设置环境并尝试通过 TFTP 引导 TMDSICE_v2。

    我已经按照您在以太网连接和跳线设置中所指示的那样设置了硬件。

    我使用的是一个路由器网络,其中我的服务器(主机 Ubuntu)从网络上的路由器接收 IP 地址192.168.2.60,如果 TMDSICE_v2从 SD 卡引导,它将接收 IP 地址192.168.2.63。 我没有为这两个设备设置静态 IP 地址,但路由器每次都要设置静态 IP 地址。 如有必要、我可以制作两个静态 IPS、但我认为它不会产生任何影响。

    当我运行您发送的过程时、我会按照 T 执行操作、直到我通过发出=> DHCP 来达到启动 DHCP 的位置。  

    下面是我在命令之后得到的内容;

    端口0、速度100、全双工上的链路
    BOOTP 广播1
    DHCP 客户端绑定到地址192.168.2.64 (11ms)
    =>

    因此,我立即进行连接,但奇怪的是,客户端( TMDSICE_v2 )接收到一个 IP 地址,这是不寻常的,引导过程不会继续进行。 我在此之后键入 tftp 并发出命令,但当 TFTP 提示符出现时,如果尝试多次,引导过程将不会继续。

    我今天早上在主机上安装了 DHCP。 我删除它是为了查看主机上的 DHCP 服务器与网络上路由器上的 DHCP 服务器之间是否存在冲突。  

    之后将为您提供进一步的更新。

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

    尊敬的 Ron:

    我删除了安装在主机 PC 上的 DHCP 服务器、但它没有影响。 结果与以前相同。  

    您的设置和我的设置之间有什么不同?

    再次感谢。

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

    以下是完整日志;

    U-Boot 2018.01-g9d984f4548 (2019年4月06日- 07:42:30 +0000)

    CPU:AM335X-GP 修订版2.1
    型号:TI AM3359 ICE-V2
    DRAM:256 MIB
    eth0、CPSW
    ETH1、CPSW
    NAND:0 MIB
    MMC:OMAP SD/MMC:0
    NET:cpsw、USB_ether
    按任意键停止自动引导:0
    => setenv ethact cpsw
    => setenv serverip 192.168.2.60
    =>运行 findfdt
    =>运行 init_console
    =>运行 args_MMC
    => pr bootcmd
    bootcmd=if test ${boot_fit}-eq 1;然后运行 update_TO_fit;fi;运行 findfdt;运行 init_console; 运行 envboot;运行 distro_bootcmd
    => pr bootargs
    bootargs=console=ttyO3、115200n8 root=PARTUUID=b1396df8-02 RW rootfstype=ext4 rootwait
    => DHCP
    端口0、速度100、全双工上的链路
    BOOTP 广播1
    DHCP 客户端绑定到地址192.168.2.64 (12ms)
    =>

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

    尊敬的 Ron:

    该过程有效。 我通过静态 IP 将客户端 IP 地址强制为192.168.2.64、并在执行 DHCP 后插入 tftp 命令。 我可以下载映像并开始启动过程。 它现在从 tftp 引导。

    谢谢  

    我将关闭该案例。 我留下这份照会是为了让其他读者知道问题已经解决。

    谢谢