디바이스 모듈에서 일반 파일을 create/read/write 가능할까요?

은영신랑의 이미지

디바이스 드라이버를 작성하고 있는데요,
이 모듈이 동작하는 것을 하나의 파일로 작성하고, 로그 파일 비슷하게
모든 과정에 대해 로그를 파일에 남겨서 분석해 보고 싶은데요.

/proc를 이용해도 되지만, 이 파일은 실제로 남지는 않으니까,
로그용 파일을 하나 만들면 좋겠다는 생각입니다.

좋은 방법이 있을까요?

codebank의 이미지

printk()를 이용해보시는건 어떨까요?
Module프로그램에서 또는 Device Driver를 만들때 printk()를 사용하면 Console에서 출력이
가능하거나 dmesg에서 찾아볼 수 있습니다.

http://www.linuxforum.com/linux-kernel-programming/index.html

여기의 10장에서는 tty로 출력하는 방법을 제시했고

http://www.freeos.com/articles/4051/

여기서는 console(모듈일때)이나 dmesg에서 출력하는 방법을 제시하네요.
한번 참고해보시기 바랍니다.

그런데 일반적인 fopen형태로 파일을 만들지 못하나요?
파일 만들기/읽기/쓰기에 문제가 없다고 생각했었는데 그게 아니였나보군요. ???

------------------------------
좋은 하루 되세요.

은영신랑의 이미지

우선 open 이 커널에서는 지원이 안되는걸로 알고 있거든요.
fopen도 마찬가지 이고요.
위의 함수들은 모두 usermode에서 사용가능하도록 되어있기 때문에
커널모드에서는 저도 잘 모르겠습니다.

faye의 이미지

커널 내에서 open 하는 방법만 보자면..

예전에.. linuxkernel.net에 이호님이 작성하신 klib 라이브러리를 이용하면 됐었던것으로 기억합니다..

지금은 사이트가 안열리는데..... 정식? klib는 찾기 힘드내요..

아래 링크는 다른분이 올려놓으신 klib에서 open관련인것 같습니다.

http://catchme.xcool.net:8080/emm_i686/download/tech/lib_lkm/fileio.c

참고하세요..

saxboy의 이미지

printk()를 이용하면 syslog에서도 받을 수 있겠지요..

charsyam의 이미지

은영신랑 wrote:
디바이스 드라이버를 작성하고 있는데요,
이 모듈이 동작하는 것을 하나의 파일로 작성하고, 로그 파일 비슷하게
모든 과정에 대해 로그를 파일에 남겨서 분석해 보고 싶은데요.

/proc를 이용해도 되지만, 이 파일은 실제로 남지는 않으니까,
로그용 파일을 하나 만들면 좋겠다는 생각입니다.

좋은 방법이 있을까요?

왜 안되겠습니까? 다 됩니다.

커널 시스템 콜을 잠시만 따라가봐도 어떻게 파일을 읽고 쓰는지 알 수 있습니다.

http://ns.mykernel.net/jsboard/read.php?table=onepage&no=13&page=1

위 부분을 응용하시면 될듯합니다. 그럼 고운 하루되시길.

=========================
CharSyam ^^ --- 고운 하루
=========================

은영신랑의 이미지

되었습니다. !!!

faye님이 올려주신 소스를 이용하여 방금 커널에서 파일을 생성하고
쓰기 기능까지 확인하였습니다.

그런데요, 일반 디바이스 드라이버도 가능할까요?
유저모드 용으로 만들어진 디바이스 드라이버도(char device drver)도
file_operation 구조체의 멤버를 가지고 있으니깐 가능도 할것 같은데요.
실제로 제가 하려는 것은 시리얼 디바이스 입니다.
또 시리얼 셋팅도 가능하다면 좋겠네요.

어쨋든 답변 주신분들께 감사드립니다.

ixyou의 이미지

faye님의 소스를 가지고 해보는데 않되네염
제가 초보라 버그가 떠도 어떻게 해야할지 모르겠구여
일단 필요한 함수인 open write read 함수만 ipv6에 있는
route.c라는 커널모듈에 넣었습니다.
그리구 include 파일들을 넣구여 아래와 같이 커널모듈컴파일을 했습니다.
make modules && make modules_install
그런데 erro는 없는데 결과도 않드구 가끔 부팅하면 파일 체크까지 하는 걸 보면
문제가 있는 것 같습니다.

파일을 기냥 통째로 커널에 인클루드 시키려면 어떻게 하져?
처음 접해서 잘 모르겠어여
구현 하신분 있으면 소스 좀 주세여
그리구 컴파일 방법두 가르쳐 주시면 감사하겠습니다.^^
제가 초보라 버그가 떠도 어떻게 해야할지 모르겠구여
일단 필요한 함수인 open write read 함수만 ipv6에 있는
route.c라는 커널모듈에 넣었습니다.
그리구 include 파일들을 넣구여 아래와 같이 커널모듈컴파일을 했습니다.
make modules && make modules_install
그런데 erro는 없는데 결과도 않드구 가끔 부팅하면 파일 체크까지 하는 걸 보면
문제가 있는 것 같습니다.

파일을 기냥 통째로 커널에 인클루드 시키려면 어떻게 하져?
처음 접해서 잘 모르겠어여
구현 하신분 있으면 소스 좀 주세여
그리구 컴파일 방법두 가르쳐 주시면 감사하겠습니다.^^

익명 사용자의 이미지

저두 faye님의 소스를 가지고 커널에서 파일 입출력 성공했습니다. mode=0;을 넣어서 그랬어여
write하려면 mode=200을 해야 쓰기 권한이 되네염^^;
도움이 마니 됐음다^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.