강좌 & 팁
글 수 2,412
2015.06.05 18:48:28 (*.134.169.166)
40162
리눅스 드라이버 모듈을 작성하다보면 내가 작성한 혹은 포팅한 드라이버에서
또 다른 드라이버 모듈(커널에 포함되지 않은)의 함수를 호출하는 경우가 왕왕있다.
호출하려는 함수는 당연히 EXPORT_SYMBOL 매크로 정의되어 있는데 드라이버를 올리면
unknown symbol 이라며 모듈이 올라가지 않는다.
이럴경우는 작성된 드라이버를 컴파일 할때 KBUILD_EXTRA_SYMBOLS 을 이용하여 해당 함수의 심볼을 얻어야 한다.
그냥 Makefile 파일 수정하는 것이다.
아래는 dev-test.c 를 컴파일하는 Makefile 이다.
#
# kernel 3.0 driver Makefile
#
obj-m := dev-simple.o
dev-simple-objs := dev-test.o
EXTRA_STR :="/another-driverer/Module.symvers"
KDIR := /mykernel/linux
PWD := $(shell pwd)
default:
CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm $(MAKE) -C $(KDIR) M=$(PWD) KBUILD_EXTRA_SYMBOLS=$(EXTRA_STR)
clean :
rm -rf *.ko
rm -rf *.mod.*
rm -rf .*.cmd
rm -rf *.o