안녕하세요 ?
select() 함수를 이용하여 2개의 시리얼 포트 입출력 프로그램을 작성하고 있는데,
프로그램이 자꾸 죽고 있습니다.
확인한 결과 시리얼 포트를 통하여 데이터가 입력되기만 하면 select()함수에서 죽습니다.
입력전에는 상관이 없고, select()함수 호출시 시리얼 포트fd를 readfdset에 등록하지 않아도
 포트가 열려있으면 입력시에 select()함수가 아무런 메시지도 뿌려주지 않은채 죽어버립니다.
프로그램은 다른 플랫폼에서 확인이 이미 된 것이고 이번에 2440으로 포팅하고 있는 중입니다.
2410에 미지에서 포팅한 커널을 이용하여 잘 돌아가고 있고,
펜티엄에 Redhat9에서 잘 돌아가고 있습니다.

물론 falinux에서 배포하는 시리얼 테스트 프로그램은 잘 돌아갑니다.
또 select()함수를 사용하지 않으면 이상이 없습니다.
무척 황당하여 장시간 테스트를 해본후 찾아낸 현상입니다.

제 생각에는 시리얼 드라이버 단에서 문제가 있는 것 같은데,
혹시 같은 경험을 하신 분 안계신가요?
시리얼 드라이버를 확인해보니, 커널을 포팅한 회사마다 많이 틀려서
어디가 문제인지 쉽게 파악이 되지 않네요.

많은 부탁 드립니다.


=========================>
자답 :

포트 open()이후에 다음과 같은 함수를 사용했는데, 이 함수를 죽이니까 이상없이 동작하네요.
다른 곳에서는 이상이 없었는데, 뭐가 좀 다른가 보죠.
/* Make the file descriptor asynchronous (the manual page says only O_APPEND and O_NONBLOCK, will work with F_SETFL...) */
//  fcntl(m_nFd, F_SETFL, FASYNC);

이유는 좀 더 찾아봐야 되겠네요.