커널 모듈 프로그래밍에서 컴파일후 모듈 올리기에서 에러발생
자세한 하드웨어 스펙을 넣어 주세요.
- 사용OS 한컴리눅스 Advanced Server 3.1
- CPU Xeon 2.4G X 2
- MainBoard intel
- VGA ati
- HDD 140G scsi
- CDROM 40X IDE
- Sound Card None
- LAN Card 100M
문의 내용
Kernel module Programming을 작성해서 컴파일 했습니다.
Object 파일까지 잘 만들어졌는데 insmod를 하니
다음과 같은 에러 메시지가 나옵니다.
"mydrv.o kernel-module version mismatch
mydrv.o was compiled for kernel version 2.4.21-2custom
while this kernel is version 2.4.21-2smp."
참고로 mydrv.c는 리눅스 매니아를 위한 커널 프로그래밍 책에 나오는 소스코드 그대로 입니다.
makefile 내용은
TARGET = mydrv
WARN = -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE = -isystem /lib/modules/2.4.21-2smp/build/include
CFLAGS = -O2 -DMODULE -D__KERNEL__ ${WARN}
mydrv.o mydrv.c
gcc ${INCLUDE} -c ${CFLAGS} mydrv.c
.PHONY clean
clean
rm -rf ${TARGET}.o
입니다.
참고로 /usr/include/linux는 /usr/src/linux-2.4.21/include/linux
/usr/include/asm은 /usr/src/linux-2.4.21/include/asm
/usr/include/scsi은 /usr/src/linux-2.4.21/include/scsi
심볼릭 링크를 만들어 놓았습니다.
uname -r 결과는 "2.4.21-2smp" 입니다.
한컴리눅스를 풀 패키지로 설치했습니다
/usr/src/ 디렉토리 밑에는 linux-2.4.21이란 디렉토리와 hancom이란 디렉토리가 존재합니다
일단 문제는 시스템에서 동작하고 있는 커널과 컴파일 시 include 시
일단 문제는 시스템에서 동작하고 있는 커널과 컴파일 시 include 시킨 커널의 버전이 상이하기 때문에 발생한 문제인 것 같습니다.
include 시키신 디렉터리의 커널 버전을 확인해보시면 될 것 같습니다.
네 갈길을 가라! 남이야 뭐라든!
커널옵션
버전관리 옵션을 꺼주세요
커널 옵션에 있어요
https://nicesj.com
https://blog.nicesj.com
아마 배포판에 깔려있는 소스는 현재 운영되고 있는 커널하고 같겠지요??
아마 배포판에 깔려있는 소스는 현재 운영되고 있는 커널하고 같겠지요??
근데 custom이라고 꼬리말이라고 붙어 있더라고요...
그냥 아무생각없이.. 고쳤지요...
/usr/src/linux/>grep custom Makefile
찾아서 custom부분을 제거하고 현재 버젼과 일치하게...
make menuconfig (그냥 별다른 체크 안 해도 되는데 아얘 안 해도 될 것 같기도 하고요 저도 초짜라... -- 그냥 dep만 해보시고 결과 좀...)
make dep
그냥 워닝 무시하고 강제로 가결하려면...
insmod -f 탄핵.o
미래를 수정할 수 있는 때는 현재이다.
댓글 달기