U-Boot 中的 tftpput:错误:“访问冲突”(2)

U-Boot 中的 tftpput:错误:“访问冲突”(2)

我已经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日志

有任何帮助/指示/建议吗?

答案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 肯定可以正常工作。

我必须添加对导致问题的文件的读取权限,并且已修复

相关内容