unresolved symbol 문제
글쓴이: 손정수 / 작성시간: 목, 2003/03/13 - 4:50오후
현재 디스크를 읽는 디바이스 드라이버를 하나 만들려고 하는데요...
모듈을 등록하면 다음과 같은 에러가 나옵니다...
unresolved symbol mark_dirty_kiobuf
헤더 파일을 추가 했음에도 나오는 것으로
mark_dirty_kiobuf 함수가 모듈에서는 사용할 수 없는 것 같습니다.
/proc/ksyms 에도 등록 되어 있지 않는군요...
해결 방법을 알 고 계신 분의 답변을 부탁드립니다.
Forums:


이 방법이 통할지 안통할 지는 모르겠는데...직접 주소를 써서 사용하
이 방법이 통할지 안통할 지는 모르겠는데...
직접 주소를 써서 사용하면 되지 않을까요...
System.map 에서 mark_dirty_kiobuf 의 주소값을 얻어낸 후에...
소스 코드에
void (*p_mark_dirty_kiobuf)(struct kiobuf *iobuf, int bytes) = System.map 에서 얻은 주소값;이렇게 사용하면 될 듯 한데요...
from saibi
kernel module 에서 사용할 수 있는 함수들은 EXPORT_SY
kernel module 에서 사용할 수 있는 함수들은 EXPORT_SYMBOL 에 의해서 kernel symbol table 에 등록되어 있는 경우만 가능합니다. 이걸 확인하는 방법은 ksyms -a | egrep 함수명 으로 하면 되구요.
만약 등록되어 있지 않은 함수를 호출할려면 커널 코드를 수정해서 EXPORT_SYMBOL() 을 추가해야 합니다.
이과정은 주의를 하셔야 하는데, module 에서 사용하기엔 중요한 함수들도 많기 때문입니다. 잘못 사용하면 kernel panic 나오기 쉽상이죠.
찾아보니, mark_dirty_kiobuf 를 등록하는 patch 도 있긴 하네요.
http://www.kernelnewbies.org/kernels/SuSE81/SOURCES/patches/50_export_mark_dirty_kiobuf-2.4.19-pre10aa2
해결 했습니다.
고맙습니다. 위와 같이 하니 해결 되었습니다.