我正在尝试使用 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 服务器的根目录。