![U-Boot 中的 tftpput:错误:“访问冲突”(2)](https://linux22.com/image/39158/U-Boot%20%E4%B8%AD%E7%9A%84%20tftpput%EF%BC%9A%E9%94%99%E8%AF%AF%EF%BC%9A%E2%80%9C%E8%AE%BF%E9%97%AE%E5%86%B2%E7%AA%81%E2%80%9D(2).png)
我已经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捕获:
有任何帮助/指示/建议吗?
答案1
编辑:我刚刚注意到你的保存地址和大小都是0。
我还没有在 u-boot 上尝试过 tftpput。从命令帮助看来,地址和大小必须由命令行提供。我会尝试一下。我不知道您的平台上的 RAM 在哪里,因此我无法提供有效的示例命令行,但它应该类似于:
tftpput 80000000 10
---- 旧答案,如果上述内容没有帮助,可能仍然有用
如果是我,我会在 tftp 服务器上运行wireshark来看看发生了什么。
如果您无法做到这一点,您可以使用设备上的集线器(而不是交换机)并将电脑插入同一集线器来运行wireshark。 (现在很难找到集线器。如果您没有“过去”的集线器,这可能不适合您。)
您没有提及您正在运行的 tftp 服务器。是基于Linux的吗?常用的是dnsmasq和tftpd-hpa。我已经将两者与 u-boot 一起使用了。
一种可能性是选项协商出了问题。
您的设备以太网驱动程序也可能适用于小数据包,但不适用于较大的数据包。 (但是,我认为大多数 tftp 传输最终都会协商 512 字节有效负载,因此数据包实际上并没有那么大。)
答案2
正如“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。
答案3
简短回答:添加读tftpboot 文件夹中文件的访问权限
详细解答:
我有同样的问题。
某些文件正在被访问,因此 tftp 肯定可以正常工作。
我必须添加对导致问题的文件的读取权限,并且已修复