S2410 cs89x0 : Tx buffer not free 메세지가 뜨네요.
2007.12.09 00:30
소켓통신을 사용하여 데이타를 주고 받는 시스템을 구축중입니다.
하나의 PC에 10개의 ARM보드가 물려있고, 각각의 IP와 MAC Address를 할당하였습니다.
처음에는 별다른 문제가 없었는데 점점 Data양이 많아 지면서
cs89x0 : Tx buffer not free
NETDEV WATCHDOG : eth0 : transmit time out
eth0 : transmit timed out, IRQ conflict?
위와 같은 메세지가 뜹니다.
특정한 보드에서 나타나는 현상이 아니라 전체적으로 나타나는 현상입니다.
위의 메세지는 우연히도 시리얼을 이용해서 화면을 모니터링 하다가 발견한 메세지 입니다.
시리얼 포트가 한개이다 보니 어느 보드에서 이러한 현상이 일어날지 모르고, 데이타를 주고 받는 프로그램상에서 동작을 안 할 시에 텔넷을 이용해 보드에 접속해봅니민. 접속이 안되어서 이 보드가 죽었는지 살았는지 구별을 할 수가 없었습니다.
1. 위의 에러를 해결할 수 있는 방법 부탁드립니다.
2. 또한 시리얼을 이용하는 방법외에 보드가 동작을 안 할시에 이 보드가 죽었는지 아니면 살아있는지
확인할 수 있는 방법을 알고 싶습니다.
댓글 3
-
이동수
2007.12.15 00:20
-
오재경
2007.12.16 07:43
네트웍상에 데이타가 너무 많이 움직입니다.
이더넷칩이 데이타를 네트웍상에 뿌려야 하는데 네트웍상에 패켓들이 너무많아 전송할수 없는 상태가 되어 하드웨어 버퍼가 차버린 상태입니다. 아마도 TCP/IP 를 사용하는것 같군요. 그리고 많은 양의 데이타를 전송하는것 같구요 .
프로토콜을 수정하셔서 네트웍상의 데이타양을 줄이세요
네트웍 인터럽트가 계속적으로 걸릴겁니다.
시리얼 콘솔에서 cat /proc/interrupt 로 확인해 보세요
^^ -
goodman
2007.12.26 01:15
프로토콜을 수정해서 네트웍상의 데이타를 줄이라고 말씀하셨는데요...
TCP/IP 소스상에서 주고 받는 데이타 양을 말씀하시는 건가요?
또한 인터럽트가 계속 걸리는거면 인터럽트를 클리어 해주는 기능이 들어가 있지 않나요?
아니면 메모리를 클리어 해주는 기능이 있지 않나 궁금합니다.




vir_addr = ioremap( phy_addr, size_addr )
.....
iounmap(vir_addr);
vir_addr : 버추얼 어드레스의 선두 주소.
phy_addr : 물리 주소.
size_addr : 접근할 영역의 크기.
ioremap 후 사용이 끝나시면 ( 일반적으로 드라이버가 종료 시) iounmap을 사용하여 할당을 해제 해야합니다.
좋은 결과 있으시길 바랍니다.