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.

[参考译文] PROCESSOR-SDK-AM335X:以太网引导失败

Guru**** 2607635 points
Other Parts Discussed in Thread: AM3358

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/652970/processor-sdk-am335x-ethernet-boot-fails

器件型号:PROCESSOR-SDK-AM335X
主题中讨论的其他器件:AM3358

我希望基于 AM3358处理器创建定制设计。  在考虑如何在制造过程中引导器件时、最简单的选择似乎是使用以太网引导功能加载小型 Linux 构建、然后我可以使用该构建对板载 NAND 闪存进行编程、 并同时执行生产线测试功能。  这将允许我同时运行多个板、使用 USB NET SPL 构建(有效)或 UART (slooow)并不容易。

为了验证该假设、我收购了许多 BeagleBone Black 单元和几个 EVM SK 单元。  修改 BBB 以设置为以太网引导(在引导期间将 J9引脚44连接到下)现在确实使用 BOOTP 获取执行的 u-boot SPL 二进制文件、但无法检索主 u-boot 映像。  

我注意到其他一些帖子已被锁定、但没有给出可行的解决方法或解决方案。    https://e2e.ti.com/support/arm/sitara_arm/f/791/p/558760/2076129#2076129上的一篇文章 提到这是自 AMSDK8以来发生的、它说它仍然可以下载、但从哪里下载?

症状是初始 u-boot SPL 图像加载、从而给出  

U-Boot SPL 2017.01 (2017年12月29日- 15:47:46)
正在尝试从 eth 设备引导
卡未响应电压选择!
**设备 MMC 0 **错误
使用默认环境

未设置。 验证第一个电子保险丝 MAC
CPsw、USB_ether
错误:未设置 USB_ether 地址。

正在等待 PHY 自动协商完成的 CPsw。。 完成
端口0、速度100、全双工上的链路
BOOTP 广播1

然后看门狗在长时间等待后重复。

使用 SDK 04.02.00.09源文件。

此问题是否已解决?  如果我需要使用 AMSDK8执行此操作、可以从哪里下载源?  或者、我是否在浪费时间、应该查看另一种机制(或处理器!)?

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

    请访问 processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guideprocessors.wiki.ti.com/.../Sitara_Linux_Program_the_eMMC_on_Beaglebone_Black
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、但我一直在细致地完成所有这些工作、没有任何乐趣。 我可以很高兴地使用 USB ETH 模式、虽然参考文档中提到以太网模式也应该可以工作、但实际上没有。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我已经要求软件团队对此进行研究。 他们将在这里直接做出响应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。  一些可能有用的更多信息。

    我可以使用 SDK AM335x-EVM-Linux-SDK-src-04.02.00.09.tar.xz 在 BBB 上执行以太网引导、方法是修改 u-boot net/BOOTP.c 文件、在 void BOOTP_request (void)中添加单个语句

    iphdr = pkt;//我们稍后需要对 net_set_udp_header()*/执行此操作

    pkt+= IP_UDP_HDR_SIZE;

    BP =(struct bootp_hdr *) pkt;

    bp->bp_op = OP_BOOTREQUEST;

    udelay (50);

    bp->bp_htype = HWT_ether;

    bp->bp_hlen = HWL_ether;

    bp->bp_hops = 0;

    和静态空 DHCP_SEND_REQUEST_PACK(结构 BOOTP_HDR *BP_Offer)中相同的更改语句

    和 net/net.c 中类似的变化  

    void net_set_ip_header(uchar *pkt, struct in_addr dest,struct in_addr source )

    struct ip_udp_hdr *ip =(struct ip_udp_hdr *) pkt;

    /*

    *构造 IP 标头。

    *

    /* IP_HDR_SIZE / 4 (不包括 UDP)*/

    IP->IP_HL_v = 0x45;

    IP->IP_tos = 0;

    udelay (50);

    IP->IP_len = htons (IP_HDR_SIZE);

    ip->ip_id  = htons (net_ip_id++);

    IP->IP_OFF = htons (IP_FLAGS_DFRAG);/*请勿碎片*/

    IP->IP_TTL = 255;

    IP->IP_SUM = 0;

    /*已按网络字节顺序*/

    net_copy_ip ((void *)&ip->ip_src、&source);

    /*已按网络字节顺序*/

    net_copy_ip ((void *)&ip->IP_dst、&dest);

    udelay (50)中的值;似乎不重要、udelay (50);语句可以替换为 PUT (".");或具有相同效果的类似语句。

    我认为这会导致可能的电路板配置问题、存储器访问时间、或者与以太网部分的时序相关的问题、尽管向上或向下移动语句会使其停止工作。

    非常混乱。

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

    这似乎是您在使用 BOOTP 服务器时遇到的问题。 我刚刚从我的 Ubuntu 14.04计算机上通过以太网从 PLSDK 4.02启动了预构建的映像、没有任何问题。 我是在 BeableBone Black 和主机之间的封闭网络上执行此操作的。

    我们在使用旧 SDK 时遇到了一些问题、但我们已将以太网和 USB 上的网络引导应用到测试中、因此希望将来不会出现这种情况。

    Wireshark 是一个调试连接并查看数据包来回传输的绝佳工具、可用于确定事物向南的位置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Ronb、

    有趣    的是、使用 AM335x-EVM-Linux-SDK-BIN-04.02.00.09.tar.xz 中预构建的二进制文件确实有效、但使用 AM335x-EVM-Linux-SDK-src-04.02.00.09.tar.xz 中的 SRC SDK 构建二进制文件不起作用。  我将尝试使用与 PSB 构建时相同的工具链进行重建、因为我使用的交叉编译器略有不同(gcc 版本7.2.0)、否则这是我可以想到的唯一区别。

    我密集使用 Wireshark、并注意到、对于我编译的二进制文件、ROM 引导加载程序工作正常并加载 u-boot SPL。  但是、除非 udelay (50)语句位于该语句中、否则 u-boot SPL 似乎会在先前给出的指令处停止。  使用 udelay (50);我获得了良好的 BOOTP/DHCP 数据包、并成功加载并执行了完整的 Linux 内核和文件系统(使用相同的 gcc 7.2.0编译器编译)、但没有 udelay (50)、我在加载 u-boot SPL 后未接收到任何 BOOTP/DHCP 数据包。

    我会让您随时了解最新信息。

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

    现在、我可以确认使用 GCC 7.2.0或 Linaro 工具链7.1.1构建 AM335x-EVM-Linux-SDK-src-04.02.00.09.tar.xz 不起作用、但使用 releases.linaro.org/.../gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz 上的 SDK 工具链进行编译 是可行的。

    这解决了我的问题。 我不确定与 GCC 7的不兼容性、如果有机会、可能会花一些时间来解决该问题。

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

    克里

    感谢您回来确认。 GCC 的差异通常不太容易跟踪、但如果有时间、这会很有趣。

    祝您在2018年设计愉快!