[완료] 커널 심볼을 못 찾는 문제
글쓴이: bus710 / 작성시간: 월, 2009/03/16 - 4:52오후
현재 s3c2440을 사용한 보드에 웹캠을 장착하는 작업을 진행하고 있습니다.
공개된 드라이버를 이용하는 것이 빠르겠다는 생각에
gspca의 소스를 구하여 컴파일을 해보고 있습니다.
컴파일에는 문제가 없는데 커널 심볼을 못 찾는 문제가 발생하고 있습니다.
kernel config ============= # # Multimedia devices # CONFIG_VIDEO_DEV=y # CONFIG_VIDEO_V4L1 is not set CONFIG_VIDEO_V4L1_COMPAT=y CONFIG_VIDEO_V4L2=y
커널 설정에는 위와 같이 v4l이 설정되어 있습니다.
module compile ============== make CC=arm-linux-gcc LD=arm-linux-ld WARNING: "video_device_release" [/work/gspcav1-20071224/gspca.ko] undefined! WARNING: "video_device_alloc" [/work/gspcav1-20071224/gspca.ko] undefined! WARNING: "video_devdata" [/work/gspcav1-20071224/gspca.ko] undefined!
해당 커널 모듈을 컴파일할 때는 위와 같은 옵션을 주었고 위와 같은 경고가 나옵니다.
(제공된 readme를 읽어 보면 gspca_build라는 스크립트를 실행하라고 나옵니다만, 그게 이 문제의 핵심이 아닐거라는 생각이 듭니다)
kallsyms ======== cat /proc/kallsyms | grep video_dev c01d4ae4 T video_devdata
실제로 커널 심볼은 위와 같이 존재하는 것으로 나타납니다.
insmod ./gspca.ko Using ./gspca.ko gspca: Unknown symbol video_devdata gspca: Unknown symbol video_device_alloc gspca: Unknown symbol video_device_release insmod: cannot insert `./gspca.ko': Unknown symbol in module (-1): No such file or directory
모듈을 적재할 때는 위와 같이 심볼을 찾을 수가 없다는 메시지가 나옵니다.
.......
물론, 세 심볼이 모두 있어야 저의 모든 문제가 일단락 되겠지만,
의아한 부분은 video_devdata 만큼은 찾을 수 있어야 하는게 아닌가 싶습니다.
이 문제에 대해 아시는 분은 힌트라도 부탁 드립니다.^^;
+ 2009 / 04 /13
현재는 다른 보드로 작업을 진행 중 입니다.
레비스 보드 자체의 문제는 아닌 듯하고,
커널이나 컴파일러의 문제인 것 같습니다....^^
밑에 댓글 달아주신 bushi님을 비롯하여 관심 가져주신 분들께
감사 드립니다....^^
Forums:
...
소스와 makefile, 결과를 올려 봅니다.
제가 놓친게 뭘까요?
전 아직 짐작가는 부분이 없습니다.
*<>는 \로 대체하였습니다. 오해 없으시길....^^
akudoku.net 나는 이것만은 확신하니, 믿고 나아간다.
life is only one time
Makefile 에서 CC, LD 는
Makefile 에서 CC, LD 는 삭제하시고요.
grep CONFIG_VIDEO_DEV /work/rebisSRC/kernel26/linux-2.6.17.13-rebis/.config
로 built-in 인지 module 인지 확인하시고,
module 이라면 videodev.ko 올리고 built-in 이라면 반드시 새 커널로 부팅하시고요.
보드에 다운로드해서 삽질하지마시고
정도로 하면 /tmp/lib/modules/2.6.17.13*/extra/ 에 설치되면서 symbol 검사까지 미리 해줍니다.
다이어트는 덤.
cross 컴파일할 땐 /work/rebisSRC/kernel26/linux-2.6.17.13-rebis/Makefile 의
CROSS_COMPILE 을 arm-linux- 처럼 고치는게 편하고, 고치지 못할 이유가 있다면
역시 make CROSS_COMPILE=arm-linux- 처럼 사용하세요.
OTL
...
가뭄의 단비 같은 답변이었습니다.
복 받으실 겁니다...^^
말씀하신 대로 실행해 보았습니다....
CONFIG_VIDEO_DEV=y
먼저 grep 시에는 위와 같이 나옵니다. y니까 빌트인 되어 있는 것 같습니다.
해당 커널로 부팅을 하고나서 적어주신 make 구문을 이용해 보았습니다.
위와 같은 문제가 발생하네요.
알려지지 않은 심볼을 선언했기 때문에 생기는 문제인데, kallsyms 이나 system.map에는 분명 video_devdata가 선언되어 있는게.....이상합니다.
그래도 감사 드립니다^^
akudoku.net 나는 이것만은 확신하니, 믿고 나아간다.
life is only one time
편하죠. 보드의 커널
편하죠. 보드의 커널 문제가 아니라는 게 밝혀졌습니다.
OTL
...
kmalloc을 써보니 문제 없이 잘 되네요...
임베디드에서 video_devdata를 쓰는 뭔가 특별한 방법이 있나 봅니다.
akudoku.net 나는 이것만은 확신하니, 믿고 나아간다.
life is only one time
별로 특별하진
별로 특별하진 않은데요, linux-2.6.17 을 당장 쓰는 곳이 없어 임시로 2.6.29-rc7 에서 시험해봤습니다.
API 가 약간 바뀌긴했는데, 크게 다르진 않구요.
(제 PC 에선 /work 가 /space/work 의 link 입니다. 보실 때 혼란스럽더라도 양해를...)
(code 태그에서 tab 이 제대로 표시되지 않는 버그, 언제고쳐지려나요 ?)
OTL
댓글 달기