2013-06-19 1 views
5

a.ko (커널 모듈)에서 내 보낸 함수 foo() 및 foo1()을 가지고 있으며, foo1()은 입력 매개 변수 인 함수 포인터를 사용합니다. b.ko에서 foo1()을 호출하고 foo()를 입력 매개 변수로 전달합니다.EXPORT_SYMBOL | insmod 중에 정의되지 않은 심볼

a.ko가 b.ko 전에 insmoded되었지만 b.ko (알려지지 않은 기호 foo)에 대한 insmod 실패를 봅니다.

설명/솔루션이 있습니까? 이 문제를 해결하기위한 두 가지 방법 럭키

+0

모듈을 다른 디렉토리에 구축 했습니까? b.ko를 만들 때 .symvers 파일을 사용 했습니까? 참고 : http://stackoverflow.com/questions/12311867/ – Eugene

+0

최소 작동 예제 : https://stackoverflow.com/questions/12311867/how-to-call-exported-kernel-module-functions-from-another- module/44614246 # 44614246 –

답변

3

감사 1) 메이크 동일한에서 커널 모듈 모두를 컴파일 즉 OBJS-m = a.o b.o. 2) 내 보낸 함수 또는 변수를 사용할 커널 모듈의 Makefile에 ** KBUILD_EXTRA_SYMBOLS = < "함수 또는 변수를 내보내는 커널 모듈의 Module.symvers에 대한 절대 경로"를 포함하십시오.

+0

KBUILD_EXTRA_SYMBOLS 행의 형식은 무엇입니까? make는 "혼합 된 암시 적 및 정규 규칙 : 사용되지 않는 구문"이라고 말합니다. – jeremiah

+1

@jeremiah, KBUILD_EXTRA_SYMBOLS는 make 변수이며 형식이 없습니다. 최신 GNU make 버전 (4.0)을 사용하기 때문에 GNU make는 "혼합 된 암시 적 및 정상적인 규칙 : 비추천 된 구문"을 던집니다. 모듈을 컴파일하기 위해 GNU make 버전 (3.8.1)을 사용해보십시오. 링크를 통해 이동 http://blog.melski.net/2015/01/12/whats-new-in-gnu-make-4-1/ –

관련 문제