ARM 임베디드 보드에서 정적링크로 컴파일 했을시 Illegal instruction 에러가 발생합니다

s_jeho의 이미지

안녕하세요~

임베디드에 관한것은 처음 경험하는것이라 툴체인 설치하는것부터 많이 애를 먹었는데,
툴체인은 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 $

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.