U-Boot 中的 tftpput:錯誤:“訪問衝突”(2)
我
CONFIG_CMD_TFTPPUT
在 U-Boot 中啟用了,但我無法使用它。我已經設置了
serverip
和ipaddr
環境變數。當我按如下方式使用它時,它會超時: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 擷取:
任何幫助/指針/建議?
正如“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 字節的有效負載,因此數據包並不是那麼大。)