본문 바로가기

Programming/IoT_Embedded

라즈베리파이 개발환경 꾸미기 #7.C/C++ Cross Compiler(Tool Chain) 설치하기(윈도우/맥)

이 포스트는 라즈베리파이 개발환경 꾸미기를 주제로 아래와 같은 시리즈 연재로 이루어 집니다.

  1. 라즈비안 OS 설치하기
  2. 키보드 모니터 없이 라즈베리파이 Login 하기
  3. Wifi 설정 / 기본 설정하기
  4. 파이썬 + Eclipse로 라즈베리파이 개발하기
  5. 라즈베리파이에 NodeJs 설치하기
  6. NodeJs + Eclipse로 라즈베리파이 개발하기
  7. >> C/C++ Cross Compiler(Tool Chain) 설치하기 <<
  8. Eclipse + C/C++ 로 라즈베리파이 개발하기


이번 포스트에서는 라즈베리파이를 C/C++로 개발하고자 할때, 개발 PC에서 소스코드를 컴파일 하고 링킹해서
라즈베리파이에서 실행할 수 있는 환경을 꾸미는 것에 대해 알아 보겠습니다.

개발PC는 주로 윈도우즈나 맥OS를 사용 할텐데요, 여기서 작성한 소스코드를 빌드해서 라즈베리에 
옮겨놓고 실행하면 당연히 동작을 하지 않습니다.
그래서 개발 PC에서 빌드할때 다른 시스템에서 동작 시킬 목적으로 빌드하는 툴을 이르켜
크로스 컴파일러(Cross Compiler) 또는 크로스 툴체인(Cross Toolchain) 이라고 합니다.
툴-체인이라고 부르는 이유는 컴파일 뿐만 아니라 링커, 디버거 등의 개발에 필요한 다양한 도구들이 묶여 있기 때문입니다.

gcc를 포함하는 툴체인의 종류는 여러가지가 있는데, 크게 2가지 용도로 나누어 집니다.
하나는 bare-metal(베어메탈)을 위한 것이고, 나머지 하나는 리눅스 어플리케이션 용도입니다.
bare-matal(베어메탈)이라는 말은 벌거벗은 금속, 즉 페인트 칠을 하지 않아서 표면에 금속이 다 드러나있는 상태를 말합니다.
컴퓨터 용어로는 아무런 소프트웨어가 설치되지 않은 깡통 하드웨어를 말합니다.
베어메탈용 툴체인은 운영체제가 없거나 무슨 운영체제인지 모르는 상태에서 소스코드를 빌드할 때 사용합니다.
일반적으로는 리눅스 커널 포팅이나 빌드에서 사용합니다.
반면에 리눅스 어플리케이션용은 해당 하드웨어에 리눅스가 설치되어 있다고 보고 소스코드를 빌드할 때 사용합니다.
일반적으로 각각의 설치된 툴체인 중 gcc 파일이름을 보자면 다음과 같은 패턴을 주로 사용합니다.

베어메탈용 : arm-none-xxxeabi-gcc
리눅스용 : arm-linux-xxxeabixx-gcc

베어메탈용을 설치하면 타켓 보드에 대한 여러가지 설정을 해주지 않으면 링크 단계에서 많은 오류가 발생합니다.
특히 printf()같은 표준 입출력 함수에 대해서 링크 단계의 오류가 많이 나타납니다.
그래서 단순히 어플리케이션을 개발하고자 할때에는 리눅스용 툴체인을 설치하는 것이 편리합니다.
이 포스트에서는 리눅스 툴체인에 대해서 윈도우즈용과 맥용에 대해 각각 설명합니다.


윈도우즈의 경우

제가 써본 것 중에는 윈도우즈에서 가장 편리하게 사용할 수 있는 크로스 툴체인으로는  아래의 URL에서 받을 수 있습니다.


라즈베리파이 전용으로 나와 있기 때문에 별다른 설정 없이 아주 편리하게 사용할 수 있습니다.

다운로드 받은 설치 파일을 실행해서 설치를 진행합니다.


잠시후 설치가 성공적으로 이루어 졌음을 알 수 있습니다.


설치가 완료되면 도스창을 열고 "C:\sysGCC\Raspberry\bin”로 경로를 이동하여 설치 여부를 확인합니다.

arm-linux-gnueabihf-gcc  --version

버전 번호가 잘 출력이 되면 주로 사용하는 아무 에디터를 이용해서 아래와 같은 아주 심플한 코드를 작성합니다.

#include <stdio.h>

int main(){
    printf("hello raspberry-pi!!\n");
    return 0;

}

저는 c:\Temp\hellopi.c 라는 파일이름으로 저장하였습니다.
아래의 명령어로 빌드를 합니다.

arm-linux-gnueabihf-gcc  -o hellopi hellopi.c

빌드가 정상적으로 이루어 지면 dir 명령으로 새롭게 생성된 파일을 확인해 볼 수 있습니다.


