커널 모듈에서 export에 문제가...unresolved symbol...
오늘도 질문에 여념이 없는 거미입니다...
초보다 보니 여러분들을 너무 귀찮게 하는것 같아 죄송하네요..
간단한 커널 모듈을 구성하다가 문제가 발생했는데...
원인을 못찾겠습니다..
혹시 비슷한 경험을 하고 해결하신 분들이 있으실것 같아서 질문 드립니다.
문제는 한마디로...
커널모듈을 올리려는데 모듈에서 사용하는 함수가 unresolved symbol이라고 합니다.
정확한 에러 메세지는
unresolved symbol IMMain
제가 지금 하는 작업은 iptable-1.2.6a 버전을 조금 수정해서,
netfilter에 의해 패킷의 후킹이 발생하면 여기에 뭔가를 하려고 합니다..
그래서 일단 iptable_filter 모듈 중에 다음과 같은 문장을 추가했습니다.
if (ret == NF_ACCET) { ret = IMMain(pskb); }
이때 IMMain 함수는 제가 만든 다른 모듈에서 export하는 함수이며, 형식은 다음과 같습니다.
unsigned int IMMain(struct sk_buff **pskb);
IMMain의 내용과 EXPORT 구문은 다음과 같습니다.
unsigned int IMMain(struct sk_buff **pskb) { printk("<1>IMMain Test Success!!\n"); return NF_ACCEPT; } EXPORT_SYMBOL(IMMain);
문제는.. IMMain 함수를 export한 제 모듈을 insmod 한 것에는 성공했는데..
iptable_filter 모듈을 insmod하려고하니
unresolved symbol IMMain
라는 에러가 발생하면서 안되더군요..
그래서 /proc/ksyms에서 확인했는데..
IMMain이 존재하더라구요...
확인한 문장은 다음과 같습니다.
e086d060 IMMain_R_ver_IMMain [imdriver]
도대체 뭐가 문제인지 모르겠어요..
아시는분들 도와주세요~
그냥 EXPORT_SYMBOL_NOVERS 사용했어요..
그냥 함수 EXPORT 할때
EXPORT_SYMBOL이 아니라
EXPORT_SYMBOL_NOVERS로 해서 해결했어요...
나중에 문제 안생기려나.. 겁나네요....
댓글 달기