Raspbian

u-boot 未通過 USB 介面檢測到我的乙太網(無 tftp 請求)

  • April 3, 2017

我正在嘗試使用 Raspbian Jessie(最新穩定版本,核心版本 4.4)在 Raspberry Pi 上啟動並執行一個閃爍站。

但是,我想利用四個 USB 埠,為此,我將使用 USB 上的乙太網(因為 u-boot 使用乙太網來檢查 tftp 伺服器)。

先決條件和配置

這是我在 Raspberry Pi 上安裝的東西:

  • isc-dhcp-伺服器
  • xinetd

我配置了幾個文件:

/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 稱為host和 linux 我想刷入target

因此,為此,我在主機上擁有所有日誌,並在目標上擁有一個串列控制台(這意味著我可以從核心訪問引導日誌)。

基本上會發生什麼:

  • 從目標的 PoV 來看:串列日誌上沒有特別顯示任何內容。通常它只是阻塞一會兒然後啟動。
  • 來自主機的 PoV:這是完整的日誌。usb0當 Linux 系統開始啟動時,界面消失後停止。如您所見, aBOOTREQUEST後面緊跟著 a BOOTREPLY。此時,目標知道它必須從tftp伺服器獲取的文件的名稱(在文件中指定/etc/dhcp/dhcpd.conf),因此tftp應該跟隨一個請求……但是什麼也沒有發生。

我已經tftp從目標和我的電腦測試了在 Raspberry Pi 上執行的伺服器,在這兩種情況下,我都可以正確獲取文件。我還嘗試了不同的文件,並且能夠確認使用的文件(在我的/tftpboot/文件夾內)是正確的並且可以正常工作。

我的想法和測試:

  • **Raspberry Pi 的 USB 埠提供的電源是不夠的。**通過 USB 2.0 獨立供電集線器進行測試,結果完全相同。

任何幫助將不勝感激。

事實證明,問題在於我的系統上執行了多個 TFTP 伺服器,而我沒有配置正確的伺服器。

對於遇到此問題的任何人,我建議執行類似於ps ax | grep tftp. 它通常還會告訴您哪個目錄用作 TFTP 伺服器的根目錄。

引用自:https://unix.stackexchange.com/questions/344577