본문 바로가기

CS/[Embedded]Embedded System Software

[Embedded] Cross Development Environment

What is Cross Development Environment?

우리가 일반적으로 PC 환경에서 개발하는 경우에는, 키보드, 모니터, 하드디스크 등 여러 주변 장치, 보조기억장치 등이 존재한다.

하지만 임베디드 시스템의 경우는 위에 해당하는 것들의 대부분 없다.

 

임베디드 시스템의 경우는 특수 목적으로 만들어진 시스템이다 보니 모니터나 키보드가 필요하지 않는 경우가 많다. 그렇기 때문에 임베디드 시스템 자체에서 개발을 하는 것은 거의 불가능하다고 보면 된다.

 

그럼 임베디드 시스템의 개발은 어떻게 진행되는 것인가?

바로 Cross Development Environment, 교차 개발 환경을 이용하여 개발한다.

교차개발환경이 무엇인지 알아보자.

 

먼저, PC용 SW 개발의 경우에는 개발환경과 실행환경이 동일하며 개발 시스템의 processor 와 실행 시스템의 processor가 동일함을 의미한다.

이와 같은 경우를 네이티브 개발환경이라고 한다.

 

반면 임베디드 시스템 SW 개발은 개발환경과 실행환경이 다르며, processor도 마찬가지로 다르다.

이 경우를 cross development environment라고 한다.

 

임베디드 시스템 자체에서 개발이 불가능 하므로 pc에서 실행 환경 processor에 맞는 binary 파일로 만드는 개발을 진행하고, 해당 파일을 임베디드 시스템에 이식하는 형태로 진행하는 것이다. 이렇게 다른 환경의 바이너리 코드를 생성해주는 컴파일러를 크로스 컴파일러라고 한다.

 

해당 파일은 실행 환경 processor에 맞도록 컴파일 되었기 때문에, 개발 환경 processor에서는 실행이 되지 않는다. 

해당 과정을 직접 실습해 보았는데

직접 실습한 보드의 환경은 ARM processor이고 개발 진행한 pc 환경은 linux processor이었다.

이때 사용한 compiler는 arm-linux-gcc 컴파일러 였다.

 

cross development environment을 그림으로 나타낸 것은 다음과 같다.

 

SW 개발 환경, 즉 PC에 해당하는 시스템이 host PC(시스템)이라고 하고,

SW 실행 환경, 즉 임베디드 시스템에 해당하는 시스템이 target board(시스템)이라고 한다.

 

일반 소프트웨어 개발에도 컴파일러, 어셈블러, 링커 등이 필요하듯이, 

임베디드 소프트웨어 개발에도 크로스 컴파일러, 크로스 어셈블러 등이 필요한데 이러한 개발 툴을 통틀어 tool chain(툴체인)이라고 한다.