RTEMS를 Linux에서 Cross Compile 하기 위해서는 해당 Cross Compiler가 필요합니다.

(RTEMS: https://www.rtems.org/ ,https://en.wikipedia.org/wiki/RTEMS)


특히 지금 사용하고 있는 Sparc 프로세스에 맞추어 만들어진 Cross Compiler가 필요합니다.

Cross Compiler에 대한 설명은 https://en.wikipedia.org/wiki/Cross_compiler를 참고하시면 됩니다.


크로스 컴파일러를 사용할 수 있는 환경을 일일이 설치하려면 각 프로그램 사이의 버전에 대한 의존성을 확인해야 하므로 번거로울 수 있습니다.


따라서 저는 Gaisler 에서 제공하는 Sparc RTEMS Cross Compiler(RCC)를 다운받아서 설치를 하였는데, 해당 크로스 컴파일러는 Sparc(LEON, ERC32) 용 RTEMS를 Linux에서도 컴파일할 수 있도록 해줍니다.


하지만 이러한 컴파일러를 위해서는 리눅스 유틸리티 중에서 autoconf 와 automake를 요구합니다.

- autoconfhttps://en.wikipedia.org/wiki/Autoconf

- automakehttps://en.wikipedia.org/wiki/Automake


제가 RCC를 사용하는 시스템의 사양은 아래와 같습니다.

- OS: Ubuntu 14.04.1 LTS x86

- Compiler: sparc-rtems-4.10(gcc-4.4.6-1.2.14)

- Tools: autoconf-2.69, automake-1.9.6


툴의 설치 순서는 다음과 같습니다.

autoconf 설치 - automake 설치 - RCC 압축해제 및 폴더 이동 - 실행 경로 변수 추가(bash)


주의하실 점은 automake를 autoconf 전에 설치하면 에러가 발생할 수 있습니다.


1. autoconf 설치

1) 파일 압축해제

# tar -jxf autoconf-2.69.tar.bz2


2) 설정 준비 및 설정

(1) configure를 위해 디렉터리 생성

# mkdir autoconf-2.69/build

# cd autoconf-2.69/build


(2) 설정

../configure --prefix=/usr


3) 설치

# sudo make 

# sudo make install


2. automake 설치

1) 파일을 압축해제 한다.

# tar -jxf automake-1.9.6.tar.bz2


2) 설정 준비 및 설정

(1) configure를 위해 디렉터리 생성

# mkdir automake-1.9.6/build

# cd automake-1.9.6/build


(2) 설정

# ../configure --prefix=/usr


3) 설치

# sudo make 

# sudo make install


3. RCC 설치

1) RCC 압축해제

# tar -jxf sparc-rtems-4.10-gcc-4.4.6-1.2.14-linux.tar.bz2


2) 디렉터리 이동 (/opt/)

# mv -f rtems-4.10 /opt/


3) 환경변수 설정

# sudo vi ~/.bashrc

bashrc 파일에 다음을 입력한다.

# export PATH=/opt/rtems-4.10/bin:$PATH


위의 과정을 수행한 후, 환경 변수 설정이 잘 되었는지 확인하기 위해 명령 프롬프트에서 "sparc-rtems-" 명령을 입력한 후 tab을 눌러 자동완성이 되는지 확인합니다.

그리고 컴파일러가 잘 동작하는지 확인하기 위해 RTEMS 샘플 코드를 작성하여 컴파일이 정상적으로 동작하는지 확인합니다.


샘플 코드:

#include <stdio.h>
 
void main(){
  printf("Hello World\n");
}


컴파일: 

 $ sparc-rtems-gcc -o main main.c


만약 컴파일 과정에서 libgmp.so.3 혹은 libmpfr.so.1 에러가 발생하면 다음과 같이 해결할 수 있습니다.

/opt/rtems-4.10/libexec/gcc/sparc-rtems/4.4.6/cc1: error while loading shared libraries: libgmp.so.3: cannot open shared object file: No such file or directory


해당 에러는 /usr/lib 디렉터리에 libgmp.so.3 파일이 존재하지 않아 발생하는 문제이기 때문에 아래와 같이 gmp를 설치해서 해결할 수 있습니다. 

(gmp의 다운은 http://ftp.gnu.org/gnu/gmp/에서 받을 수 있습니다. 저는 5.1.3 버전을 사용하였습니다)

1) 압축해제

# tar xfz gmp-5.1.3.tar.gz


2) 설치

# ./configure

# sudo make

# sudo make install


3) 파일 복사

현재 gmp 라이브러리가 설치된 경로는 /usr/local/lib/ 로 해당 디렉터리에 있는 libgmp.so.x 파일을 /usr/lib/ 로 복사해 주어야 합니다. 

5.1.3의 설치 결과로 libgmp.so.10 파일이 생성되었습니다.

# sudo cp /usr/local/lib/libgmp.so.10 /usr/lib/libgmp.so.3


/opt/rtems-4.10/libexec/gcc/sparc-rtems/4.4.6/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory


해당 에러도 위의 에러와 마찬가지로 /usr/lib/ 에 해당 파일이 존재하지 않아서 발생하는 문제입니다. 

그러므로 mpfr을 설치해서 해결할 수 있습니다. 

(mpfr의 다운은 http://www.mpfr.org/mpfr-current/#download 에서 받을 수 있습니다. 저는 3.1.2 버전을 사용하였습니다)


1) 압축해제

# tar xfz mpfr-3.1.2.tar.gz


2) 설치

# ./configure

# sudo make

# sudo make install


3) 파일 복사

/usr/local/lib/ 에 있는 libmpfr.so.x를 /usr/lib/ 에 복사해 주어야 합니다. 3.1.2 버전에서는 libmpfr.so.4 파일이 생성되었습니다.

# sudo cp /usr/local/lib/libmpfr.so.4 /usr/lib/libmpfr.so.1


이후 다시 컴파일해서 정상적으로 동작하는지 확인합니다.