모듈(커널공간)에서의 디바이스 접근방법

jbsean의 이미지

안녕하세요 리눅스 커널 공부하는 초보 학생입니다.
궁금한것이 생겨서 질문드립니다.

모듈(커널공간)에서 다른 디바이스를 어떻게 사용할 수 있나요?

질문의 이해를 조금 쉽게 하기 위해 구체적으로 설명드리면...

먼저 제가 사용자공간에서 어떤 프로그램을 작성했습니다.
이 프로그램은 타이머 디바이스(character device)를 이용하는 프로그램 입니다.
디바이스를 사용하기 위해 흔히 이용하는 open / ioctl 같은 함수를 이용했습니다.
타이머로 하여금 일정 주기마다 제가 작성한 콜백함수를 호출하게하는 프로그램을 작성하였습니다.
잘 동작하였습니다.

그 다음 같은 동작을 하는 프로그램을 모듈로 작성해 커널에서 동작시켜보려고 합니다.
그런데 커널공간에서 디바이스를 이용하는 방법을 잘 모르겠습니다.

http://kldp.org/node/54420
이 질문이 저의 질문과 유사한데 답변을 읽어봐서는 무슨 말인지 잘 알아듣기가 어렵더군요.
바로 컨트롤 하라는 것이 어떻게 컨트롤 하라는 것인지...

타이머의 경우는 hpet을 사용하고 있습니다.
커널용api가 있었는데 2.6.3x쯤 부터 알아서 쓰라는 것인지 갑자기 없어졌습니다.

고수님들의 도움 부탁드립니다ㅠㅠ

모듈(커널공간)에서 다른 디바이스를 어떻게 사용할 수 있나요?
참고할 만한 예제나 책의 어떤 부분을 알려주셔도 잘 참고해보도록 하겠습니다.

furmuwon의 이미지

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 해서 해서 사용하세요~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.