web-dev-qa-db-ja.com

U-Bootのtftpput:エラー: 'アクセス違反'(2)

U-BootでCONFIG_CMD_TFTPPUTを有効にしましたが、使用できません。

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のキャプチャ:

Wireshark log

ヘルプ/ポインタ/提案はありますか?

2
ART

「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にファイルを送信できます。

1
ART

編集:保存アドレスとサイズが0であることに気づきました。

私はu-bootでtftpputを試していません。コマンドヘルプから、アドレスとサイズをコマンドラインで指定する必要があるようです。私はそれを試してみます。プラットフォームのどこにRAMがあるのか​​わからないので、有効なコマンドラインの例を示すことはできませんが、次のようになります。

tftpput 80000000 10

----古い答え、上記が役に立たない場合でも役立つ場合があります

私の場合は、tftpサーバーでwiresharkを実行して、何が起こっているかを確認します。

それができない場合は、デバイスのハブ(スイッチではない)を使用し、PCを同じハブに接続してwiresharkを実行できます。 (最近はハブを見つけるのが難しいです。「昔」のハブがない場合、これはおそらく機能しません。)

実行しているtftpサーバーについては言及していません。 Linuxベースですか?よく使用されるのはdnsmasqとtftpd-hpaです。私は両方をu-bootで使用しました。

1つの可能性は、オプションネゴシエーションで問題が発生していることです。

また、デバイスのイーサネットドライバは小さなパケットでは問題ないが、大きなパケットでは機能しない可能性があります。 (ただし、ほとんどのtftp転送は512バイトのペイロードをネゴシエートするため、パケットはそれほど大きくないと思います。)

2
wmills

短い答え: tftpbootフォルダー内のファイルにreadアクセス権を追加します

詳細な回答:

私も同じ問題を抱えていました。

一部のファイルがアクセスされていたため、tftpは確実に機能していました。

問題の原因となっているファイルへの読み取りアクセスを追加する必要があり、修正されました

0
Hamzahfrq