모듈 컴파일할때...

lantelt의 이미지

간단한 모듈을 하나 짰습니다.

컴파일도 다하고 모듈을 올리려고 하는데...

커널 버전이 다르다며 올라가지 않습니다.

-f 옵션 말고 해결하려면 어떻게 해야 하나요?

커널을 재컴파일해야 하는건가요?

송지석의 이미지

쓰고계신 커널의 version.h 를 참조하세요.
커스텀으로 빌드하셨다면.. /usr/src/linux-2.4/include/linux/version.h 일 겁니다.
여기에 쓰인 버전 코드로 맞춰주세요..

lantelt의 이미지

답변 해 주신거 감사드립니다. 그런데 제가 너무 무지해서 그러는데..

버전 코드로 맞춘다는게 어떤 뜻인가요?

hurryon의 이미지

다음의 링크을 참고하세요.

:-)

http://bbs.kldp.org/viewtopic.php?t=1661&highlight=

송지석의 이미지

[root@song55 root]# cat /usr/src/linux-2.4/include/linux/version.h
#include <linux/rhconfig.h>
#if defined(__module__smp)
#define UTS_RELEASE "2.4.18-14smp"
#elif defined(__module__BOOT)
#define UTS_RELEASE "2.4.18-14BOOT"
#elif defined(__module__bigmem)
#define UTS_RELEASE "2.4.18-14bigmem"
#elif defined(__module__debug)
#define UTS_RELEASE "2.4.18-14debug"
#else
#define UTS_RELEASE "2.4.18-14"
#endif
#define LINUX_VERSION_CODE 132114
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

저의 경우는 이렇게 되어있습니다.
#define LINUX_VERSION_CODE 132114
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
커널에서 모듈을 올릴 때 위 부분을 참조하는 것으로 알고 있습니다. LINUX_VERSION_CODE가 틀리면 에러를 내겠지요.
2.4.18 이니까 2<<16 + 4<<8 + 18 하면
132114지요 (계산기로 확인 계산하느라 힘들었습니다. -_-)
cat /proc/version 으로 한번 확인해보시는 것도 괜찮을 듯..
제가 모듈 프로그램을 해본 게 좀 오래 전이라.. 기억이 잘.. 어쨌든 모듈 버전 맞춰준다는 건 커널 버전코드를 define 문에서 정해진 것과 맞추는 것입니다.
송지석의 이미지

조금 더 찾아봤습니다.

프로그램 하신 모듈의 include되는 버전 코드는,

/usr/include/linux/version.h입니다.

이것이 module.h에서 불려집니다.

#include <linux/version.h>
static const char __module_kernel_version[] __attribute__((section(".modinfo"))) =
"kernel_version=" UTS_RELEASE;

저의 경우 /usr/include/linux/version.h 의 내용은
#define UTS_RELEASE "2.4.9-9"
#define LINUX_VERSION_CODE 132105
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

이렇게 되어있습니다.
아까 보셨던 2.4.18과 다르지요.
그러므로 이 /usr/include/linux/version.h의 내용을 /usr/src/linux-2.4/include/linux/version.h 맞춰주시면 됩니다. (물론 빌드하신, 또는 깔려있는 커널의 소스가 /usr/src/linux-2.4에 깔려있다는 가정하에입니다.)
cat /proc/version 하시면
[root@song55 drvtest]# cat /proc/version
Linux version 2.4.18-14 (bhcompile@stripples.devel.redhat.com) (gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7)) #1 Wed Sep 4 13:35:50 EDT 2002

이렇게 나오는 데 여기 나온 버전 2.4.18을 가지고 계산하셔서 맞춰 주실 수도 있습니다.
charsyam의 이미지

보통, 제일 좋은 방법은 먼저 새 커널을 다운 로드 받아서, 커널 컴파일을

한다음, 그 커널 헤더를 이용해서 커널 모듈을 작성하는 것입니다.

그럼 고운 하루

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

라키시스의 이미지

위에 링크 소개해 주신분의 링크에도 나와 있지만,

커널 컴파일 가이드 같은데 보면
커널 컴파일 하고 설치할 때 /usr/ 아래에 몇개의 심볼릭 링크를 새로 고쳐 주는 부분이 나옵니다.
일단은 그렇게 심볼릭 링크를 수정하지 않으셔도 커널은 잘 동작합니다... 만!

커널 모듈을 컴파일하기 위해서는 심볼릭 링크를 수정하셔야
제대로 된 커널 헤더를 읽어서 컴파일이 됩니다.
버젼 문제가 안생기는 것이죠.

gcc 의 기본 include 디렉토리가 /usr/include 로 되어 있어서 그렇습니다.
굳이 심볼릭 링크를 갱신하시기 싫으시다면 -I 옵션으로 해결을.. 쿨럭 -_-;;

고도리의 이미지

일단 윗분들 말씀같이 커널의 include디렉토리를 symbolic link로 맞춰서
해보세요...

저같은 경우 slackware쓰다가 redhat에서 프로그램할때 그런일이
발생해서 황당했었습니다....

왜 /usr/include/linux랑 /usr/include/asm이랑 커널의 소스랑
링크 안시켜 놓는지 모르겠군요.... -.-;

아니면 커널의 옵션중 모듈에 버젼정보 포함하도록 하는 부분이 있습니다.
그부분을 exclude하고 해보세요. 웬만하면 될겁니다.

그리고, 요번에 ppc용 모듈을 올리다가 발견한 것이기는 한데, -O2옵션을
안줬더니 올라가지를 않더군요....왜 그런지 잘 모르겠지만

-O2옵션 줬더니 올라가더군요...자료 조사해 봐야 되겠더군요..

그럼...

서명.....음, 서명이라...

아싸!!! Three Go!

lantelt의 이미지

정말 감사합니다~^^

댓글 달기

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