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.

[参考译文] AM3358:Linux 服务器的 USB BOOTP DHCP 设置

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/567003/am3358-usb-bootp-dhcp-settings-for-linux-server

器件型号:AM3358

我尝试通过 USB 引导 BeagleBone Black、以证明我可以初始加载并刷写基于 Sitara 的生产系统的 MMC。 我有一个问题是如何配置 DHCP。

Ubuntu 12.04设置为网络引导基于 AM335x 的平台 wiki 提供了以下 dhcp.conf 示例:

子网192.168.2.0子网掩码255.255.255.0
{
范围 dynamic-BOOTP 192.168.2.2 192.168.2.100;
如果子字符串(选项供应商类标识符,0,10)="AM335x ROM"
{
文件名"u-boot-spl-restore.bin";
}
elsif 子字符串(选项 vender-class-identifier、0、10)="DM814x ROM"
{
文件名"u-boot-spl-restore.bin";
}
elsif 子字符串(选项 vender-class-identifier、0、17)="AM335x U-Boot SPL"
{
文件名"u-boot-restore.img";
}
否则
{ 文件名"zImage";
}
范围192.168.2.101 192.168.2.199;
} 

dhcp.conf 文件指定为动态 BOOTP 客户机分配地址的范围、并根据 Sitara Boot ROM 客户机的信息指定要上载的文件。

AM335x U-Boot 用户指南 wiki 的"Booting Over CPSW Ethernet"一节提供了此示例:

主机 AM335x_EVM
{
硬件以太网文件:ad:be:ee:ef;
如果子字符串(选项 vender-class-identifier、0、10)="DM814x ROM"
{
fileName "u-boot-spl.bin";
}
elsif 子字符串 SPL (选项 vender-class-identifier、0、17)="AM335x rom"}

文件名"u-boot-spl.bin";}elsif substring sf substring (选项 sil-guide-sel、0、17)="AM335x u-u-boot"




}"u-u.

我认为这两个文件的目的是实现相同的目标:

  1. 在 Sitara 客户端受公共 ROM 代码控制时 tftp u-boot-spi.bin
  2. 然后在 Sitara 客户端运行 SPL 指令客户端时转到 tftp u-boot.img 文件。

如果传输介质是以太网或 USB、则情况应相同。

从 dhcp.conf 主页:

"如果要动态地为子网上的客户端分配地址,则子网声明中必须显示一个范围声明。 对于静态分配地址的客户端、或者对于只为已知客户端提供服务的安装、每个此类客户端都必须有个主机声明。"

第一个示例使用动态地址、第二个示例使用静态地址。

dhcp.conf 手册页还显示:

"要识别 BOOTP 客户机,必须使用主机语句中的硬件子句声明其网络硬件地址。 硬件类型必须是物理硬件接口类型的名称。"

使用动态配置示例、我能够让 Sitara 通过 tftp 启动、广播和接收 u-boot-spl.bin 文件。 但是、在 SPL 文件传输后、网络接口出现故障后、我似乎会遇到网络错误。 在我看来、Sitara 似乎无法连接回 Linux 服务器。 (我不知道当时如何保持 Wireshark、所以我看不到发生了什么、但这可能是另一个主题)

