2012-12-13 1 views
3

저는 라스베리 파이에 대한 자체 툴체인을 만들려고합니다. 미리 만들어진 툴체인이 많이 있다는 것을 알고 있습니다. 이 작업은 교육적인 이유로 이루어졌습니다. 저는 처음부터 임베디드 암 리눅스를 따르고 있습니다. 지금까지 gcc와 uClib를 빌드하는 데 성공했습니다. 나는 arm-unknown-linux-eabi라는 타겟을 만들고있다.ARM U-Boot 용 교차 툴체드 질문

이제는 부트 가능한 파일 시스템 준비에 관해서는 부트 로더 빌드에 대해 스스로 묻고 있습니다.

이 시스템의 부트 로더에 대한 부분이 불완전한 것으로 보입니다. 이제 arm-unknown-linux-eabi toolchain을 사용하여이 시스템의 uboot를 어떻게 구축해야합니까?

리눅스 커널 호출에 의존하지 않는 툴체인을 빌드해야합니까? 첫 번째 재검토는 나를 종속적 인 도구 체인 (리눅스 커널 sys-calls 등등 ...)과 커널을 가질 필요가없는 것들이 있다는 것을 의미합니다. "베어 메탈"툴 체인 또는 "독립형"툴 체인이라고도합니다.

일부 소스에 따르면 Linux 툴체인을 사용하여 U-Boot를 빌드 할 수 있다고 언급하고 있습니다. 이것이 사실이라면 왜 그리고 어떻게해야합니까?

그리고 "Bare Metal"Toolchain에 대한 두 번째 툴체인을 구축해야한다면이 두 가지 차이점에 대한 정보를 얻을 수 있습니다. 다른 libstdc가 필요합니까?

+0

* Buildroot * 스크립트를 시도했을 수 있습니다. RPI 용 웹에는 하나 또는 두 개의 구성 파일이 있다고 생각합니다. – sawdust

답변

1

커널을 빌드하는 데 사용 된 것과 동일한 교차 도구 체인을 사용하여 U-Boot를 구축 할 수 있으며, 나머지는 시스템의 나머지 사용자 공간을 사용할 수 있습니다.

부트 로더는 정의에 따라 자체적으로 포함되어 있으므로 C 런타임 라이브러리를 사용하지 않으므로 선택하지 않아도됩니다. 그러므로 sys-calls의 문제는 그것에 들어 가지 않습니다.

툴체인은 항상 완벽하게 작동하는 개발 시스템 (항상 대상 시스템이 아닌)에 의해 호스팅되어야합니다. '베어 메탈 툴 체인 (bare-metal toolchain)'에 대한 참조는 컴파일러가 sys 호출을 사용하는 것을 말하는 것이 아닙니다 (I/O를 위해 운영 체제에 크게 의존합니다). 부트 로더와 커널을 빌드 할 때 중요한 것은 컴파일러와 링커가 특정 메모리 주소에서 실행할 수있는 정적 링크 된 코드를 생성하도록 구성되어 있다는 것입니다.

1

거의 모든 가능한 방법으로 임베디드 툴킷과 Linux 툴체인간에 차이가 없습니다. 그러나 한 가지 예외가 있습니다.

예외는 __clear_cache입니다. 컴파일러와 "Linux"-toolchain에서 생성 할 수있는 함수는 명령어와 데이터 캐시를 동기화하는 시스템 호출을 포함합니다. (그 비트에 대한 자세한 내용은 http://blogs.arm.com/software-enablement/141-caches-and-self-modifying-code/를 참조하십시오.)

을 지금, 당신은 명시 적 기능에 호출 될 때까지 내가 알고있는 유일한 방법은 전화를 추가하지 않는 한 (C에서해야 GCC 확장을 중첩 된 함수를 작성하는 것입니다 피하십시오). 하지만 차이가 있습니다.