문제

X86 호스트의 ARM 대상을위한 Linux 커널을 크로스 컴파일하는 데 관심이 있습니다. 당신이 추천하는 좋은 관행이 있습니까? 귀하의 의견으로는 최고의 크로스 컴파일 스위트가 무엇입니까? 맞춤형 크로스 컴파일 환경을 해결 했습니까? 그렇다면 어떤 조언이 있습니까? 좋은 생각인가요?

도움이 되었습니까?

해결책

ARM/Linux 도구에 사용한 두 가지 접근 방식이 있습니다. 가장 쉬운 것은 사전 구축 된 도구 체인을 직접 다운로드하는 것입니다.
찬성: 그것은 단지 작동하고 당신은 당신의 프로젝트의 흥미로운 부분을 계속할 수 있습니다.
범죄자: 당신은 그들이 선택한 gcc/binutils/libc 버전에 갇혀 있습니다.

나중에 당신에게 중요한 경우 확인하십시오 Crosstool-ng. 이 프로젝트는 Linux 커널 구성 응용 프로그램과 유사한 구성 도구입니다. GCC, Binutils, LIBC (GNU 또는 UCLIBC), 스레딩 및 Linux 커널의 버전을 구축하고 Crosstool-NG의 버전을 설정하고 나머지는 타르 공을 다운로드하고 도구를 구성하고 빌드합니다).
찬성: 구성 중에 선택한 내용을 정확히 얻을 수 있습니다.
범죄자: 구성 중에 선택한 내용을 정확히 얻을 수 있습니다.

즉, 컴파일러/binutil/libc 선택과 관련 기능/단점/버그에 대한 모든 책임이 있습니다. 또한 의견에 언급 된 바와 같이, Binutils, C 라이브러리 등의 버전을 선택하는 데 관련된 "통증"이 있습니다. 모든 조합이 반드시 함께 작동하거나 구축되는 것은 아닙니다.

하나의 하이브리드 접근 방식은 사전 구축 된 도구부터 시작하여 필요한 경우 Crosstool-NG를 통해 사용자 정의 솔루션으로 나중에 교체하는 것일 수 있습니다.

업데이트: 답은 원래 사용했습니다 Codesourcery 도구 사전 구축 된 공구 체인의 예로. ARM 용 Codesourcery 도구는 무료였습니다 멘토 그래픽에서 다운로드하십시오, 그러나 그들은 이제 Sourcery Codebench라고 불리며 멘토 그래픽에서 구매해야합니다. 다른 옵션에는 이제 포함됩니다 리나로 안드로이드, 우분투 등의 배포 특정 도구뿐만 아니라.

다른 팁

나는 이용 가능한 소규모 자원 (/메일의 눈부심)에서 기본적으로 컴파일되는 것이 행복하지 않은 ARM 머신의 물건을 컴파일하기 위해 Emdebian 도구 체인을 사용합니다. 메인 패키지는입니다 gcc-4.X-arm-linux-gnueabi (x = 1,2,3), 적절한 접미사 GCC/CPP/LD/etc 명령을 제공합니다. 나는 이것을 내에 추가한다 sources.list:

deb http://www.emdebian.org/debian/ unstable main

물론 데비안을 사용하지 않는다면 아마도 그렇게 유용하지는 않지만 고무 그것은 나를 위해 잘 작동합니다.

나는 사용했다 스크래치 박스 ARM 프로세서를 사용하는 Maemo (Nokia N810)의 앱 빌딩을 실험하는 동안. 아마도 Scratchbox는 Maemo 개발에 국한되지 않습니다.

여러 목표물에서 Crosstool을 사용했습니다. 툴체인을 처음부터 구축하려는 한 좋습니다. 물론 ARM을위한 몇 가지 사전 제작 된 도구 체인도 있습니다. Google It은 여기에 언급하기에는 너무 많습니다.

1) 제 생각에는 자신의 도구 체인을 구축하는 것이 가장 효과적입니다. 당신은 결국 모든 것을 엄격하게 통제 할 수 있으며, 임베디드 리눅스를 처음 접하는 것이 좋으면 훌륭한 학습 경험입니다.

2) 상업용 도구 체인을 사용하지 마십시오. 자신의 시간을 내고 싶지 않더라도 무료 대안이 있습니다.

회사가 돈을 쓰면 JTAG 디버거를 구입하도록하십시오.
그것은 당신에게 많은 시간을 절약 할 것입니다. 그리고 그것은 당신이 커널 시작 등을 쉽게 배우고 단계를 밟을 수 있습니다. Lauterbach JTAG 제품 ... 많은 목표와 함께 일하며 소프트웨어는 크로스 플랫폼입니다. 그들의 지원도 훌륭합니다.

JTAG 디버거를 얻을 수없고 커널에서 작업하는 경우 VM을 사용하여 Usermode Linux, VMware..ETC .. X86에서 코드가 디버깅됩니다. 다른 이야기가 되십시오. 그러나 그것은 몇 가지 버그를 해결하는 저렴한 방법입니다.

부트 로더를 포팅하는 경우 uboot를 사용하십시오. 물론 참조 플랫폼을 사용하는 경우 BSP와 함께 제공하는 것을 사용하는 것이 좋습니다.

도움이되기를 바랍니다.

BuildRoot 맞춤 UCLIBC 기반 도구 체인을 처음부터 구축하는 데 합리적으로 행운을 빕니다. 그것은 매우 사용자 정의 할 수 있으며 어떤 분포를 실행하는지에 대해 과도하게 구체적이지 않습니다.

또한 기존의 많은 사용자 (예 : 내장 라우터 배포판)도 ARM을 대상으로합니다.

Gentoo를 사용하는 경우 크로스 컴파일 툴체인을 얻는 것이 쉽습니다.

$ emerge crossdev
$ crossdev -t $ARCH-$VENDOR-$OS-$LIBC

어디 ARCH ~이다 arm 또는 armeb, 공급 업체입니다 unknown 또는 softfloat, OS ~이다 linux, 그리고 LIBC ~이다 gnu 또는 uclibc.

원하는 것은 커널의 컴파일러 (및 링커) 만 있으면 LIBC 부품은 관련이 없으며 사용할 수 있습니다 -s1/--stage1 알려 crossdev 당신이 필요하다는 것 binutils 그리고 gcc.

이것이 Eurotech가 사용하는 것입니다 그들의 데비안 팔로. 피할 수있는 경우 크로스 컴파일러를 사용하지 않는 것이 좋습니다. 대상 자체에서 컴파일하는 것은 당신이 알고있는 출력을 얻는보다 안정적인 방법 인 경향이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top