问题是否是我没有在 dhcp.conf 中使用硬件语句? 我的 Sitara BOOTP 客户机似乎初始被识别,但在收到 SPL 文件后未被识别。 也许我最基本的问题是:在通过 USB 引导 Sitara 的环境中、"为了识别 BOOTP 客户机"这一说法意味着什么?

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

    谢谢 Biser。 我应该提到、我从 BeagleBone Black wiki 上的 Sitara Linux 程序 eMMC 开始。 这是非常宝贵的。 它链接到 我的帖子中提到的 Ubuntu 12.04设置为网络引导基于 AM335x 的平台 wiki。 它没有回答我的问题、或者至少我找不到答案。

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

    第一个更好的问题是: Ubuntu 12.04中的 dhpcd.conf 示例代码段为什么设置为网络引导基于 AM335x 的平台 wiki 和 AM335x U-Boot 用户指南 不同?


    它们似乎都具有相同的用途,用于向 DHCP 服务器提供文件的名称。 文件名不同、但根据我的理解、这并不重要。 名称与/tftpboot 目录中的文件相匹配(或者在安装 SDK 时指定的哪个目录)只会很重要。  

    这两个示例是否都可以正常工作、而且示例是否确实不同? dhcp.conf 文件是否需要两个条目才能通过 USB 引导外设?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您提到的 wiki processors.wiki.ti.com/.../AM335x_U-Boot_User's_Guide 已停产。 它对 Linux SDK 6.0 (内核 v.3.2)有效。 涵盖当前版本的 Wiki 是 processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Biser、

    感谢您指出这一点! 我没有意识到我正在阅读过时的 U-boot 指南!  Sitara Linux 程序 BeagleBone Black wiki 上的 eMMC 会链接到正确 的 Linux Core U-Boot 用户指南。 我必须在搜索中导航到过时版本。

    我不理解 U-Boot 用户指南为什么包含此示例 DHCP 主机条目(与我原始文章中的过时链接示例略有不同):

    主机 AM335x_EVM{
    硬件以太网 DE:AD:be:ee:ef;
    #如果
    子字符串(选项供应商类标识符、0、10)="DM814x ROM"、则检查 PG1.0 (通常为 CPSW){
    文件名"u-boot-spl.bin";
    #检查 PG2.0、CPSW 或 USB RNDIS
    }elsif 子字符串(选项供应商类标识符、0、10)="AM335x ROM"{
    文件名"u-boot-spl.bin";
    }elsif 子字符串(选项 vender-class-identifier、0、17)="AM335x U-Boot SPL"{
    文件名"u-boot.img";
    }否则{
    文件名"zImage-AM335x-evm.bin";
    }
    } 

    Ubuntu 12.04设置为网络引导基于 AM335x 的平台 具有类似但不同的示例、似乎执行相同的操作不同。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已通知软件团队。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍在尝试弄清楚这两个 TI 源为什么似乎提供了不同的示例来说明如何配置 ISC-DHCP 服务器、并尝试弄清楚我的 USB 外设启动为什么不起作用。 这次我开始全新安装 Ubuntu 16.04、并按照与之前相同的说明执行了一个额外步骤。 我已将其添加到/etc/default/grub

    GRUB _CMDLINE_Linux="net.ifname=0 biosdevname=0" 

    然后更新 grub 并重新启动。

    这让我回到了我原来的 SPL 无法获得 U-Boot IMG (我想)的问题。 我之前遇到了 SPL 不是 tftpd 的问题、而是 Sitara 尝试进行 UART 引导。 这个 帖子中解决了这个问题。 那么、现在、在我的新16.04设置中、我得到了以下结果:

    因此、我再次使用 tftp 作为 u-boot-spl-restor.bin 文件、并且从那时起就出现了网络问题。

    回想我在这篇文章中遇到的 DHCP.conf 问题、我使用 U-Boot 用户指南中的"host"和"hardware"示例尝试了对 dhcp.conf 文件进行几次迭代更改。 我尝试 tftp、但现在我可以在 Wireshark 上看到、当发出相同的请求时、主机上的"未找到文件"。 我恢复了旧的 DHCP.conf 文件、但我看到的结果相同。 这对我来说毫无意义。

    我没有提到任何与 tftp 有关的事情(不是直接的或故意的)。 我对文件名和权限进行了三重检查。 我一直都不知道为什么我不能回到几个小时前工作的 DHCP.conf。 有什么建议要去哪里? 我返回到终端上的'C'、它告诉我 USB 启动失败、处理器转移到 UART。

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

    我的 tftp 问题是由于使用 systemd 的 Ubuntu 16.04导致的。 在 14.04中、我按照 TI wiki 指令将 tftpd-HPA 配置为由 xinetd 启动。 在16.04中、systed 在启动时启动 tftp-HPA (默认情况下似乎是这样)。 第一次尝试16.04设置时、tftp 工作正常、因为我在安装 tftpd-HPA 后没有重新启动 Ubuntu。 重新启动后、uboot-spl-restore.bin 文件无法 tftp、因为 systemd 在启动时使用错误的参数(一个文件的位置)启动 tftpd-HPA。 我更新了/etc/default/tftpd-hpa 以获得我之前在/etc/xinetd/tftp 中使用的配置设置、然后删除了 tftp 文件。 我每次都能将 uboot-spl-restore.bin 转至 BeagleBone Black。  

    现在、我将再次尝试弄清 SPL 为何无法从 Ubuntu 服务器获取 u-boot-restore.img。

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

    将/drivers/usb/gadget/ether.c 更改为 

    #define USB_CONNECT_TIMEOUT (15 * CONFIG_SYS_Hz) 

    我在这里看到的、修复了错误:远程端没有及时响应。

    照片之前和之后: