2013-02-19 2 views
9

프리 스케일 iMX6q 쿼드 프로세서를 기반으로하는 Saber-lite 개발 보드 용 세이버 라이트 (Saber-lite) : 개발 보드 용으로 설정하고있는 툴체인 용 gcc 옵션을 찾으려고합니다.프리 스케일 iMX6q ARM 프로세서 용 gcc 옵션

이제 iMX6은 기본적으로 코 프로세서 vfpv3 및 네온뿐만 아니라 벡터 그래픽, 2D 및 3D 엔진이있는 코어 텍스 -a9 프로세서라는 것을 알고 있습니다.

그러나 gcc에서 활성화 할 수있는 옵션을 활성화하는 방법에 대한 릴리스 정보 및 사용 설명서는 너무 명확하지 않습니다.

사실 '재생할 수있는'옵션은 다음과 같습니다.

-march= armv7-a    - ok this one is pretty obvious. 
-mfpu= vfpv3/neon    - i can use only the vfpv3 co-processor, or both (respectively, depends on option) 
-mfloat-abi=softfp/soft/hard - I guess I can choose hard here, as there is hardware for fp operations 
-mcpu=cortex-a9    - is it option even necessary? it is not clear if it just an alias for -march or something else. 

사용할 수있는 다른 옵션이 있습니까? 기본 옵션은 리눅스 커널/uboot를 구축하기로 툴체인을하지 왜 가지고/다음 패키지 :

-march= armv7-a -mfpu= vfpv3 -mfloat-abi=softfp 

당신의 도움이

+4

귀하의 -mfloat-ABI ABI 시스템에 사용되는 중 일치해야합니다. softfp도 부동 소수점 하드웨어를 사용하지만 호출 규칙이 다릅니다. "readelf -A/bin/ls"(예 :)로 확인할 수 있습니다. "Tag_ABI_VFP_args : VFP 레지스터"는 어려운 것을 의미합니다. – unixsmurf

+0

매우 유용합니다. 정말 고마워요! – nass

+0

(물론 네이티브 시스템의 기본 gcc를 사용하여 대상 시스템에서 컴파일하는 경우 올바른 ABI가 컴파일러의 기본값이되며 생략 될 수 있습니다.) – unixsmurf

답변

6

사용 -mthumb -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mvectorize-with-neon-quad -mfloat-abi=softfp 주셔서 감사합니다. NEON은 비정 수 숫자를 지원하지 않기 때문에 기본적으로 컴파일러는 NEON을 사용하여 부동 소수점 연산을 벡터화하지 않습니다. 약간의 정밀도를 잃어도 문제가 없다면 -ffast-math 스위치를 추가하여 gcc가 부동 소수점에 NEON을 사용할 수 있습니다.

+2

안녕하세요. 조금 더 자세히 설명해주세요. 왜 softfp를 사용하고 열심히 사용해야하지 않습니까? 또한 -O3은 리눅스 커널을 위해 너무 적극적인 최적화이다. 아니? 나는 U-boot, 커널 및 패키지를 컴파일하려고 악몽을 꾸미려고한다. 아니? 나머지 옵션에 대해 감사합니다. – nass

+2

softfp와 hard의 차이점은 부동 소수점 매개 변수가 전달되는 방식이며 사용하는 Linux 배포본에 따라 다릅니다. 컴파일러의 기본값은 softfp이므로 리눅스 배포판이 정수 레지스터에 부동 소수점 매개 변수를 전달할 가능성이 있습니다 (그러나 FP 연산에는 여전히 하드웨어 FPU를 사용할 수 있습니다). Linux 커널이나 U-boot 만 컴파일하려면 컴파일러 기본값을 변경하지 마십시오. 위의 옵션은 사용자 공간 프로그램을 컴파일하기위한 것입니다. –