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.
我尝试通过 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.
我认为这两个文件的目的是实现相同的目标:
如果传输介质是以太网或 USB、则情况应相同。
从 dhcp.conf 主页:
"如果要动态地为子网上的客户端分配地址,则子网声明中必须显示一个范围声明。 对于静态分配地址的客户端、或者对于只为已知客户端提供服务的安装、每个此类客户端都必须有一个主机声明。"
第一个示例使用动态地址、第二个示例使用静态地址。
dhcp.conf 手册页还显示:
"要识别 BOOTP 客户机,必须使用主机语句中的硬件子句声明其网络硬件地址。 硬件类型必须是物理硬件接口类型的名称。"
使用动态配置示例、我能够让 Sitara 通过 tftp 启动、广播和接收 u-boot-spl.bin 文件。 但是、在 SPL 文件传输后、网络接口出现故障后、我似乎会遇到网络错误。 在我看来、Sitara 似乎无法连接回 Linux 服务器。 (我不知道当时如何保持 Wireshark、所以我看不到发生了什么、但这可能是另一个主题)
问题是否是我没有在 dhcp.conf 中使用硬件语句? 我的 Sitara BOOTP 客户机似乎初始被识别,但在收到 SPL 文件后未被识别。 也许我最基本的问题是:在通过 USB 引导 Sitara 的环境中、"为了识别 BOOTP 客户机"这一说法意味着什么?
谢谢 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 引导外设?
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)
照片之前和之后: