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.

[参考译文] TMS320C6678:是否有任何经验证的 C6678EVM 大端 TFTP 引导示例?

Guru**** 2555130 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/583764/tms320c6678-dose-anyone-have-any-validated-big-endian-tftp-boot-examples-for-c6678evm

器件型号:TMS320C6678

您好、香榭丽舍

我的一位客户尝试在 C6678EVM 上启动大端 TFTP 引导、但他不能。  他已经完成了不存在任何问题的小端启动。
那么、有人有任何经过验证的 EVM 启动示例吗?

此致、
J-Breeze

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

    让他们按照以下 wiki 中所述编译引导加载程序:
    processors.wiki.ti.com/.../Processor_SDK_RTOS_BOOT_C66x

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

    Yordan、您好!

    是的。  我的客户已在 MinGW 环境中使用以下命令编译 IBL。

     使 EVM_c6678_i2c ENDIAN=BIC_BUS_ADDR=0x51

    请告诉我接下来应该检查什么?

    此致、
    J-Breeze

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

    Yordan、您好!

    我的客户正在尝试使用 BOOTP。  那么,TFTP 引导是否支持 BOOTP?  是否可以按如下方式启用它?

     更换
      IBL.BOOTModes[2].U.ethBoot.doBootp = false;
     使用
      IBL.BOOTModes[2].U.ethBoot.doBootp = true;

    此致、
    J-Breeze

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

    您好!

    我正在等待回复。
    是否可以通过将 doBootp 设置为 true 来使用 DHCP 执行大端 TFTP 引导?

    此致、
    J-Breeze

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

    Yordan、您好!

    我仍期待您对 TFTP 引导的响应。
    下面是我的结果。
                         
     --------------------
          |     doBootp

       字节序|---
             | false | true
     ---- ---------------
      小|启动正常|启动 NG
      大   |启动正常|启动 NG
     --------------------


    此致、
    J-Breeze

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

    Yordan、您好!

    我是否应该在这个问题上开始新的主题?

    此致、
    J-Breeze

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

    很抱歉耽误你的时间。 如果您使用大端字节序正确地构建了 IBL、这应该是可行的。
    我已通知团队进行详细说明。 反馈将发布在此处。

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

    有任何反馈吗?

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

    您好!

    以下是我的最新结果。  我附加了 Wireshark 日志。

     o 启用小端字节序和 BOOTP (文件名:TFTP_BOOT_LE_BOOTP_ENA.pcapng)

      -第102号:  40:5F:C2:B8:fc:9a (TexasIns_B8:fc:9a)的 BOOTP 引导请求
      -第104号: DHCP  DHCP Offer  -事务 ID 0x1
      -105号: ARP  谁拥有192.168.2.3? 请告知192.168.2.201
      -第107号: TFTP  读取请求、文件:app.out、传输类型:八位位组
      -第109号: TFTP 数据包,块:1.
      -第110号: TFTP  确认,块:1.

      * TFTP 引导正常!

     o 启用大端字节序和 BOOTP (文件名:TFTP_BOOT_BE_BOOTP_ENA.pcapng)

      -第 82号:  40:5F:C2:B8:fc:9a (TexasIns_B8:fc:9a)的 BOOTP 引导请求
      -第 83号: DHCP DHCP Offer  -事务 ID 0x1
      - 85号  ARP  ,谁拥有192.168.2.101? 请告知192.168.2.3

      -第122号:  40:5F:C2:B8:fc:9a (TexasIns_B8:fc:9a)的 BOOTP 引导请求
      -第123号: DHCP  DHCP Offer  -事务 ID 0x1
      -编号124  ARP   ,谁拥有192.168.2.101? 请告知192.168.2.3

      -第171号: 从 40:5F:C2:B8:fc:9a (TexasIns_B8:fc:9a)发出 BOOTP 引导请求
      -编号172: DHCP  DHCP Offer  -事务 ID 0x1
      -174号: 具有  192.168.2.101的 ARP? 请告知192.168.2.3

      * TFTP 引导 NG!

    不使用大端字节序的原因是什么?
    如有任何意见,请提出。

    e2e.ti.com/.../TFTP_5F00_BOOT_5F00_BOOTP_5F00_ENA_5F00_Wireshark_5F00_Logs.zip

    此致、
    J-Breeze

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

    您好!

    我发现 ARP 是从 PC (TFTP 服务器)发出的、而不是在引导程序以"引导模式"启用时的 EVM。
    那么、您能否告诉我应该修改示例代码的哪个部分来从 EVM 发出 ARP?

    此致、
    J-Breeze

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

    您好!

    Dose、有人帮助我吗?

    此致、
    J-Breeze

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

    J-Breeze、

    请在此处查看我的回答:

    另请参阅随附的文档、以在 BER 模式下运行 TFTP 引导。 这是使用 MCSDK 基线进行验证的。 使用 Processor SDK RTOS、我们仅在小端模式下测试了这一点。

    e2e.ti.com/.../8637.How-to-test-BOOTP-C6678-EVM-in-BE-mode.pdf

    此致、

    Rahul

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

    您好、Rahul、

    感谢您的支持。

    我认为您所附的文档是针对 ROM 以太网引导、而不是 IBL TFTP 引导。  因为 DEVSTAT 值为0x00001C84、它显示了 ROM 以太网引导模式。  您可以再次查看吗?

    另外、您能否参阅我在上一个帖子中附加的 Wireshark 日志、并让我澄清为什么在引导环境模式下启用 BOOTP 时、从 PC 发出 ARP、而我用于 DHCP/TFTP 服务器、而不是 EVM?

    此致、
    J-Breeze

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

    引导失败时、您能否运行我们在此处提供的调试 GEL 文件并提供日志:
    processors.wiki.ti.com/.../Keystone_Device_Architecture

    这将帮助我们了解您的时钟、引导和 SGMII 的配置方式。 根据次级引导专家的意见、您只需在大端字节序模式下构建 IBL 闪存二进制文件并使用大端字节序 IBL TFTP 引导开关设置引导 EVM

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

    您好、Rahul、

    我的客户已经按照以下方式构建了处于 BIN 模式的 IBL。  我认为没有问题。

     使 EVM_c6678_i2c ENDIAN=BIC_BUS_ADDR=0x51

    我可以让您验证启动并提供 Wireshark 日志吗?

    此致、
    J-Breeze

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

    J-Breeze、

    我从从基于 TFTP BOOTP 的引导中看到的内容中提供了 Wireshark 日志。

    e2e.ti.com/.../IBL_5F00_TFTP_5F00_BE_5F00_WireShark_5F00_log.pcapng

    我肯定会看到响应和图像传输在大端模式下发生。  

    此致、

    Rahul

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

    您好、Rahul、

    非常感谢您共享 Wireshark 日志。  请告诉我以下内容吗?  

    Q1) 您在 SDK 中使用、预编译或重建了哪种类型的数据?

    Q2) 您在 PC 上使用了什么工具用于服务器验证?

    Q3) 该工具的设置是什么?

    此致、
    J-Breeze

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

    J-Breeze、

    我n`t 了 MCSDK 映像、并使用了预构建的二进制文件、因为我在源代码中做了任何更改。

    我使用 i2cConfig.gel 配置了引导参数表、如下所述:

    修改了 GEL 以启用 BOOTP 并运行.out 以刷写参数表。

    在主机上、我使用了一个名为 TFP32的工具、在这里进行了介绍:

      

    我已附加工具设置的快照。:

    为了测试这一点、我使用了一台不在办公室网络上的交换机、并使用静态 IP 配置了机器 LAN 并将其连接到交换机。

    希望这对您有所帮助。

    此致、

    Rahul

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

    你好、Raul、

    非常感谢您的支持。  
    正如您所说的、我已经使用该工具并使用 GEL 文件配置了表、但引导剂量在我的环境中还不起作用。
    我使用交叉电缆将 PC 直接连接到 C6678EVM。  出什么问题了吗?

    而且、我发现 Wireshark 日志存在差异。
    在日志中, BOOTP/Boot Reply (No.2)是在 BOOTP/Boot Request(No.1)和 ARPs (No.)之后发出的 3和4)、然后启动 TFTP 传输。
    另一方面,DHCP/DHCP Offer (No.104)是在 BOOTP/Boot Request (No.102)和 ARPs (No.102)之后发出的 105和106)、然后 TFTP 传输在我的日志中开始(对于启动工作的小端模式)。

    我不熟悉该协议。  如果您有的话、请允许我来说明一下区别吗?

    此致、
    J-Breeze

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

    您好、Rahul、

    我想再问一件事。
    我可以与我的客户共享 Wireshark 日志吗?

    此致、
    J-Breeze

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

    我已将日志发布到公共论坛中、因此与客户共享日志时不会出现任何问题。

    在我的设置中、不会使用交叉电缆连接从 EVM 直接连接到 PC。 我使用1G 以太网交换机创建了本地网络。 我不确定这是否已通过使用交叉电缆在 EVM 和 PC 之间直接连接进行测试、但如果您的小端字节序通过设置正常引导、则应该能够对大端字节序模式使用相同的引导。

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

    Rahul、

    我正在查看 IBL 代码、但我不确定引导剂量为什么不起作用。

    您能不能告诉我在我的配置中不在 be 模式下发布 ARP 的可能原因是什么?
    如果有任何意见,我将不胜感激。

    此致、
    J-Breeze

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

    J-Breeze、

    大端字节序n`t 不受广泛支持、因此我在该端字节序中进行了大量调试。 您是否曾尝试像我提到的那样使用开关创建本地连接、或者您仍在将 PC 直接连接到 EVM。

    此致、

    Rahul

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

    您好、Rahul、

    我仍在将我的 PC 直接连接到 EVM。

    顺便说一下、我想问您另一个问题。  我想调试 IBL、特别是 BOOTP.c 文件。
    那么,您能告诉我我如何查看下面的 mprintf()输出吗?
    我不确定、但我想引导应答/DHCP 服务数据包在 be 模式下无法正确解释。

     o bootp.c
      (C:\ti\pdk_c667x_2_0_5\packages/ti\boot\IBL\src\driver\eth)

       -第312~320行

         /*调试消息:*/
        mprintf ("*****************) \n");
       mprintf ("BOOTP complete\n");
         mprintf ("   IP 地址   :0x%x\n"、ntohl (netmcb.net_device.ip_address));
         mprintf ("   网络掩码     :0x%x\n",子网掩码);
         mprintf ("   默认路由器:0x%x\n"、默认路由器);
         mprintf ("   服务器 IP    :0x%x\n"、ntohl (serverIP));
         mprintf ("   文件名    :%s\n"、  ptr_bootaddr->文件);
         mprintf ("*****************) \n");

    此致、
    J-Breeze

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

    我的理解是、mprintf 用于抑制 printf 语句或将其静音、这些语句可能会在基于仿真器的调试期间插入 IBL 代码中。 通常这些打印内容会转到 CCS 控制台、而 mprintfs 是抑制这些打印的一种方法。 mprintf 在 iblmain.c 文件中定义为函数宏、您可以看到类似 DLW_client.c 的文件包含如下定义

    /*使用 printfs。 *
    #define printf mprintf

    我建议您将 mprintf 视为调试输出。 将其更改为 UART_WRITE_string、以便在器件引导 IBL 时可以在 UART 上看到它们。

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

    您好、Rahul、

    我想问您有关 IBL 代码的建议。

    我正在尝试调试代码,我发现在引导模式下执行 bootp.c 中的 bootbootbootp_tmr_expire()函数后,它没有到达 bootp_receive()函数。  因此,我无法在 BOOTP_Receive()中的上一篇文章中看到我提到的 mprintf()输出。

    那么、您能给我一些关于可能原因的建议吗?  

    此致、
    J-Breeze

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

    您好!

    下面是我的 Tftpd64日志。  我希望这将是有用的信息。

     o 低

       IP 0.0.0.0、Mac 40:5F:C2:B8:FC:9A 的 Rcvd BootP 消息[08/06 15:50:43.155]
       BOOTP:建议地址192.168.2.201 [08/06 15:50:43.155]
       从端口1234上的192.168.2.201接收到的连接[08/06 15:50:43.171]
       文件的读取请求 。 模式八位位组[08/06 15:50:43.171]
       使用本地端口49175 [08/06 15:50:43.171]
       :已发送994个 blks,0s. 0中的508780字节。0 blk resent [08/0615:50:43.405]
       警告:收到来自的重复请求:[08/0615:50:43.405]
       从端口1234上的192.168.2.201接收到的连接[08/06 15:50:43.663]
       文件的读取请求 。 模式八位位组[08/06 15:50:43.663]
       使用本地端口50022 [08/06 15:50:43.663]
       :已发送994个 blks,0s. 0中的508780字节。0 blk resent [08/06 15:50:43.881]

     O be

       IP 0.0.0.0、Mac 40:5F:C2:B8:FC:9A 的 Rcvd BootP 消息[08/06 15:57:01.839]
       BOOTP:建议地址192.168.2.201 [08/06 15:57:01.839]
       IP 0.0.0.0、Mac 40:5F:C2:B8:FC:9A 的 Rcvd BootP 消息[08/06 15:57:09.808]
       BOOTP:建议地址192.168.2.201 [08/06 15:57:09.808]
       IP 0.0.0.0、Mac 40:5F:C2:B8:FC:9A 的 Rcvd BootP 消息[08/06 15:57:21.764]
       BOOTP:建议地址192.168.2.201 [08/06 15:57:21.764]
         。
         。
         。

    此致、
    J-Breeze

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

    您好、香榭丽舍

    Dose、有人帮助我吗?  我还没有得到解决。

    处于 be 模式的 IBL 在下面的 arp_resplve()中重复一条 if 语句,然后执行另一条 if 语句,该语句显示错误"BOOTP failure: Max reTransmissions exceeded"。  这可能会有什么问题?  接下来应该检查什么?  

    如有任何意见,请提出。

     o arp.c
      (C:\ti\pdk_c667x_2_0_5\packages/ti\boot\IBL\src\driver\eth)

      -第127~142行

        //特殊情况:我们是否将数据包发送到255.255.255.255? *
        IF (DST_IP =(IPN) 0xFFFFFFFF)
        {
         /*是。 这意味着数据包中的目的 MAC 地址是广播地址
          *我们不需要查找高速缓存。 *
          PTR_ethhdr = net_create_eth_header (((uint8 *) PTR_iphdr、(void *)&BroadcastMac[0]、0x800);
          if (ptr_ethhdr ==空)
           返回;

           /*我们现在有一个完整的以太网数据包,通过发送。 *
             net_send_packet (ptr_ethhdr、sizeof (ETHHDR)+ L3_pkt_size);

          /*数据包已传输,我们现在可以清除它。 *
          net_free_tx_packet (((uint8 *) ptr_iphdr);
          返回;       
        }

     o bootp.c
      (C:\ti\pdk_c667x_2_0_5\packages/ti\boot\IBL\src\driver\eth)

      -第141~149行

        /*检查我们是否超出了最大值 是否允许? *
        if (bootpmcb.num_request > bootp_MAX_retries)
        {
         /*错误:已超出最大重传;指示错误。 *
          mprintf ("BOOTP 失败:超出最大重传\n);
          net_set_error ();
          udp_sock_close (bootpmcb.sock);
          返回;
        }

    此致、
    J-Breeze

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

    很抱歉耽误你的时间。

    我查看了您的小端字节序和大端字节序 Wireshark 日志、并将其与我的日志以及一位同事进行了比较、以获得对其的额外关注。 工作情况和非工作情况的最大区别在于、读取请求会在收到 IP 地址后发出。

    在发生故障的情况下、您能否确认代码达到 IP_Receive、UDP_RE接收、arp_Receive、tftp_Receive、BOOTP_Receive。 最后、我们需要找出未达到 tftp_get_file 的原因。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您以前可能提供过此信息、但能否说明您如何将默认服务器 IP 从192.168.2.101更改为192.168.2.201?

    我注意到,在您之前的一个线程中,LE log 指示 ARP 响应为:
    第105号:ARP 谁拥有192.168.2.3? 请告知192.168.2.201

    而 be ARP 响应是:
    具有192.168.2.101的 ARP 编号85? 请告知192.168.2.3
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rahul、

    我的客户自行解决了此问题、并告诉我他们的临时解决方法、如下所示(以红色突出显示)。  我想关闭这个线程。
    非常感谢您的支持。

     o icmp.c
       (C:\ti\pdk_c667x_2_0_5\packages/ti\boot\IBL\src\driver\eth)

       -第77~82行

         //#ifdef BigEndian
             if (tmp1)
               Tsum +=(uint32)(* PW & 0xFF00);
         //#else
        //  if (tmp1)
        //      Tsum +=(UINT32)(*PW & 0x00FF);  
         //#endif

     o udp.c
       (C:\ti\pdk_c667x_2_0_5\packages/ti\boot\IBL\src\driver\eth)

       -第96~102行

         //#ifdef BigEndian
             if (tmp1)
                 Tsum +=(uint32)(* PW & 0xFF00);
         //#else
         //   if (tmp1)
         //       Tsum +=(UINT32)(*PW & 0x00FF);
         //#endif

    此致、
    J-Breeze

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

    J-Breeze、

    感谢您在此处发布更新、感谢您在处理此问题时的耐心。 我很高兴问题得到解决。

    我可以确认、这是由不一致的 BigEndian 宏定义导致的错误。 C6000编译器将此宏定义为_BIG_ENDIAN、以便在 IBL 代码中错误地定义宏。我将报告错误并要求开发团队修复错误。 如果您希望代码在小端字节序和大端字节序模式下都工作、则可以将 BigEndian 替换为_big_ENDIAN。

    此致、

    Rahul