ARM 임베디드 보드에서 정적링크로 컴파일 했을시 Illegal instruction 에러가 발생합니다
안녕하세요~
임베디드에 관한것은 처음 경험하는것이라 툴체인 설치하는것부터 많이 애를 먹었는데,
툴체인은 http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/arm-linux-tools-20080623.tar.gz 을 받아 설치했습니다.
따로 컴파일해야할 줄 알았는데, 애초에 arm 용으로 컴파일이 되어있는 채로 배포가 되는것같더군요
복사해서 실행만 하면 되었습니다. (arm용으로 컴파일된 라이브러리가 모두 통합된 것 같습니다)
ARM CPU를 사용하는 임베디드 보드에는 리눅스 커널 2.6 이 올라가 있습니다.(자세한 스팩은 하단에 첨부)
크로스컴파일 환경이 구성된 우분투 10.04 PC에서 작업한 작업물을 타겟보드에 옮겨 실행시키면 두가지 현상이 나타나는데
동적링크로 컴파일 했을시에는 정확히 실행되지만
정적링크로 컴파일 했을시에는 Illegal instruction 에러가 발생합니다.
소스는 단순히 printf 한개 찍는 단순한 확인용 코드이며, file 해서 나온 결과는 하단과 같습니다.
./test.o: ELF 32-bit LSB executable, ARM, version 1, statically linked, for GNU/Linux 2.0.0, not stripped
혼자서 생각을 해봤을때는 다음과 같은 문제에 의심을 두고 있습니다
* 동적으로 구성되었을때는 타겟보드상에 존재하는 올바른 라이브러리를 사용했으니 동작했겠지만,
정적링크시에는 필요한 라이브러리를 모두 가지고 있었지만, 이것이 타겟보드에 맞게 컴파일 되지 않았을 수 도 있다.
그럼 동적링크 했을때 동작했다면, 그때 물어온 라이브러리의 정보를 알아내어 이용할 수 있을까? 라는 생각을 했습니다.
크로스컴파일러의 libc 정보입니다.(file /usr/local/arm-linux/lib/libc-2.3.6.so)
/usr/local/arm-linux/lib/libc-2.3.6.so: ELF 32-bit LSB shared object, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped
해당 타겟보드의 libc 정보입니다.(file /lib/libc-2.3.1.so)
libc-2.3.1.so: ELF 32-bit LSB shared object, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.2.5, stripped
일단 찾아볼 만큼 찾아보긴 했습니다만, 더 찾아볼곳은 없는지, 혹시 다른 의심가는 지점은 없는지 궁금합니다...
감사합니다!
보드에 대한 자세한 정보입니다.
Marvell's arm board
Linux localhost 2.6.16.16-88w8xx8 #2 PREEMPT Thu Sep 13 20:55:02 EDT 2007 armv5tejl unknown
127.0.0.1 MV88W8618 localhost.localdomain localhost
Linux version 2.6.16.16-88w8xx8 (skkoh@wless) (gcc version 3.3.3 (DENX ELDK 3.1.1 3.3.3-9)) #2 PREEMPT Thu Sep 13 20:55:02 EDT 2007
/proc $ cat cpuinfo
Processor : ARM926EJ-Sid(wb) rev 1 (v5l)
BogoMIPS : 199.47
Features : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TE
CPU variant : 0x1
CPU part : 0x926
CPU revision : 1
Cache type : write-back
Cache clean : cp15 c7 ops
Cache lockdown : format C
Cache format : Harvard
I size : 32768
I assoc : 1
I line length : 32
I sets : 1024
D size : 32768
D assoc : 4
D line length : 32
D sets : 256
Hardware : MV88W8618
Revision : 0031
Serial : 0000000000000000
/proc $
댓글 달기