강좌 & 팁
ezboot 2.3.04를 받아서 새로 컴파일해서 쓰고 있습니다.
기본 IP 주소 등을 변경하려고 새로 컴파일을 시도하였고요.
보드는 ez-s3c2440이고,
vmware에 CentOS 5.2를 설치하고
falinux에서 제공하는 크로스컴파일러를 사용하였습니다.
그러던 중 제가 임의로 수정한 부분이 있는데, 참고가 되실 분이
있을 것 같아서 몇 자 적어봅니다.
1. cpu 속도
arch_s3c2440/setup.h 에서
#define CPU_SPEED 부분이 있는데요.
현재 소스는 S3C2440_CPU_296M로 되어 있어서
#define CPU_SPEED S3C2440_CPU_400M
과 같이 바꾸었습니다. 아직까지는 이상없이 쓰고 있고요. ^^
2. tftp 관련
리눅스의 tftpd를 사용하면 ezboot에서 종종 깨지는 문제가 있어서 살펴보니
ezboot에서 동시에 도착한 이더넷 프레임을 같은 버퍼에 받아서 처리하기 때문에
데이터가 잘못 된 것으로 인식되더군요.
윈도우용 tftp 서버는 ack가 없으면 재전송을 하는데
리눅스 용은 재전송을 하지 않아 결국 ack 미수신에 의한 timeout이 발생하네요.
그래서 ezboot에서 이더넷을 사용할 때 한 프레임 이상의 데이터를 연속하여
수신하는 경우가 없는 것으로 생각하고
한 번에 한 프레임만 읽도록 수정하였습니다.
현재까지는 잘 되는 것 같네요.
main/ax88796b.c 파일에서
int ax88796b_receive(void *pRxBuf, int len) 함수에서
next_frame = rxframe.next;
ax_writeb(next_frame-1, EN0_BOUNDARY);
total += packetlength;
break; // mhkang
}
return total;
}
와 같이 while 루프를 바로 빠져나가서 한 번에 한 프레임만 읽도록 수정하였습니다.
혹시 같은 문제를 가지고 계셨던 분이 있으시면 적용해 보시고
결과도 같이 공유했으면 좋겠습니다. ^^
아주 귀한 말씀을 주셨습니다. 좋은 글 감사드립니다.