serial 관련 커널 코드들을 보고 있습니다.
일반적인 시리얼 프로그램들의 경로는 serial 드라이버에서 ISR을 수행하고 tty 레이어에서 기 설정되어 있는 line discipline (ldisc)를 보고 처리를 수행하여 dev/ttySx 까지 올리는 것으로 알고 있습니다. 여기서 디폴트로 사용되는 line discipline은 n_tty 이구요...
여기서 질문이 있는데요...
line discipline을 복수개로 사용하는게 가능할까요 ?
시리얼을 통해서 입력되는 데이터의 종류가 한 두세가지 정도 된다고 할때..
flip_buff로 올려주기 전에 데이터 타입을 분류해서
A 라는 데이터 타입은 n_tty ldisc를 사용해서 dev 파일로 올려주고..
B 라는 데이터 타입은 serport ldisc를 사용해서 처리해 주고...
뭐 이런식으로 처리가 가능한지 궁급합니다.
지금 까지 테스트해 보기로는 디폴트로 사용되는 n_tty ldisc를 사용하다가 새로운 ldisc (serport.o)를 모듈로 등록하면
모든 serial 데이터의 입력은 새로운 ldisc를 타고 올라가는 것으로 보입니다.
그럼 답변 부탁드립니다.
아래 질문에 이어지는 질문 입니다.
http://kldp.org/node/75459
답변해 주시는 분들이 없어서 기대를 많이 하지는 않지만 혹 관련해서 작업하신 분들이 계시다면 답변 부탁드립니다.
serial 인터페이스를 통해서 입력된 데이터들은 tty_io.c 파일의 flush_to_ldisc() 함수 까지 호출이 되고, 이 함수의 마지막 라인에 있는
tty->ldisc.receive_buf() 함수를 호출합니다. 여기서 ldisc.receive_buf는 함수 포인터이고
특정 line discipline 으로 등록된 함수를 호출하게 됩니다. 디폴트로는 n_tty line discipline이
등록되어 있구요...
그런데 1개 이상의 line discipline을 등록할 경우 구분해서 사용하고자 합니다. 어떤 데이터는 디폴트로 등록된
n_tty line discipline을 사용하고 싶고, 어떤 데이터에 대해서는 사용자가 정의한 line discipline을
사용하고 싶고...
이런식으로 데이터를 분류해서 해당하는 line discipline을 적용코자 하는데 마땅히 방법이 생각나질 않네요...
관련해서 작업하신 분들의 답변 부탁드립니다.
'QnA' 카테고리의 다른 글
특정 thread에만 alarm을 사용하고 싶습니다. (0) | 2009.08.24 |
---|---|
sleep하는중에 alarm시그널이 catch되면 (0) | 2009.08.24 |
임베디드 리눅스 시스템에서 데이터 버스의 공유...... (0) | 2009.08.13 |
소켓에 있는 데이터를 비우려면? (0) | 2009.08.07 |
restrict 키워드 (0) | 2009.07.29 |
WRITTEN BY
- RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.