module 작성후 insmod시에 unknown symbol in module 에러가 발생합니다.

lmk378의 이미지

dmesg를 확인해보면

unknown symbol find_task_by_vpid

라고 나옵니다.
위 함수는 kernel의 include/linux/sched.h 에 extern 되어있는 함수로
pid를 받아와 해당 process의 task_struct를 반환합니다.
위 함수를 module 소스에서 제거하면 insmod시 정상등록됩니다.
문제는 저 함수를 꼭 써야하기 때문인데요
kernel 소스상의 함수를 module에서 사용하지 못할 수도 있나요?

pastime의 이미지

모듈에서는 커널에서 export한 심볼들만 참조할 수 있습니다.
find_task_by_vpid() 함수의 경우 직접 EXPORT_SYMBOL()을 통해
공개되어 있지 않으므로 모듈에서 이 기능을 사용하려면
다음과 같은 더 하위 수준의 함수들을 사용해야 합니다.

pid_task(find_vpid(nr), PIDTYPE_PID);

lmk378의 이미지

답변 정말 감사드립니다.
해결되었습니다.

kkb의 이미지

참고하겠습니다