현재 디스크를 읽는 디바이스 드라이버를 하나 만들려고 하는데요... 모듈을 등록하면 다음과 같은 에러가 나옵니다...
unresolved symbol mark_dirty_kiobuf
헤더 파일을 추가 했음에도 나오는 것으로 mark_dirty_kiobuf 함수가 모듈에서는 사용할 수 없는 것 같습니다.
/proc/ksyms 에도 등록 되어 있지 않는군요...
해결 방법을 알 고 계신 분의 답변을 부탁드립니다.
이 방법이 통할지 안통할 지는 모르겠는데... 직접 주소를 써서 사용하면 되지 않을까요...
System.map 에서 mark_dirty_kiobuf 의 주소값을 얻어낸 후에...
소스 코드에
void (*p_mark_dirty_kiobuf)(struct kiobuf *iobuf, int bytes) = System.map 에서 얻은 주소값;
이렇게 사용하면 될 듯 한데요...
from saibi
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
고맙습니다. 위와 같이 하니 해결 되었습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
이 방법이 통할지 안통할 지는 모르겠는데...직접 주소를 써서 사용하
이 방법이 통할지 안통할 지는 모르겠는데...
직접 주소를 써서 사용하면 되지 않을까요...
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
해결 했습니다.
고맙습니다. 위와 같이 하니 해결 되었습니다.
댓글 달기