리눅스 커널 프로그래밍 시 궁금한 점이 있어 질문드려요~

mjcho86의 이미지

안녕하세요.

리눅스 커널 프로그래밍을 하고 있습니다.

상황은 다음과 같습니다.

1. 같은 기능을 하되 처리를 다르게 하는 2개의 모듈이 있다.(A,B라 가정)
2. 두 개의 모듈을 모두 module 방식이 아닌 built-in 방식으로 컴파일해서 커널에 포함시킨다.
3. 포함된 두 개의 모듈(정확히는 모듈은 아니지만 편의상)이 사용자가 원하는 모드로 코드를 수행하길 원한다.

이상이 요구사항인데요.

현재 두가지를 모두 같은 netdev에 등록하여 컴파알 하는데까지는 성공했는데
특정한 파라매터 값을 넘겨줘 원하는 모듈A 나 모듈B가 동작시키는 부분을 어떻게 구현해야 하는지 모르겠습니다.

해당 부분에 경험이 있으신분들께 조언 구합니다^^

freemckang의 이미지

Built-in이라고 말씀하셨으니, 특정한 parameter를 넘겨준다는 것은 module loading time때는 아니겠죠??

별도의 ioctl을 만들 것이 아니라면 proc으로 해결할 수 있지 않을까요??

句日新, 日新 日新 又日新.

mjcho86의 이미지

답변 주셔서 감사합니다!

/proc/file

이거 이용하라는 말씀이신거 같은데 proc 사용해서 특정 모듈로 동작하도록 가능한가요?
간단한 설명이나 예제 참조할만한 코드 있으시면 링크같은게 있을까요~?

하나의 모듈내에서의 흐름이면 proc이나 ioctl을 써서 할텐데
지금은 두개의 모듈을 사용하고 사용하지 않고를 제어할 수 있는 뭔가의 방법을 찾고 있답니다^^

freemckang의 이미지

어떤 상태에 따라서 device driver A를 쓰느냐, B를 쓰느냐를 결정하는 것인가요??

다 알고 계시는 내용이겠지만.. 혹시나해서.. 그냥 써봅니다.. ^^;

두개의 모듈이 각각 module_init()과 module_exit()를 통해서 초기화/종료 코드가 실행될텐데요, proc의 입력에 따라서 각각의 module의 module_init()과 module_exit()를 스위칭 해주면 가능하지 않을까요?

메모리나 IRQ 사용에는 신중을 기해야겠네요.

句日新, 日新 日新 又日新.

익명 사용자의 이미지

ioctl/proc등을 이용해서 환경 값을 설정하고
그 설정값에 따라서 분기하게 코드를 짜면 될텐데요...
아주 많이 사용하고 아주 일반적인 방법인데 무엇이 문제인지를 이해가 안되네요.

커널의 유저모드의 프로세스와 달아서
전역 변수는 정말 아무 곳에서나 접근이 가능 합니다.
물론 static은 안되겠고, 커널 모듈간의 공유라면, EXPORT_SYMBOL 을 사용해야 하지만,
근본적으로는 접근에 제약이 없습니다.

예를 들면,
모듈 A와 B가 동작이 동일하다면, function pointer를 이용해서 layer를 만들고
설정 값에 따라서 호출 할 모듈을 선택하게 구현 해도 될듯 하네요.

대표적인게 파일 시스템도 이렇게 구현 되어 있죠....

mjcho86의 이미지

저도 처음에는 분기 처리하려 했는데 지시 및 요구사항이 저렇게 내려와서 어쩔수 없었답니다!

파일 시스템쪽 참조해서 한번 살펴볼께요~

답변 감사합니다.

댓글 달기

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