일반적으로 사용자/커널 프로그램이 컴파일 될때는
#include
으로 선언한 파일들을 /usr/include/에서 찾아줍니다. 일반적으로 옵션을 통해서 직접 가져올때도 있습니다.
커널에서 모듈이 적재 될때는 insmod 과정중에 커널의 버전을 확인하는 부분이 존재합니다. (object image의 헤더 부분에 있습니다.)
따라서 커널 버전에 대한 정보를 컴파일때 넣어 주어야 합니다. 그때 참조하는 파일이 ?/include/linux/version.h 입니다.
그 곳에 보면 커널의 버전을 정의하는 매크로가 존재하며 커널 버전에 대한 스트링이 있습니다.
일반적으로 /usr/include/* 존재하는 파일들은 배포판을 설치할 당시에 커널 버전을 위한 헤더 파일들입니다.
따라서 /usr/include/linux/version.h 파일에는 님이 커널 컴파일을해서 업그레이드 한 커널 버전이 아니라 처음 배포판을 설치할 당시에 커널 버전이 기록되어 있는 것입니다.
아마도 님께서는 커널 버전을 업그레이드 했을 겁니다. 현재 동작하는 커널 버전과 /usr/include/linux/version.h 에 있는 버전번호를 적절하게 수정하셔야 합니다.

이럴 때는 다음과 같은 방법을 사용하면 됩니다.

1. 모듈안에 커널 버전을 직접 선언하는 방법
2. -I현재 시스템 커널 소스의 헤더파일 경로 (옵션을 사용)
3. ~/include/linux/version.h 를 수정하시면 됩니다.

그리고 커널 프로그래밍을 처음 하시는 분이라면 다음 링크와 자료를 참고 하시길 바랍니다.

- 커널 프로그래밍 초보자를 위한 문서 :
http://linuxkernel.net/moduleprog/lkp/doc/v1.01/lkp.pdf

- 커널 프로그래밍 관련 Q&A
http://linuxkernel.net/bbs_lkqna.php









정말죄송 wrote..
: 전에 개구리님이 올려주신 답변을 보고 별 시도를 다해봤지만 아직도
:
: 못하고 있습니다. 그저 공부삼아 할려고 했는데 진도가 너무 안나가네요.
:
: kernel-module version mismatch
: hello.o was compiled for kernel version 2.4.9-9
: while this kernel is version 2.4.20-7
:
: 지금 한컴 3.1을 쓰고 있거든요...
:
: 제가 어떻게 해야할지 자세히좀 알려주시면 감사하겠습니다