[질문] 커널 모듈 프로그래밍...hello.o

hurryon의 이미지

커널 모듈 프로그래밍을 시작하려고 합니다. hello을 찍으려고 하는데...
이것부터 막히고 있습니다.

#include <linux/kernel.h>
#include <linux/module.h>

#ifdef CONFIG_MODVERSIONS
#define MODVERSIONS
#include <linux/modversions.h>
#endif

int init_module()
{   
    printk("hello, hurryon!\n");

    return(0);
}

void cleanup_module()
{   
    printk("this message is kernel module\n");
}

CC = gcc
CFLAGS = -Wall -O -DMODULE -D__KERNEL__ -DLINUX

OBJS = hello.o

all : $(OBJS)

clean :
    rm -f *.o *~

다음과 같이 나옵니다. 에휴...버전이 맞지 않다고 나오네요. 뭐가 잘못 된건지...

[root@ns2 0324]# insmod hello.o
hello.o: kernel-module version mismatch
hello.o was compiled for kernel version 2.4.9-9
while this kernel is version 2.4.18-15hl.
[root@ns2 0324]#

hurryon의 이미지

음냐...조금만 더 찾아 보고 글을 올릴거 그랬나 봅니다. 문제는 현재 커널의
소스와 기존에 /usr/include/linux 에 있는 소스의 버전 차이때문에 이런
일이 발생 되었네요.

/usr/include/linux 와 /usr/include/asm 을 다른 이름으로 디렉토리을
변경해놓고.../usr/src/linux-2.4 에 있는 녀석들을 심볼릭 링크 시켰더니
잘 되네요.

MasterQ의 이미지

Quote:
[root@ns2 0324]# insmod hello.o
hello.o: kernel-module version mismatch
hello.o was compiled for kernel version 2.4.9-9
while this kernel is version 2.4.18-15hl.
[root@ns2 0324]#

현재 쓰고 있는 커널과 컴파일할때 include된 커널 헤더가 다릅니다.

님이 쓰시는것은 한컴리눅스인데 컴파일할때 쓰인 헤더는 엉뚱한 커널헤더가 쓰였군요.

CFLAGS에 -I/usr/src/hancom/include 하시거나 로컬에 따로 커널이 있다면 그곳을 include하셔서 컴팔하고 실행해보세요.

happy insmoding. :wink:

p.s. 쩝.. 그러게요~ 답글이 두개가 되었네요.

hurryon의 이미지

그래두...님께서 답변을 해 주시니...혼자 하고 있다는 생각이 안드네요...흐흑...
외롭습니다요.

ㅡ.ㅡ;;

bestfid의 이미지

저도 모듈을 올리고 싶어 몇일간 낑낑되고 있습니다.
저 역시 한컴 3.0을 사용하고 있는데 insmod하면 2.4.9-9랑 현재 2.4.20(커널컴파일 새로 했습니다 원래 한컴 3.0은 2.4.18-15hl)과 커널 버전이 안맞다고 하네요.
그래서 님 처럼 /usr/src/linux-2.4.20/include/linux를 /usr/include/linux 와 asm을 심볼릭링크를 하니 아래와 같은 메시지가 나옵니다.

root@jini dev_drv]# insmod ex.o
Warning: loading ex.o will taint the kernel: no license
See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Module ex loaded, with warnings

lsmod명령으로 보면 올라가있긴 올라가 있지만 실행이 안된거죠..

또한 아래와 같이 컴파일하면
gcc -I/usr/src/linux-2.4.20/include -c -o ex.o ex.c
insmod시 요런 메시지가 나네요
ex.o: couldn't find the kernel version the module was compiled for

흠... 도데체 뭐가 문제인지... 다른 linux사이트에가서 찾아봐도 이쪽으로는 없네요. 디바이스 드라이버 공부하는 사람들 모임같은건 없나봐요?

좀 봐주세요.답답합니다.

hurryon의 이미지

저두 이제 막...모듈을 보기 시작했지만...지금 님께서 작성하신 모듈은 제대로
올라가신거 같은데요?

[root@ns2 1]# insmod hello.o
Warning: loading hello.o will taint the kernel: no license
See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Module hello loaded, with warnings
[root@ns2 1]# lsmod
Module Size Used by Tainted: P
hello 712 0 (unused)
autofs 13348 0 (autoclean) (unused)
8139too 17704 1
mii 2156 0 [8139too]
ipt_REJECT 3736 6 (autoclean)
iptable_filter 2412 1 (autoclean)
ip_tables 14936 2 [ipt_REJECT iptable_filter]
mousedev 5524 0 (unused)
keybdev 2976 0 (unused)
hid 22244 0 (unused)
input 5920 0 [mousedev keybdev hid]
usb-uhci 26188 0 (unused)
usbcore 77024 1 [hid usb-uhci]
ext3 70368 6
jbd 52212 6 [ext3]
[root@ns2 1]# cat /proc/modules
hello 712 0 (unused)
autofs 13348 0 (autoclean) (unused)
8139too 17704 1
mii 2156 0 [8139too]
ipt_REJECT 3736 6 (autoclean)
iptable_filter 2412 1 (autoclean)
ip_tables 14936 2 [ipt_REJECT iptable_filter]
mousedev 5524 0 (unused)
keybdev 2976 0 (unused)
hid 22244 0 (unused)
input 5920 0 [mousedev keybdev hid]
usb-uhci 26188 0 (unused)
usbcore 77024 1 [hid usb-uhci]
ext3 70368 6
jbd 52212 6 [ext3]
[root@ns2 1]#

위는 저의 상황입니다. 혹시 콘솔이 아닌 엑스윈도의 한텀이나 엑스텀에서
작업하신다면...

tail -f /var/log/messages

을 이용해서 모듈 메세지을 확인해 보시는게...

저도...더 이상은...

ㅡ.ㅡ;;

bestfid의 이미지

오렐리 디바이스 드라이버라는 책의 첫번째 프로그램을 해봤는데
insmod hello.o를 하면
Hello, World가 찍힌다고 하네요.
그리고 rmmod hello.o를 하게 되면
Goodbye가 찍히는데...
전 워닝이 떠서 먼가 잘 못된것 같다고 생각하고 있었거든요.

좀 더 알아보고 글 올립죠. 수거하세요.

댓글 달기

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