2013-10-01 3 views
1

사용자 정의 헤더에 따라 간단한 문자 장치 모듈을 컴파일하려고합니다. 폴더 따라서 메이크에서사용자 정의 헤더로 Linux 커널 모듈 컴파일

#include "customized-header.h" 

, 헤더 따라서 사용 mymod.c에서

+ mymod.c 
| customized-header.h 
| customized-header.c 
| Makefile 

, 구성되어

obj-m := mymod.o 
mymod-objs := customized-header.o 
KVERSION = $(shell uname -r) 
PWD = $(shell pwd) 
all: 
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 
clean: 
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean 

모든 것이 잘 작동합니다, 모듈은 문제없이 컴파일됩니다 , sudo insmod 통해 모듈을로드 할 수 있지만 모듈이 제대로 작동하지 않습니다. 내가 nm mymod.ko을 체크했을 때, 많은 vars가 있고 기능이 없습니다. customized_header.o을 연결 한 후 멈춘 것처럼 보입니다. 이 헤더와 함수를 제거하면 모듈에서 헤더 함수를 호출하지 않는다고 말하면 원하는 결과로 완벽하게 컴파일됩니다.

여기서 무엇이 잘못되었는지 보시겠습니까?

+0

obj-m 행을 다음과 같이 변경하면 어떻게됩니까? obj-m : = mymod.o customized-header.o? –

+0

@PeterL. 음, 'obj-m'은 모듈을 생성하는 것입니다. 'customized-header.o'를 추가하면'customized-header.ko'와 같은 몇 가지 파일이 생성됩니다. 그동안 'mymod.ko'는 여전히 동일합니다. 여기서'mymod.ko' 모듈 하나만을 원합니다.'customized-header' 모듈의 라이브러리처럼 작동합니다. – MeadowMuffins

답변

2

문제는 Makefile에 있습니다. 링크 here에, 나는

obj-m: mymodko.o 
mymodko-obj: customized-header.o mymod.o 

으로 변경으로 인해 지금은 잘 작동합니다. 그래서 문제는 모듈 객체의 이름입니다. 이 경우 mymodko.omymod.o과 같이 다른 이름을 지정해야합니다.

+0

정답입니다. 그것을 표시하십시오. –

+0

@ BenjaminLeinweber 내 대답을 받아들이려면 또 다른 20 시간을 기다려야합니다. – MeadowMuffins

관련 문제