좀 황당한 일이 생겼습니다.
안드로이드 관련 제품을 만들었습니다.
그중에서 usb 와 연결되면 이동식 디스크로 잡히게 하는 부분을 모듈로 만들었는데(g_file_storage)
SVN 서버에 올려놓고 잘쓰고 있었죠.
폴더 만들고 rabit cvs로 소스 다운 받아 컴파일 하고 돌리면 아무 문제 없었습니다.
그런데 갑자기 며칠전부터 폴더 만들고 새로 rabit cvs로 다운받고 컴파일 돌려 실행하면
희한한 에러가 뜨네요..
# insmod g_file_storage.ko
g_file_storage: version magic '2.6.27-svn40 mod_unload ARMv5 ' should be '2.6.27-svn59-dirty1 mod_unload ARMv5 '
insmod: init_module 'g_file_storage.ko' failed (Exec format error)
#
모듈 로드 하다가 몇번 보기는 했는데, 대부분 이런 것은 모듈만들때 커널 버젼이 안 맞으면 나오는 것으로 알고 있었죠..
근데 SVN 어쩌고 저쩌고 하니 이게 뭔지 알수가 없네요..설마 SVN 버젼이 안맞아서?...
어떻게 해야될지...쩝...
안드로이드라 SVN commit 할 때는 토토리스 SVN을 window 환경에서 쓰긴 하는데..이전에도 이렇게 써도 별 문제가 없어써거든요..
근데..왜 갑자기 이러는 건지 모르겠네요...
혹시 왜 그러는지, 그리고 해결책을 아시는 분이 있으면 알려주세요..
신규 프로젝트 시작했는데, 처음부터 이런 난관에 빠졌네요..부탁드립니다..
댓글 5
-
백창우
2010.11.30 18:37
-
김남형
2010.12.01 01:12
네.. svn 버전이 안맞아서 그런것 같네요..
창우님 말씀처럼 CONFIG_LOCALVERSION_AUTO 옵션을 끄거나
CONFIG_MODVERSION 옵션을 선택해서 커널과 모듈을 다시 빌드하면 아마도 해결될 듯 합니다..
-
김영일
2010.12.01 10:09
음...어째어째 삽질하다 보니 해결이 됐는데...
안드로이드가 컴파일 하는 방식이 uboot -> cupcake -> kernel 순으로 컴파일 하거든요...
최신 버젼은 어떻게 되는지 모르겠지만 cupcake 은 그렇게 하고 있는데 커널을 컴파일 할 때
모듈도 같이 하도록 스크립트를 해놨죠.
문제는 커널을 컴파일 한 후 ko 파일을 다시 cupcake 폴더에 옮겨서 cupcake을 re-컴파일
해줘야 에러가 발생을 안하더군요...
에러의 원인이 svn에서 받을 때 ko 파일도 같이 받았는데 현재 버젼의 커널과 이전에 다른 버젼에서
생성된 ko 파일이 각각 버젼이 틀려서 발생한거 같네요...
-
김영일
2010.12.06 20:06
여러가지 답변을 적어주셨네요..
지금 하는 방식이 3번 방식인데.. 이게 생각보다 좀 번거롭네요...
1번이나 2번 방식도 함 생각을 해봐야 겠어요...
감사합니다.
-
허경탁
2010.12.02 07:59
저도 동일한 문제를 겪었는데요, 이미 해결을 하신 듯 싶네요..^^
해결하는 방법은 3 가지 중에 하나인 듯 싶네요.
1. Kernel에 Built-in으로 넣는 방법
2. cupcake 소스의 하위 폴더로 kernel을 넣고서 같이 빌드해서, 이미지에 포함시켜주는 방법
3. 빌드는 동일하게 하고서, cupcake의 이미지를 만들 때, 해당되는 이미지로 업데이트 해 주는 방법.
커널 부팅 버전이랑 모듈을 ldd로 확인을 해 보시면 쉽게 확인이 가능합니다.
.
혹시 build 파일들에서 svn 버전을 가지고, 모듈 버전으로 설정하는 부분은 없어신지요?