Embedded

U-Boot 中的 tftpput:錯誤:“訪問衝突”(2)

  • October 19, 2015

CONFIG_CMD_TFTPPUT在 U-Boot 中啟用了,但我無法使用它。

我已經設置了serveripipaddr環境變數。當我按如下方式使用它時,它會超時:

u-boot# tftpput            
link up on port 0, speed 100, full duplex
Using cpsw device
TFTP to server 192.168.1.3; our IP address is 192.168.1.106
Filename 'uImage'.
Save address: 0x0
Save size:    0x0
Saving: ##T ###T ####  

如果我將引導文件名稱設置為temp,則會出現以下錯誤:

u-boot# tftpput          
link up on port 0, speed 100, full duplex
Using cpsw device
TFTP to server 192.168.1.3; our IP address is 192.168.1.106
Filename 'temp'.
Save address: 0x0
Save size:    0x0
Saving: *
TFTP error: 'Access violation' (2)
Not retrying...

Wireshark 擷取:

Wireshark 日誌

任何幫助/指針/建議?

正如“wmill”在他的回答中正確評論的那樣,大多數 tftp 伺服器只有在文件存在時才會寫入文件。在我的情況下也是同樣的問題。來自 u-boot 的 tftpput 工作正常。我安裝了 tftpd-hpa 並將其配置如下創建一個文件。編輯 /etc/default/tftpd-hpa 如下,

# /etc/default/tftpd-hpa

TFTP_USERNAME="root"
TFTP_DIRECTORY="/home/ankur/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-c --secure"

然後 /etc/xinet.d/tftp 中的 tftp 配置應該如下,

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

當我執行命令時,使用上述配置,我

tftpput 0x80200000 0x500000 192.168.1.3:uImage

可以將文件發送到主機 PC。

編輯:我剛剛注意到您的保存地址和大小為 0。

我還沒有在 u-boot 上嘗試過 tftpput。從命令幫助看來,地址和大小必須由命令行提供。我會試試的。我不知道 RAM 在您的平台上的位置,所以我無法給出有效的範例命令行,但它應該類似於:

tftpput 80000000 10

—-舊答案,如果以上沒有幫助,可能仍然有用

如果是我,我會在 tftp 伺服器上執行 wireshark 看看發生了什麼。

如果你不能這樣做,你可以在設備上使用集線器(而不是交換機)並將一台電腦插入同一個集線器來執行wireshark。(現在很難找到集線器。如果您沒有“過去”的集線器,這可能對您不起作用。)

您沒有提及您正在執行的 tftp 伺服器。它是基於Linux的嗎?常用的是 dnsmasq 和 tftpd-hpa。我都用過u-boot。

一種可能性是期權談判出了問題。

您的設備乙太網驅動程序也可能適用於小數據包,但不適用於較大的數據包。(但是,我認為大多數 tftp 傳輸最終會協商 512 字節的有效負載,因此數據包並不是那麼大。)

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