모듈(커널공간)에서의 디바이스 접근방법
글쓴이: jbsean / 작성시간: 수, 2014/01/22 - 10:21오후
안녕하세요 리눅스 커널 공부하는 초보 학생입니다.
궁금한것이 생겨서 질문드립니다.
모듈(커널공간)에서 다른 디바이스를 어떻게 사용할 수 있나요?
질문의 이해를 조금 쉽게 하기 위해 구체적으로 설명드리면...
먼저 제가 사용자공간에서 어떤 프로그램을 작성했습니다.
이 프로그램은 타이머 디바이스(character device)를 이용하는 프로그램 입니다.
디바이스를 사용하기 위해 흔히 이용하는 open / ioctl 같은 함수를 이용했습니다.
타이머로 하여금 일정 주기마다 제가 작성한 콜백함수를 호출하게하는 프로그램을 작성하였습니다.
잘 동작하였습니다.
그 다음 같은 동작을 하는 프로그램을 모듈로 작성해 커널에서 동작시켜보려고 합니다.
그런데 커널공간에서 디바이스를 이용하는 방법을 잘 모르겠습니다.
http://kldp.org/node/54420
이 질문이 저의 질문과 유사한데 답변을 읽어봐서는 무슨 말인지 잘 알아듣기가 어렵더군요.
바로 컨트롤 하라는 것이 어떻게 컨트롤 하라는 것인지...
타이머의 경우는 hpet을 사용하고 있습니다.
커널용api가 있었는데 2.6.3x쯤 부터 알아서 쓰라는 것인지 갑자기 없어졌습니다.
고수님들의 도움 부탁드립니다ㅠㅠ
모듈(커널공간)에서 다른 디바이스를 어떻게 사용할 수 있나요?
참고할 만한 예제나 책의 어떤 부분을 알려주셔도 잘 참고해보도록 하겠습니다.
Forums:
바로 사용한다는 의미는..
a.c , b.c 가 있을 때 a.c 에서 b.c 안에 있는 함수를 바로 호출 하죠?
그런 의미 입니다.
같은 text 공간에 있으니 바로 호출 가능 합니다..
A device driver 를 User 영역에서 사용은 open,write,read,ioctl... 을 통하여 시나리오에 맞게 사용하지만
A device driver 를 B device driver에서 사용시 A device driver 함수를 바로 호출 하면 됩니다.
근데 그렇게 하면 안되고 허접해 보입니다.
B device driver가 A device driver의 컴파일 유무에 따라
컴파일,링킹 된다면 안되겠죠..
그래서 커널에는 이미 많은 driver framework가 있습니다
i2c, gpio, regulator, 그외 수많은....
이런식으로 구성이 되겠죠
A device driver <-> A framework driver <-> B device driver.
gpio 를 예를 들면 다음과 같이 참고해 보실 수 있습니다.
A device driver : http://lxr.free-electrons.com/source/drivers/gpio/gpio-samsung.c
A framework driver : http://lxr.free-electrons.com/source/drivers/gpio/gpiolib.c
B device driver : #include linux/gpio.h 해서 gpio_request,gpio_get_value, gpio_set_value 해서 사용하면 됨.
그러나..
테스트하는데 저런 의미가 무슨 소용이겠습니까 ㅎㅎㅎ
저렇게 되어 있다는 것만 참고 하시고
그냥 바로 extern 해서 해서 사용하세요~
댓글 달기