2012-04-20 4 views
3

crosstool-NG을 사용하여 NAS 상자에서 실행중인 프로세서를 대상으로 교차 컴파일러를 작성하려고합니다.crosstool-NG가있는 ARM 크로스 컴파일러의 올바른 옵션은 무엇입니까

Processor  : ARM926EJ-S rev 5 (v5l) 
BogoMIPS  : 183.09 
Features  : swp half thumb fastmult edsp java 
CPU implementer : 0x41 
CPU architecture: 5TEJ 
CPU variant  : 0x0 
CPU part  : 0x926 
CPU revision : 5 
... 
Hardware  : Oxsemi NAS 
Revision  : 0000 
Serial   : 00000d51caab2d00 

다음은 대상 옵션 페이지에 옵션 플래그와 내 현재 설정() :

    는 NAS 상자가 /proc/cpuinfo이며, example dmesg output 존재하는 ZyXEL NSA210입니다

  • 대상 아키텍처 (암)
  • MMU 사용 (예)
  • 엔디안 (리틀 엔디안)
  • 비트 수 (32 비트)
  • 기본 명령어 세트 모드 (ARM) CPU에 대한
  • 사용 EABI (예)
  • 아키텍처 수준 --with-아치 =()
  • 방출 어셈블리 --with- CPU =() CPU()
  • 를 사용하여 특정 FPU()
  • 부동 소수점 (소프트웨어)
  • 대상 CFLAGS()에 대한
  • 조정
  • 대상 LDFLAGS()
나는 '아키텍처 레벨'에서 다양한 조합을 시도하고 'CPU를위한 발광 어셈블리'봤는데

같은 arm926ej-s, armv5l, armv5tej하지만 나도 몰라 옵션이 이동하는 어디에.

상자에 사용 된 Linux 버전이 NG가 아니기 때문에 대상 OS를 베어 메탈로 설정했습니다.

또한 툴체인이 빌드되면 동일한 옵션을 컴파일러에 다시 전달해야합니다.

지금까지 시도하여 방금 Illegal instruction 메시지를 생성했습니다.

편집

사람이 내 질문에 대답 할 올바른 매개 변수를 찾는 방법을 명시 적으로 참조와 함께 ARM의 GCC 툴체인을 설정하는 방법에 대한 기사를 향해 날 지점 수 있다면.

답변

4

는 이러한

--with-arch=armv5te 
--with-tune=arm926ej-s 

또는

--with-cpu=arm926ej-s 

(모두 가진 아무 소용이 없다) 중 하나 봅니다.

그렇지 않으면 옵션이 잘 보입니다.

여전히 작동하지 않는다면 라이브러리와 헤더를 살펴 봐야합니다.동적으로 링크 된 라이브러리를 사용하려면 타겟에있는 라이브러리, 버전 현명 및 이름과 일치하는 라이브러리가 필요합니다. 정적 링크를 사용하거나 자신의 공유 라이브러리를 대상 (비표준 장소, 아마도 추가 설정이 필요한)에 복사하려는 경우에는 괜찮습니다.

어쨌든 커널 헤더가 일치해야합니다. kernel.org에서 최신 커널 헤더를 다운로드 할 수 있습니다.

+0

도움 주셔서 감사합니다. 명확히하기 위해 리눅스가 리눅스에서 컴파일되도록 컴파일해야합니까, 아니면 베어 메탈 시스템 용으로 컴파일하고 리눅스에서 실행할 수 있습니까? –

+2

Linux에서 베어 머신 프로그램을 실행할 수 없습니다. – ams