이제 “hellopi”라는 실행파일을 라즈베리파이로 전송해서 실행해 보면 됩니다.

라즈베리파이로 파일 전송을 하기 위해 WinSCP라는 툴을 다운받아 설치하겠습니다.
물론, 나중에 이클립스를 이용하면 이와 같은 단계는 한번에 이루어 질 것입니다.

WinSCP 다운로드는 아래의 URL에서 받을 수 있습니다.



다운로드 받은 파일을 실행해서 설치를 진행합니다.


설치가 끝나면 실행해서 라즈베리파이에 접속합니다.


접속이 이루어 지면 아래와 같이 두개로 분할된 창이 뜨는데 왼쪽은 개발PC, 오른쪽은 라즈베리파이의 디스크 내용을 보여 줍니다.


좌측 창에서 좀 전에 빌드해 놓은 hellpi 를 선택해서 “파일 > 업로드 “ (단축키는 F5)를 눌러서 라즈베리파이로 업로드 합니다.


Putty를 이용해서 라즈베리파이에 ssh로 접속을 해서 보면 파일이 보일겁니다.
그런데 윈도우즈에서 컴파일된 파일이라서 리눅스 파일 시스템에 실행 권한이 없습니다.
그래서  실행 권한을 줍니다.

$ chmod 744 hellopi

그리고 실행하면 정상적으로 실행되는 것을 볼 수 있습니다.

$ ./hellopi



필요에 따라 베어메탈용 크로스 툴체인이 필요한 경우에는 
가장 유명한 것이 Sourcery CodeBench Lite 라는 것이 있습니다.
아래의 URL에서 구해서 설치할 수 있습니다.


맥OS 인 경우

의외로 맥용 크로스 툴체인이 별로 없습니다.
그나마 있는 것은 sourcery 코드를 맥용으로 빌드한 것이 많은데, 대부분 메어메탈용입니다.

제가 경험 해 본것 중에는 가장 편리하게 사용할 수 있는 것이 아래의 URL에서 다운로드 받을 수 있습니다.


비글본용이랑 라즈베리용을 같이 제공해 주고 있으니 라즈베리용 중에 더 최신 판을 받아 보도록 하겠습니다.


위 URL에서 제공하는 크로스 툴체인은 linaro Toolchain이라는 것을 맥용으로 재가공한 것입니다.
원래 Linaro Toolchain은 리눅스용과 윈도우즈용만 제공합니다.


다운로드 받은 파일을 압축풀어 실행하면 설치가 진행됩니다.


설치가 정상적으로 끝나면 /usr/local/linaro 디렉토리에서 설치된 파일을 찾아 볼 수있습니다.
아래의 명령으로 버전 번호를 확인하는 것으로 정상 설치 여부를 확인할 수 있습니다.

$ /usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --version


동작 여부를 확인 했으면 아래와 같은 심플한 코드를 작성합니다.

#include <stdio.h>

int main(){
    printf("Hello Pi~~\n");
    return 0;
}

저는 hellopi_from_mac.c 로 저장하였습니다.

저장한 소스 코드를 빌드합니다.
$ /usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc -o hellopimac hellopi_from_mac.c 



빌드하고나서 ls 명령으로 생성된 실행파일을 확인 할 수 있습니다.

생성된 파일을 scp 명령으로 라즈베리파이에 업로드 합니다.

$ scp ./hellopimac pi@172.30.1.54:~/



전송이 끝났으면, 이제 ssh로 라즈베리파이 콘솔에 접속하여 업로드된 파일을 확인합니다.


file 명령으로 해당 파일이 ARM 아키텍처에 맞게 빌드된 파일임을 확인 할 수 있고,
최종적으로 실행하여 결과를 확인 할 수 있습니다.

맥OS에서 메어메탈 크로스 툴체인을 설치하려면 mac port를 이용하면 손쉽게 설치할 수 있습니다.
$ sudo port install arm-none-eabi-binutils
$ sudo port install arm-none-eabi-gcc
$ sudo port install arm-none-eabi-gdb



이번 포스트에서는 C 언어로 개발 할 수 있는 환경을 구성해 보았습니다.
다음 포스트에는 이와 같은 일련의 작업을 이클립스에서 진행 하는 방법을 살펴 보겠습니다.


이 포스트는 라즈베리파이 개발환경 꾸미기를 주제로 아래와 같은 시리즈 연재로 이루어 집니다.

  1. 라즈비안 OS 설치하기
  2. 키보드 모니터 없이 라즈베리파이 Login 하기
  3. Wifi 설정 / 기본 설정하기
  4. 파이썬 + Eclipse로 라즈베리파이 개발하기
  5. 라즈베리파이에 NodeJs 설치하기
  6. NodeJs + Eclipse로 라즈베리파이 개발하기
  7. >> C/C++ Cross Compiler(Tool Chain) 설치하기 <<
  8. Eclipse + C/C++ 로 라즈베리파이 개발하기