커널에 선언되어 있는 함수를 모듈에서 사용할 수 있나요?

loss92의 이미지

안녕하세요
간단한 모듈 프로그램 하나를 작성하고 있는데
궁금한게 있습니다.
sched.h에 보면
static inline find_task_by_pid()
라는 함수가 구현되어 있는데요..
매개 변수로 입력된 pid값에 매칭되는 task_struct 의 주소를
되돌려주는 함수인데..
이 함수를 모듈에서도 사용할 수 있는지 궁금합니다.

구체적으로 xx.h라는
모듈 헤더파일에 include linux/sched.h 라고 선언하고
xx.c에서
task = find_task_by_pid(pid)
이런식으로 써도 되는지요?
저는 가능하다고 생각하고 위 처럼 프로그램을 작성했는데
리턴되서 받아오는게 없는거 같네요..
(처음에 task =null로 선언했는데, 함수를 수행해도
여전히 null값만 task에 입력되어 있습니다.)

모듈에서는 커널 내부에 static으로 선언된 함수를 사용하는게
불가능한지,
그리고 불가능하다면 어떻게 해야 되는지 알려주시면 감사하겠습니다.

ixevexi의 이미지

static키워드는 함수의 범위를 파일내로 제한하는 C언어 키워드 아니었나요

모듈에서 커널 내부에 static으로 선언된 함수를 사용하시려면

static을 해제하시고 EXPORT_SYMBOL(함수명)을 이용해서
심볼테이블에 등록해주세요

C++, 그리고 C++....
죽어도 C++

ixevexi의 이미지

헉 이제보니 헛소리했네요

inline함수의 구현이 .h파일안에 들어있으니까
되야하는게 정상인데요 :oops:

잘 모르는데 끼어들어서 죄송합니다.

C++, 그리고 C++....
죽어도 C++

loss92의 이미지

우선 답변 해주신점 감사드립니다.
그런데 마지막 글에 보면 inline으로 선언되어 있으니깐
정상적으로 동작해야 한다고 말씀하셨는데요
제가 알기로는 inline함수는 내부적으로 함수의 선언을
함수의 정의로 모두 교체하는 기능을 한다고 알고 있습니다.
(용어 선택이 적절했나 모르겠군요..
쉽게 말하면 매크로처럼 선언된곳에는 모두 구현으로 대체하는
기능을 한다고 알고 있습니다.)
static이라면 함수가 구현된 부분에서만 사용 가능하다는 의미라고알고 있습니다.
그런데 커널의 소스 코드를 뒤져보면 실제로 많은 *.c 파일에서
find_task_by_pid()함수를 사용하고 있더군요..
모듈에서만 불가능한건지, 아니면 함수를 사용하기 위한 조건이 있는데 그걸 제가 모르고 있는지 궁금합니다.

vananamilk의 이미지

*.c 파일에서 sched.h를 include 하니까 사용할 수 있는거 아닌가요? 아마도 head 파일을 include 했을겁니다.
글구 gcc에서 inline이라두 static을 붙이지 않으면 다른파일에서
호출할 수 있다구 하네요^

댓글 달기

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