사용자 정의 헤더에 따라 간단한 문자 장치 모듈을 컴파일하려고합니다. 폴더 따라서 메이크에서사용자 정의 헤더로 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
을 연결 한 후 멈춘 것처럼 보입니다. 이 헤더와 함수를 제거하면 모듈에서 헤더 함수를 호출하지 않는다고 말하면 원하는 결과로 완벽하게 컴파일됩니다.
여기서 무엇이 잘못되었는지 보시겠습니까?
obj-m 행을 다음과 같이 변경하면 어떻게됩니까? obj-m : = mymod.o customized-header.o? –
@PeterL. 음, 'obj-m'은 모듈을 생성하는 것입니다. 'customized-header.o'를 추가하면'customized-header.ko'와 같은 몇 가지 파일이 생성됩니다. 그동안 'mymod.ko'는 여전히 동일합니다. 여기서'mymod.ko' 모듈 하나만을 원합니다.'customized-header' 모듈의 라이브러리처럼 작동합니다. – MeadowMuffins