Charater Device에서 커널모듈에서 이벤트 발생시 User App에게 변수를 보내는 법
글쓴이: winterprincess / 작성시간: 목, 2009/07/09 - 4:55오후
커널모듈에서 이벤트 발생시 User App에게 변수를 보낼 수 있는 방법이 없을까요?
지금까지 예제를 보니 User App에서 먼저 커널 모듈로 접근할 때만 변수 메모리를 Copy할 수 있던데,
반대로는 작동하지 않는 것 같습니다...
혹시 문자 드라이버 외의 방법이나 문자 드라이버로 가능한 방법이 있는지 조언 부탁드립니다.
Forums:
저의 작은 지식으로는..
예전에 커널 2.4에서 기억하기로는 커널에서 유저로 특정 이벤트를 발생시키는 것은 어렵고요.
대신에 변수값을 바꾸는건 쉽습니다.
ioctl 에서 RW로 하나 등록하신후에 변수 포인터를 넘기고 난 뒤에 그 포인터를 가지고 copy_to_user와 같은 함수로 만들면 될듯하고요.
이벤트는 보통 App에서 Ioctl같은걸로 Polling 해서 커널에서 이벤트가 발생했는지를 검사하는 방식을(HandShaking)이용하면 될거 같습니다.
저도 비슷한 방법으로 구현을 시도했었습니다만...
답변 감사합니다.
select함수를 줘서 dev와 연결된 fd를 넣고 status를 계속 체크하는 방식으로 구현을 하려했습니다만...
이방법은 지속적인 감시가 필요한데다가
문제를 제가 구현하려는 목적이 들어오는 패킷의 정보를 특정 주기로 보내려는 것인데, 이벤트가 발생시 Waring을 뿌리기엔 문제점이 여러가지 발생되어 구현을 포기했었습니다...
오직 겨울 공주를 위하여.
-----------------------------------------------------------------------------------
오직 겨울 공주를 위하여.
아직 사용할 일이
아직 사용할 일이 없어서 저도 안 써봤지만, netlink라는 걸 한번 봐보세요.
http://www.linuxjournal.com/article/7356
답변감사합니다.
netlink도 고려해봐서 iptables 소스를 다 봤는데...
역시 어렵더군요.
우선 구현시 Kernel 처리 따로 User 처리 따로 노는 바람에 소켓 통신을 이용해서 정보를 주고 받는 건 포기했습니다.
어떤분이 인터럽트 처리를 하면 괜찮지 않느냐라고 말씀하셨는데,
RealTime을 포기하고 차라리 특정 데이타값을 일정 주기로 넘기는 방식으로 구현하는 것이 나을 거 같아 방식을 조금 바꾸었습니다.
사실...인터럽트 처리에 자신이 없어서 제가 자신 있는 방법으로 하려는 거였죠 ㅎㅎ
오직 겨울 공주를 위하여.
-----------------------------------------------------------------------------------
오직 겨울 공주를 위하여.
Kernel에서 User로 메모리 영역을 복사할 수 있습니다.
보통 copy_from_user나 copy_to_user 같은 함수를 사용해서 User 메모리 영역에 접근합니다.
그런데 질문의 내용을 보니 event wait를 원하는 것 같은데요.
그 경우에는 보통 kernel module에 ioctl을 추가하고 해당 ioctl에서 task를 wait queue에
밀어넣습니다. 그리고 event 조건이 되면 task를 다시 wait queue에서 빼서 run시키는 방식
으로 접근하시면 됩니다. User application에서는 새로 추가된 ioctl 호출이 완료되었을 때
event에 대한 처리를 하면 되는 겁니다.
vt_ioctl.c 코드에 통상적으로 사용하는 wait 코드가 있습니다. 해당 코드를 분석하시면 될
듯 합니다.
kernel module에서 wait 하는 코드는 다음과 같습니다.
보통 wait 종료 조건이 완료되더라도 즉시 task가 깨어나지 않습니다. 그럴 경우 wait 조건을
성립시키는 부분에서 해당 wait queue에 wake up하도록 해 줘야 합니다.
답변 감사합니다.
이런 방법이 있었네요.
한번 시도를 해봐야 할 것 같습니다.
지금 다른 방법으로 구현한 것과 이 방법을 비교해서 어떤 것이 나을지 보고 결정을 해봐야겠습니다.
감사합니다.
오직 겨울 공주를 위하여.
-----------------------------------------------------------------------------------
오직 겨울 공주를 위하여.
댓글 달기