Raspbian
u-boot 未通過 USB 介面檢測到我的乙太網(無 tftp 請求)
我正在嘗試使用 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
後面緊跟著 aBOOTREPLY
。此時,目標知道它必須從tftp
伺服器獲取的文件的名稱(在文件中指定/etc/dhcp/dhcpd.conf
),因此tftp
應該跟隨一個請求……但是什麼也沒有發生。我已經
tftp
從目標和我的電腦測試了在 Raspberry Pi 上執行的伺服器,在這兩種情況下,我都可以正確獲取文件。我還嘗試了不同的文件,並且能夠確認使用的文件(在我的/tftpboot/
文件夾內)是正確的並且可以正常工作。我的想法和測試:
- **Raspberry Pi 的 USB 埠提供的電源是不夠的。**通過 USB 2.0 獨立供電集線器進行測試,結果完全相同。
任何幫助將不勝感激。
事實證明,問題在於我的系統上執行了多個 TFTP 伺服器,而我沒有配置正確的伺服器。
對於遇到此問題的任何人,我建議執行類似於
ps ax | grep tftp
. 它通常還會告訴您哪個目錄用作 TFTP 伺服器的根目錄。