커널 모듈 컴파일해서 insmod할때 문제 발생

운형의 이미지

insmod하면 다음과 같은 에러 메시지가 나옵니다. 버전이 않맞는다니....

[root@localhost module_test]# insmod chardev.o
chardev.o: kernel-module version mismatch
        chardev.o was compiled for kernel version 2.4.19-5cl
        while this kernel is version 2.4.19.

현재 커널을 두개를 쓰고 있어서 혹시나 해서 알아봤습니다.

~ $ uname -a
Linux localhost.localdomain 2.4.19 #2 SMP 토 7월 12 14:27:04 UTC 2003 i686 i686 i386 GNU/Linux발생

하난 패치된 vmlinuz-2.4.18-15hl (한컴 3.0배포판) vmlinuz-2.4.19(새로 다운 받아 설치한 커널), 위 결과를 보시면 알겠지만 2.4.19로 부팅해서 작업한게 엉뚱한 버전과 안맞는다는 메시지가 나오는데 이거 어찌 해결하나요.?

지리즈의 이미지

운형 wrote:
insmod하면 다음과 같은 에러 메시지가 나옵니다. 버전이 않맞는다니....

[root@localhost module_test]# insmod chardev.o
chardev.o: kernel-module version mismatch
        chardev.o was compiled for kernel version 2.4.19-5cl
        while this kernel is version 2.4.19.

현재 커널을 두개를 쓰고 있어서 혹시나 해서 알아봤습니다.

~ $ uname -a
Linux localhost.localdomain 2.4.19 #2 SMP 토 7월 12 14:27:04 UTC 2003 i686 i686 i386 GNU/Linux발생

하난 패치된 vmlinuz-2.4.18-15hl (한컴 3.0배포판) vmlinuz-2.4.19(새로 다운 받아 설치한 커널), 위 결과를 보시면 알겠지만 2.4.19로 부팅해서 작업한게 엉뚱한 버전과 안맞는다는 메시지가 나오는데 이거 어찌 해결하나요.?

chardev.o의 버전은 2.4.19-5cl이고
kernel의 버전은 2.4.19입니다. 버전이 차이가 나네요....
kernel 컴파일 옵션 중에 모듈의 버전의 체크여부를 결정하는 것이 있습니다.
커널과 모듈의 버전 차이와 상관없이 사용하려면 이 옵션에 체크를 없애주고
다시컴파일해야합니다.

There is no spoon. Neo from the Matrix 1999.

운형의 이미지

Quote:
kernel 컴파일 옵션 중에 모듈의 버전의 체크여부를 결정하는 것이 있습니다.
커널과 모듈의 버전 차이와 상관없이 사용하려면 이 옵션에 체크를 없애주고
다시컴파일해야합니다.

이 말씀은 커널에 옵션을 줘서 다시 컴파일 하라는 말맞죠?

아 그리고 한가지더 2.4.19.-5cl버전은 한번도 설치 한적이 없는데 어째서 이버전으로 컴파일 되는지 이해가 안가네요.

Do you think that's the air you are breathing now?

익명 사용자의 이미지

운형 wrote:
Quote:
kernel 컴파일 옵션 중에 모듈의 버전의 체크여부를 결정하는 것이 있습니다.
커널과 모듈의 버전 차이와 상관없이 사용하려면 이 옵션에 체크를 없애주고
다시컴파일해야합니다.

이 말씀은 커널에 옵션을 줘서 다시 컴파일 하라는 말맞죠?

아 그리고 한가지더 2.4.19.-5cl버전은 한번도 설치 한적이 없는데 어째서 이버전으로 컴파일 되는지 이해가 안가네요.

적어도 모듈 개발자이거나 그것을 배우려는 분이라면
해당 Makefile을 한번쯤 이해하고 컴파일하는 습관이 필요하다는 생각이
듭니다. 잘못 컴파일해서 부팅안되면 자신만 손해죠.

Makefile에 보면 적어도 커널 버젼을 맞추는 (경로설정) 부분이 있습니다.
그곳을 반드시 한번 확인하시고 insmod 절차를 밟으세요.

커널 모듈의 소스를 보면 버젼에 종속적인지 아닌지를 표시하게 되어 있습니다.
대부분 버젼에 종속적입니다. (당연하겠죠? 미래 커널이 어떻게 될지 모르니까)
그러므로 버젼 맞추는것이 우선입니다. 무조건 컴파일하고 insmod가 된다고
사용하는 위험한 행동은 전문가(해당 개발자)에게 물어보세요.

지리즈의 이미지

먼저 주말이라 대강 건성으로 답변을 작성한 것을 운형님께 사과말씀드리겠습니다.
minzkn님께도 감사말씀드립니다.

커널 소스가장 상위에 위치한 Makefile의 첫부분에는
다음과 같이 버전정보를 가지고 있습니다.

VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 19
EXTRAVERSION = 5cl

해당 모듈이 포함되어 있는 커널 소스와 지금 컴파일된 커널에 이것이
일치하지 않음을 의미합니다.

모듈이 작성된 커널소스는 2.4.19를 기본으로 하여
패치가 되어 있음을 의미하지요...

해결 방법은 여러가지가 있습니다.
1. 지금 모듈을 포함하고 있는 커널 소스를 기본으로 하여 다시 커널을 컴파일 한다.
2. 지금 모듈에 포함되어 있는 Makefile의 버전정보를 수정하고 모듈을 컴파일한다.
3. 2.4.19 커널 소스의 버전을 바꾸어 커널을 다시 컴파일한다.

만약 모듈이 포함되어 있는 커널 소스를 전체로 가지고 계신다면 1을 권장해드리고 싶습니다. 변경(패치)의 범위가 어디까지인지 명확히 알수가 없기때문에
지금 작상하고 있는 모듈로 인해 커널 패닉을 잃으킬 가능성이 있으므로 2,3은
별로 권장해드리고 싶지 않습니다.

하지만, 수정된 내용을 명확히 알거나 단지 모듈소스만 가지고 있다면,
2,3을 권장합니다.

There is no spoon. Neo from the Matrix 1999.

댓글 달기

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