先决条件和配置

先决条件和配置

我正在尝试使用 Raspbian Jessie(最新稳定版本,内核版本 4.4)在 Raspberry Pi 上启动并运行闪烁站。

但是,我想利用四个 USB 端口,为此,我将使用 USB 上的以太网(因为 u-boot 使用以太网来检查 tftp 服务器)。

先决条件和配置

这是我在 Raspberry Pi 上安装的东西:

  • isc-dhcp-服务器
  • 西内特

我配置了几个文件:

/etc/dhcp/dhcpd.conf

log-facility local7;
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.2.0 netmask 255.255.255.0
{
  range dynamic-bootp 192.168.2.2 192.168.2.100;
  if substring (option vendor-class-identifier, 0, 10) = "AM335x ROM"
  {
    filename "u-boot-spl-restore.bin";
  }
  elsif substring (option vendor-class-identifier, 0, 17) = "AM335x U-Boot SPL"
  {
    filename "u-boot-restore.img";
  }
  else
  {
    filename "zImage";
  }

  range 192.168.2.101 192.168.2.199;
}

前四行默认存在。

/etc/xinetd.d/tftp

service tftp
{
  socket_type = dgram
  protocol = udp
  wait = yes
  user = root
  server = /usr/sbin/in.tftpd
  server_args = -s /tftpboot
  disable = no
}

该文件不存在,因此我必须创建它。它像其他服务一样包含在/etc/xinetd.conf.

/tftpboot/

创建此文件夹,对其执行以下命令:

  • sudo cp /path/to/boot/files/* /tftpboot/
  • sudo chmod -R 777 /tftpboot/
  • sudo chown -R nobody:nogroup /tftpboot

/etc/default/isc-dhcp-server

添加usb0到接口列表:

INTERFACES="usb0"

/etc/network/interfaces

创建了一个接口usb0

allow-hotplug usb0
iface usb0 inet static
    address 192.168.2.1
    network 192.168.2.0
    netmask 255.255.255.0
    broadcast 192.168.2.255
    up /etc/network/if-up.d/usb-interfaces

/etc/network/if-up.d/usb-interfaces

创建了以下脚本,引用者/etc/network/interfaces

#!/bin/sh

if [ "$IFACE" = usb0 ]; then
    sudo service isc-dhcp-server restart
fi

重启所有服务!

sudo /etc/init.d/tftp-hpa restart
sudo /etc/init.d/xinetd restart

测试和结果

我们将 Raspberry Pi 称为主持人和我想要刷新的linux目标

因此,为此,我在主机上拥有所有日志,并在目标上拥有一个串行控制台(这意味着我可以从内核访问启动日志)。

基本上会发生什么:

  • 从目标的 PoV 来看:串行日志上没有特别显示任何内容。通常情况下,它只会阻塞一段时间然后启动。
  • 从主持人的观点来看:这是完整的日志。usb0当Linux系统开始引导时,该界面消失后停止。正如您所看到的,BOOTREQUEST紧随其后的是BOOTREPLY。此时,目标知道它必须从服务器获取的文件的名称tftp(在/etc/dhcp/dhcpd.conf文件中指定),因此tftp应该发出请求......但什么也没有发生。

tftp我已经从目标和我的计算机测试了在 Raspberry Pi 上运行的服务器,在这两种情况下,我都可以正确获取文件。我还尝试了不同的文件,并能够确认所使用的文件(在我的/tftpboot/文件夹内)是正确且有效的。

我的想法和测试:

  • Raspberry Pi 的 USB 端口提供的电力不足。通过USB 2.0独立供电集线器进行测试,结果完全相同。

任何帮助将不胜感激。

答案1

事实证明,问题在于我的系统上运行着多个 TFTP 服务器,而我没有配置正确的服务器。

对于遇到此问题的任何人,我建议运行类似于 的命令ps ax | grep tftp。它通常还会告诉您哪个目录用作 TFTP 服务器的根目录。

相关内容