몬타비스타 리눅스 preview kit 3.0 사용중이고요. 아주간단한 샘플 module을 만들어서 시험해 보려고 하고 있습니다. IBM 405 Gpr 보드에서 사용하려고 합니다.
그런데 ......... insmod ***.o 하면
unresolved sysbol printk
라는 에러가 나오네요... ㅡ,ㅡ 굉장히 원초적인 문제인거 같은데요... 무엇이 문제일까요 ???
리눅스 커널과 모듈의 버전이 맞지 않으면 커널의 심볼을 불러낼 수 없습니다.
타겟 시스템의 /proc/ksyms를 읽어보세요. printk 뒤에 뭐가 잔뜩 붙어있잖아요. 이게 버전 정보입니다.
#ifdef CONFIG_MODVERSION #include <linux/modversions.h> #endif
대충 이렇게 했던 걸로 기억이 되는데요...
헛 ㅡ,,ㅡ;;; 이상한 일입니다....
커널 컴파일상의 무슨 문제인듯 싶어서 컴파일->테스트 과정을 반복하던 차에........... 어떤 이유인지는 모르겠지만 에러없이 insmod 가 되네요 ㅡㅡ^
이제는 다시 재현하려고 해도 되지를 않습니다... 흠~ config를 고친것도 없고 단지 컴파일만 여러번 했을 뿐인데 말이지욤........
헛 ㅡ,,ㅡ;;; 이상한 일입니다.... 커널 컴파일상의 무슨 문제인듯 싶어서 컴파일->테스트 과정을 반복하던 차에........... 어떤 이유인지는 모르겠지만 에러없이 insmod 가 되네요 ㅡㅡ^ 이제는 다시 재현하려고 해도 되지를 않습니다... 흠~ config를 고친것도 없고 단지 컴파일만 여러번 했을 뿐인데 말이지욤........
커널 configuration에서 모듈 버저닝을 uncheck 하신거 아닐까요? ;-)
---- Let's shut up and code.
흐허~~~~~~ sangwoo 님...... 맞습니다. 제가 작업하는 과정에서 menuconfig 하고.. 컴파일해서 이미지 만들고.....
점심먹고~
잠깐 놀다가 ^^
다시 시도 했는데요. 답글 보고 다시 확인해 보니 Enable loadable module support 메뉴에서 Set version information on all module symbols 를 선택했던것을 지웠군요.. ㅡㅡ^
먼곳에서 저보다 더 잘 아시네요... 그런데 이 메뉴를 선택하고 안하고 어떤 차이점이 있는건지요 ???
그 옵션은 커널의 버전과 모듈이 사용한 커널의 헤더의 버전이 맞지 않은 경우 모듈을 아예 못올리게 하는 역할을 합니다.
텍스트 포맷에 대한 자세한 정보
<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]
버전 문제 같습니다.
리눅스 커널과 모듈의 버전이 맞지 않으면 커널의 심볼을 불러낼 수 없습니다.
타겟 시스템의 /proc/ksyms를 읽어보세요. printk 뒤에 뭐가 잔뜩 붙어있잖아요. 이게 버전 정보입니다.
#ifdef CONFIG_MODVERSION
#include <linux/modversions.h>
#endif
대충 이렇게 했던 걸로 기억이 되는데요...
헛 ㅡ,,ㅡ;;; 이상한 일입니다....커널 컴파일상의 무슨
헛 ㅡ,,ㅡ;;; 이상한 일입니다....
커널 컴파일상의 무슨 문제인듯 싶어서 컴파일->테스트 과정을 반복하던 차에........... 어떤 이유인지는 모르겠지만 에러없이 insmod 가 되네요 ㅡㅡ^
이제는 다시 재현하려고 해도 되지를 않습니다... 흠~ config를 고친것도 없고 단지 컴파일만 여러번 했을 뿐인데 말이지욤........
[quote="dejavuh"]헛 ㅡ,,ㅡ;;; 이상한 일입니다...
커널 configuration에서 모듈 버저닝을 uncheck 하신거 아닐까요? ;-)
----
Let's shut up and code.
흐허~~~~~~ sangwoo 님...... 맞습니다.제가 작업하
흐허~~~~~~ sangwoo 님...... 맞습니다.
제가 작업하는 과정에서 menuconfig 하고.. 컴파일해서 이미지 만들고.....
점심먹고~
잠깐 놀다가 ^^
다시 시도 했는데요. 답글 보고 다시 확인해 보니
Enable loadable module support 메뉴에서
Set version information on all module symbols 를 선택했던것을 지웠군요.. ㅡㅡ^
먼곳에서 저보다 더 잘 아시네요... 그런데 이 메뉴를 선택하고 안하고 어떤 차이점이 있는건지요 ???
그 옵션은..
그 옵션은 커널의 버전과 모듈이 사용한 커널의 헤더의 버전이 맞지 않은 경우 모듈을 아예 못올리게 하는 역할을 합니다.
댓글 달기