2012-05-03 4 views
5

"arm-elf"를 생성하는 컴파일러 (gnuarm GCC 4.1.1)를 사용하여 부트 로더와 응용 프로그램을 컴파일하는 제품이 있습니다.arm-eabi를 arm-elf와 혼합 할 수 있습니까?

부트 로더와 응용 프로그램은 링커 스크립트의 다른 플래시 메모리 영역에서 분리되어 있습니다.

응용 프로그램에는 2 개의 매개 변수가있는 간단한 c-function으로 부트 로더를 호출 할 수있는 기능이 있습니다.

전 세계의 기존 제품을 업그레이드 할 수 있어야하며 항상 동일한 컴파일러를 사용하여 안전하게 수행 할 수 있습니다.

이제 arm-eabi를 출력하는 새로운 GCC 버전을 사용하여이 제품 응용 프로그램을 컴파일 할 수있게하고 싶습니다.

응용 프로그램과 부트 로더가 모두 동일한 툴체인을 사용하여 컴파일되는 모든 제품이 새로운 제품으로 좋지만 기존 제품은 어떻게됩니까? GCC 4.6.x와 arm-none-eabi로 컴파일 된 새 애플리케이션을 플래시하면 내 애플리케이션이 이전 arm-elf 부트 로더의 부트 로더 기능을 여전히 호출 할 수 있습니까?


또한, 직접적으로 위의 질문과 관련, 나는 팔 EABI와 컴파일 된 바이너리에 팔 엘프로 컴파일 된 오브젝트 파일을 함께 사용할 수 있습니까?


편집 :

내가

답변

4

번호 ABI가 만드는 마법 ... 그것은 어떤 차이가 있는지, 분명히 내가 베어 메탈 ARM7을위한 건물입니다 만들기 위해 좋은 생각 호환 가능한 바이너리. 응용 프로그램 바이너리 인터페이스는 다른 라이브러리/응용 프로그램과 통신하는 방법에 대한 다양한 규칙을 결정합니다. 예를 들어, ABI는 어떤 규칙이 C 함수에 인수를 전달하는 데 사용되는지와 과도한 인수를 처리하는 방법에 대한 암묵적인 가정을 만드는 호출 규칙을 정의합니다.

EABI와 ABI의 정확한 차이는 모르겠지만 EABI를 읽으면 그 중 일부를 찾을 수 있습니다. Debian's page은 정렬 변경 사항과 함께 syscall 규칙이 다르다고 언급합니다.

물론 위의 사항을 감안할 때 팔과 엘보 개체를 혼합 할 수는 없습니다.

위의 대답은 주 응용 프로그램의 부트 로더 코드와 대화한다는 가정하에 제공됩니다. 인터페이스가 매우 간단하다면 (두 개의 매개 변수가있는 함수 호출 만 가능) 작동 할 수도 있습니다. 시도해 보는 재미있는 실험이 될 것입니다. 그러나 ** 보장 **되지 않습니다 **.

EABI를 사용할 필요가 없습니다. 이전 버전과 마찬가지로 gcc 4.6을 사용하여 arm-elf 툴체인을 생성 할 수 있습니다. 창에서 이진 툴체인을 사용하고 있기 때문에 더 많은 어려움이있을 수 있습니다. 나는 리눅스에서 꽤 잘 작동하는 crosstool-ng을 조사 할 것을 제안 할 것이고, 적절한 툴체인을 만들기 위해 Cygwin에서 잘 작동 할 것이다.

+0

저는 Windows에만 국한되지 않고 떠날 큰 이유 중 하나는 쉽게 개발할 수있는 Linux 용 바로 실행할 수 있고 빛나는 새로운 툴체인을 쉽게 얻을 수 있다는 것입니다. 어쨌든, 난 전화를 받아 볼게요, 가능한 한 빨리 그 소식을 다시 보러 올게요. 감사. – j4x

+0

나는 그것이 효과가있을 것이라고 말했지만, 실제 시스템에서는이 동작에 의존하지 않는 것이 좋습니다. – djs

+0

안녕하세요 @fljx - 작동 했나요? 너는 이것을 지금 시험해보기 위하여 4 년이 있었다 :) – blueshift

3

인라인 어셈블리에서 bootloader를 호출하는 옵션이 항상 있습니다.이 경우 필요한 모든 호출 표준을 따를 수 있습니다. :)

그러나, 휴대 성이 방법은 또한 부트 로더 및 응용 프로그램에 대한 두 가지 가정을 만들 것입니다, 그것은 도입 발행 외에 : 특정 장치에 내장 된 부트 로더를 가지

  • 앱에서 감지 할 수있는 당신의 비 EABI 툴체인 일 수 있습니다. 어셈블리 코드를 사용하여 구형 부트 로더를 호출 할 수 있기 때문입니다.
  • 언급 한 두 매개 변수가 부트 로더에 의해 원시 데이터로 사용됩니다. 예를 들어, 부트 로더가 구조체에 대한 포인터처럼 포인터를 사용하는 경우 잘못된 정렬, 패딩 등의 문제가 발생할 수 있습니다.
2

l 이 문제가 없다고 생각하십시오. 나는 나 자신과 같은 무언가를 나 자신으로 만들었다. 기억하고있는 것에서 나는 분단을 다루는 것과 관련된 문제에 부딪쳤다.

This is the best info I can find about the differences, 구조체 정렬 문제가 없다면 문제가되지 않을 수도 있습니다.

관련 문제