저의 경우는 이렇게 되어있습니다.
#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 문에서 정해진 것과 맞추는 것입니다.
이렇게 되어있습니다.
아까 보셨던 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을 가지고 계산하셔서 맞춰 주실 수도 있습니다.
쓰고계신 커널의 version.h 를 참조하세요.커스텀으로 빌드하셨다
쓰고계신 커널의 version.h 를 참조하세요.
커스텀으로 빌드하셨다면.. /usr/src/linux-2.4/include/linux/version.h 일 겁니다.
여기에 쓰인 버전 코드로 맞춰주세요..
rommance.net
답변 해 주신거 감사드립니다. 그런데 제가 너무 무지해서 그러는데..
답변 해 주신거 감사드립니다. 그런데 제가 너무 무지해서 그러는데..
버전 코드로 맞춘다는게 어떤 뜻인가요?
예전에 제가 겪었던 일같네요.
다음의 링크을 참고하세요.
:-)
http://bbs.kldp.org/viewtopic.php?t=1661&highlight=
[code:1][root@song55 root]# cat
저의 경우는 이렇게 되어있습니다.
#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 문에서 정해진 것과 맞추는 것입니다.
rommance.net
조금 더 찾아봤습니다.프로그램 하신 모듈의 include되는 버전
조금 더 찾아봤습니다.
프로그램 하신 모듈의 include되는 버전 코드는,
/usr/include/linux/version.h입니다.
이것이 module.h에서 불려집니다.
저의 경우 /usr/include/linux/version.h 의 내용은
이렇게 되어있습니다.
아까 보셨던 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 하시면
이렇게 나오는 데 여기 나온 버전 2.4.18을 가지고 계산하셔서 맞춰 주실 수도 있습니다.
rommance.net
보통, 제일 좋은 방법은 먼저 새 커널을 다운 로드 받아서, 커널 컴파일
보통, 제일 좋은 방법은 먼저 새 커널을 다운 로드 받아서, 커널 컴파일을
한다음, 그 커널 헤더를 이용해서 커널 모듈을 작성하는 것입니다.
그럼 고운 하루
=========================
CharSyam ^^ --- 고운 하루
=========================
위에 링크 소개해 주신분의 링크에도 나와 있지만,커널 컴파일 가이
위에 링크 소개해 주신분의 링크에도 나와 있지만,
커널 컴파일 가이드 같은데 보면
커널 컴파일 하고 설치할 때 /usr/ 아래에 몇개의 심볼릭 링크를 새로 고쳐 주는 부분이 나옵니다.
일단은 그렇게 심볼릭 링크를 수정하지 않으셔도 커널은 잘 동작합니다... 만!
커널 모듈을 컴파일하기 위해서는 심볼릭 링크를 수정하셔야
제대로 된 커널 헤더를 읽어서 컴파일이 됩니다.
버젼 문제가 안생기는 것이죠.
gcc 의 기본 include 디렉토리가 /usr/include 로 되어 있어서 그렇습니다.
굳이 심볼릭 링크를 갱신하시기 싫으시다면 -I 옵션으로 해결을.. 쿨럭 -_-;;
커널 컴파일할때 옵션조정해보세요...
일단 윗분들 말씀같이 커널의 include디렉토리를 symbolic link로 맞춰서
해보세요...
저같은 경우 slackware쓰다가 redhat에서 프로그램할때 그런일이
발생해서 황당했었습니다....
왜 /usr/include/linux랑 /usr/include/asm이랑 커널의 소스랑
링크 안시켜 놓는지 모르겠군요.... -.-;
아니면 커널의 옵션중 모듈에 버젼정보 포함하도록 하는 부분이 있습니다.
그부분을 exclude하고 해보세요. 웬만하면 될겁니다.
그리고, 요번에 ppc용 모듈을 올리다가 발견한 것이기는 한데, -O2옵션을
안줬더니 올라가지를 않더군요....왜 그런지 잘 모르겠지만
-O2옵션 줬더니 올라가더군요...자료 조사해 봐야 되겠더군요..
그럼...
서명.....음, 서명이라...
아싸!!! Three Go!
정말 감사합니다~^^
정말 감사합니다~^^
댓글 달기