arm 디바이스에서 실행파일을 인식하지 못합니다.
우선 하고자 하는 것은 툴체인을 이용하지 않고 ARM(openmoko라는 모바일 기기) 디바이스
자체에서 링킹작업을 하기위해 binutils 패키지를 ARM용으로 포팅하고자 합니다.
그런데 ARM을 위한 우분투나 데비안 패키지가 존재하는 것을 알게 되었고 검색을 통해
binutils 패키지의 ARM용 deb 파일을 찾을 수 있었습니다. 그래서 해당 deb 파일 내에서
실행 파일들을 ARM 디바이스에 옮긴 후 실행하려 했으나 파일 자체를 찾지 못합니다.
자세히 설명 드리자면...
1. http://packages.debian.org/lenny/arm/binutils/download 에서 binutils deb 패키지를 다운로드 받았습니다.
2. deb 패키지의 묶음을 풀고 data.tar.gz의 압축을 풉니다.
$ ar -x binutils_2.18.1~cvs20080103-7_arm.deb
$ tar -zxvf data.tar.gz
3. usr/bin 에 binutils 에 들어 있는 여러 실행파일들을 확인할 수 있었습니다.
$ cd usr/bin/
namhw@namhw-desktop:~/binutils_openmoko/usr/bin$ ls
addr2line ar as c++filt gprof ld nm objcopy objdump ranlib readelf size strings strip
4. 위 파일들을 ARM 디바이스로 옮겨줍니다.
$ scp ./* root@192.168.0.202:/tmp/binutils
5. ARM 보드로 접속한 후 파일을 실행합니다.
$ ssh root@192.168.0.202
# cd /tmp/binutils/
# ./ar
-sh: ./ar: not found
root@om-gta02:/var/volatile/tmp/binutils# ./ld
-sh: ./ld: not found
위와 같이 실행파일들을 찾지 못한다는 메시지를 출력하고 종료됩니다. 그래서 X86에서 툴체인을
사용하여 컴파일 된 다른 프로그램을 실행해보았습니다.
# wget.arm
wget.arm: missing URL
Usage: wget.arm [OPTION]... [URL]...
Try `wget.arm --help' for more options.
#
위와 같이 정상적으로 실행되는 것을 확인할 수 있었습니다. 그래서 file 명령어를 사용하여
해당 파일을을 살펴 보았습니다.
# file ./ld
./ld: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.6.12, dynamically linked (uses shared libs), stripped
# file ./wget.arm
./wget.arm: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.6.14, dynamically linked (uses shared libs), not stripped
위와 같이 둘 모두 32bit ARM 실행파일임을 알 수 있습니다. 차이점은 ld는 stripped 라는 것이며 ./wget.arm 파일은 not stripped 라는 것입니다.
따라서 제가 하고 싶은 것은 deb 패키지에서 추출한 실행파일들이 ARM 보드에서도 동작하게 하는 것입니다.
그럼 답변 부탁드리겠습니다.
설마 실행권한이 없어서 그런건 아니겠지요.
한번 실행권한이 있나 확인해보세여.
즐린
즐린
동적 라이브러리를
동적 라이브러리를 사용하였으면
보드에 설치된 라이브러리랑 deb패키지 제작시 라이브러리랑 toolchain라이브러리를 비교해봐서
맞춰줘야할거같아요
아마 보드라이브러리랑 toolchain라이브러리는 같을거같고 deb패키지 라이브러리가 다를듯한데요
인생은 도박이다.
./ld 는 gnu-abi, wget.arm
./ld 는 gnu-abi, wget.arm 은 arm-eabi 라는 차이가 있습니다.
readelf -h 명령으로 elf 헤더를 보시고 확인하세요.
arm-eabi 는 실행되는데 gnu-abi 가 실행되지 않는다면,
커널 config 에서 OABI_COMPAT 를 활성화 시켰는지부터 확인하세요.
OABI_COMPAT 을 활성화시키면 FPE 쪽 옵션이 더 생길겁니다.
뭐가 됐건간에 최소한 하나이상의 커널모드 FPE 가 있어야 합니다.
(debian stable 의 arm port 는 완전히 EABI 로 넘어간 줄 알고있었는데... 의외군요)
OTL
파일을 못찾는경우는...
1. path
2. 퍼미션
실행이 안되는거라면 혹시 모르겠습니다만.....
아예 못찾는거라면 보다 근본적인 원인이 있지 않을까요 ㅎㅎㅎ
-----새벽녘의 흡혈양파-----
-----새벽녘의 흡혈양파-----
댓글 달기