[완료]모듈 프로그램에 관한 질문입니다.
글쓴이: kwonsu / 작성시간: 화, 2010/01/26 - 4:32오후
안녕하십니까.
모듈프로그램에 대한 개념이 좀 없어서 이렇게 질문드립니다.
여러 고수님들의 도움 부탁드립니다.
1. 모듈프로그램을 하나 만들려고 하는데 kernel space 와 user space 간 통신을 하는 모듈프로그램을 만들려고 합니다. 찾아보니 다양한 방법들이 있는데 netlink로 해볼까 하는데 커널 버전마다 조금 달라 보여서 어떤 방식으로 하는것이 효과적인지 모르겠습니다. 제가 사용하고자 하는 커널버전은 2.6.22.19 입니다.
2. 응용프로그램에서 사용하는 쓰레드나 포크 방식처럼 하고자 하는 기능을 따로따로 동작하도록 하는 방식이 모듈프로그래밍을 할때도 할수 있는지 궁금합니다. 있다면 어떤 방식으로 하는지 링크나 기타 문서가 있으시다면 부탁드립니다.
끝까지 읽어주셔서 감사합니다. 여러 고수님들의 현답 부탁드립니다.
그럼 수고하십시요.
Forums:
1. netlink 는 잘
1. netlink 는 잘 모르겠고.. 처음 해 보시는 거라면 read, write call 을 구현해서 하는 방법부터 해 보시고 더 나은 방법을 찾는 것이 좋을 듯 합니다.
2. 커널 쓰레드가 있습니다.
문서는 "리눅스 커널의 이해" 라는 책이 있습니다.
========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux
임베디드 리눅스 관련 프리렌서 지향
감사합니다. 질문 하나 더 드립니다.
먼저 친절한 답변 감사드립니다 ^^
한가지 더 질문 드립니다.
질문이 말이 안되는것 같은 생각이 들지만 cpu가 하나 있을 경우 작업 1은 무한루프를 돌면서 특정작업을 하고 작업 2는 응용프로그램간 통신을 하게 한다면 방법이 있을지 여쭙니다.
감사합니다.
지식의 여인은 옷을 쉽게 벗지 않는다.
하지만 보고싶다. ㅡㅜ 아.. 통재라~~~.
지식의 여인은 옷을 쉽게 벗지 않는다.
잡초인생. 잡초처럼 끈길기게....
제가 궁금한 것은
제가 궁금한 것은 그런작업을 왜 커널모드에서 할려고 하시는지 잘 모르겠습니다.
그런 상황이라면, user mode에서 하고 필요한 것만 kernel mode로 호출하는 것이 좋지 않을까요?
물론, 말씀하시는 것이 방법이 있습니다.
윗분이 말씀하시는 것처럼
kernel thread를 생성해서 작업1시키고, read()/write() 통해서 통신하면 됩니다.
답변 감사드립니다.
우선 제가 할 목적은 kernel space에서 후킹작업을 하고 user space에서 로깅처리등의 작업을 할 계획이였습니다.
그래서 kernel 모듈에 kernel space와 user space 간 통신만 하는 부분, 그리고 후킹하는 부분 이렇게 두 부분을 나눌려고 했던 거죠.
그래서 생각한것이 처음에 netlink로 통신하는 방법이였는데 이건 커널별로 좀 다르고 시간이 많이 걸릴것 같아 보류하고 proc나 udp소캣을 이용한 통신을 생각했습니다.
응용프로그램으로 치면 스레드 두개를 생성하고 하나는 클라이언트 통신, 하나는 시스템 감시 뭐 이런 식으로 하면서 한쪽 스레드의 결과값에 따라 상대 스레드를 lock/unlock 하는 것처럼 말이죠.
방법이 안좋나요? ^^; 더 좋은 방법이 있으면 알려주십시요. ^^
방향을 잡기위한 참고용으로 kernel thread 생성 하고 read/write하는 예제 소스나 참고할 사이트를
알려주시기를 부탁드립니다.
감사합니다.
지식의 여인은 옷을 쉽게 벗지 않는다.
하지만 보고싶다. ㅡㅜ 아.. 통재라~~~.
지식의 여인은 옷을 쉽게 벗지 않는다.
잡초인생. 잡초처럼 끈길기게....
일단 이렇게 했습니다.
제가 할려고 했던거는 결국 kernel module과 user program간 통신이였습니다.
이 통신을 이용하여 kernel module에서 생성된 로그정보를 user program에 넘기는 거였습니다.
테스트는 다음과 같은 방법으로 했습니다.
1. netlink
2. user program에서 읽을 수 있도록 파일에 저장
3. kernel module <--> user program 간 소켓통신 ( netlink와는 별개 )
1번 netlink방법은 kernel module에서 보내는 방법이 검색을 해도 마땅한 예제소스를 발견하지
못했습니다. 발견했던 것들을 전부 테스트 해봤으나 동작이 원할하지 않았으며 커널 소스 디렉토리에 있는
netlink 관련 소스, 그리고 route관련 소스등을 보았으나 시간이 허락하지 않아 일단 패스했습니다.
참고로 user program에서 보낸 패킷정보를 이용하여 kernel module에서 다시 보내는 방식을 취하는듯 하였습니다.
2번 방법은 좀 아닌듯 싶지만 일단 해보기로 했으나 결과는 아니였습니다.
3번 방식으로 선택하여 대신 user program에서 서버로 띄우고 kernel module에서 접속하여 로그를 보내는 형식으로 하였습니다.
일단 3번으로 테스트 중이며 원할한 동작이 되는지 지켜보고 있습니다.
저와 같은 생각을 하셨거나 고민하신 분들에게 아주 조금이나마 도움이 됬으면 합니다. ^^;
이 글에 답변 주신 분들에게 다시한번 감사의 말씀 드립니다.
감사합니다.
지식의 여인은 옷을 쉽게 벗지 않는다.
하지만 보고싶다. ㅡㅜ 아.. 통재라~~~.
지식의 여인은 옷을 쉽게 벗지 않는다.
잡초인생. 잡초처럼 끈길기게....
댓글 달기