[질문] 커널 모듈 프로그래밍...hello.o
글쓴이: hurryon / 작성시간: 월, 2003/03/24 - 11:01오전
커널 모듈 프로그래밍을 시작하려고 합니다. 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]#
Forums:
에휴...자답입니다...
음냐...조금만 더 찾아 보고 글을 올릴거 그랬나 봅니다. 문제는 현재 커널의
소스와 기존에 /usr/include/linux 에 있는 소스의 버전 차이때문에 이런
일이 발생 되었네요.
/usr/include/linux 와 /usr/include/asm 을 다른 이름으로 디렉토리을
변경해놓고.../usr/src/linux-2.4 에 있는 녀석들을 심볼릭 링크 시켰더니
잘 되네요.
Re: [질문] 커널 모듈 프로그래밍...hello.o
현재 쓰고 있는 커널과 컴파일할때 include된 커널 헤더가 다릅니다.
님이 쓰시는것은 한컴리눅스인데 컴파일할때 쓰인 헤더는 엉뚱한 커널헤더가 쓰였군요.
CFLAGS에 -I/usr/src/hancom/include 하시거나 로컬에 따로 커널이 있다면 그곳을 include하셔서 컴팔하고 실행해보세요.
happy insmoding. :wink:
p.s. 쩝.. 그러게요~ 답글이 두개가 되었네요.
:)
그래두...님께서 답변을 해 주시니...혼자 하고 있다는 생각이 안드네요...흐흑...
외롭습니다요.
ㅡ.ㅡ;;
저랑 같네요
저도 모듈을 올리고 싶어 몇일간 낑낑되고 있습니다.
저 역시 한컴 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사이트에가서 찾아봐도 이쪽으로는 없네요. 디바이스 드라이버 공부하는 사람들 모임같은건 없나봐요?
좀 봐주세요.답답합니다.
음냐. 글쎄요?
저두 이제 막...모듈을 보기 시작했지만...지금 님께서 작성하신 모듈은 제대로
올라가신거 같은데요?
[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
을 이용해서 모듈 메세지을 확인해 보시는게...
저도...더 이상은...
ㅡ.ㅡ;;
그런가요?
오렐리 디바이스 드라이버라는 책의 첫번째 프로그램을 해봤는데
insmod hello.o를 하면
Hello, World가 찍힌다고 하네요.
그리고 rmmod hello.o를 하게 되면
Goodbye가 찍히는데...
전 워닝이 떠서 먼가 잘 못된것 같다고 생각하고 있었거든요.
좀 더 알아보고 글 올립죠. 수거하세요.
댓글 달기