U-Boot의 tftpput: 오류: "액세스 위반" (2)

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 로그

어떤 도움/포인터/조언이 있습니까?

답변1

편집: 저장 주소와 크기가 모두 0인 것을 방금 확인했습니다.

아직 u-boot에서 tftpput을 시도하지 않았습니다. 명령 도움말을 보면 주소와 크기가 명령줄에서 제공되어야 하는 것으로 나타납니다. 한번 시도해 보겠습니다. 귀하의 플랫폼에서 RAM이 어디에 있는지 모르기 때문에 실제 명령줄 예제를 제공할 수는 없지만 다음과 같아야 합니다.

tftpput 80000000 10

---- 이전 답변, 위의 내용이 도움이 되지 않으면 여전히 유용할 수 있습니다.

저라면 무슨 일이 일어나고 있는지 알아보기 위해 tftp 서버에서 wireshark를 실행하겠습니다.

그렇게 할 수 없는 경우 장치의 허브(스위치 대신)를 사용하고 컴퓨터를 동일한 허브에 연결하여 Wireshark를 실행할 수 있습니다. (요즘에는 허브를 찾기가 어렵습니다. "옛날"의 허브가 없다면 이 허브가 적합하지 않을 수도 있습니다.)

실행중인 tftp 서버에 대해서는 언급하지 않았습니다. 리눅스 기반인가요? 일반적으로 사용되는 것은 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가 작동 중이어야 합니다.

문제를 일으키는 파일에 읽기 권한을 추가해야 했고 문제가 해결되었습니다.

관련 정보