본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/임베디드

[라즈베리파이] Ubuntu에서 크로스 컴파일 환경설정 및 예제코드작성

by 베니스상인 2019. 11. 14.

라즈베리 파이는 간단한 프로그램은 빌드가 가능하지만 프로그램의 덩치가 커지면 데스크탑에서 빌드후 소스를 라즈베리로 복사하여 실행하는 방법을 많이 이용한다.

 

본 방법은 라즈베리파이 3와 Ubuntu 18.04환경에서 크로스컴파일 환경을 설정하고 프로젝트를 빌드하는 과정을 소개한다.

 

참고 자료는 아래에 있다.

 

https://hackaday.com/2016/02/03/code-craft-cross-compiling-for-the-raspberry-pi/

 

Code Craft: Cross Compiling For The Raspberry Pi

Sometimes there’s just no place like your desktop. You’ve already got your favorite development tools and references setup or installed and it’s a pain when you’re trying to…

hackaday.com

 

오렌지색은 데스크탑에서의 작업, 파란색은 라즈베리파이에서 작업을 의미한다.

 

 

 

1. 필수 툴 설치

다음과 같이 cross compile 개발에 필요한 툴을 설치한다. 

$ sudo apt-get install build-essential

$ sudo apt-get install g++-arm-linux-gnueabihf

$ sudo apt-get install gdb-multiarch

 

build-essential은 ubuntu host 빌드에 필요한 gcc 등의 기본 툴을 설치한다. 

g++-arm-linux-gnueabihf 는 cross compile을 위한 g++을 설치한다. 이를 설치하면 gcc, binutils 등 의존성 있는 프로그램도 같이 설치된다. 

Ubuntu에는 arm compile환경은 gcc-arm-none-eabi, gcc-arm-linux-gnueabi, gcc-arm-linux-gnueabihf, gcc-arm-linux-arndroideabi 를 제공한다.

EABI(Embedded Application Binary Interface)는 ARM의 C 호출 관행이라고 이해하면 된다.

Gcc-arm-none-eabi는 RTOS와 같은 환경을 위한 것이고, gcc-arm-linux-gnueabi, gcc-arm-linux-gnueabihf는 linux를 위한 컴파일러이다.

뒤의 hf는 hardware floating point를 말한다.

Raspberry Pi의 모든 버전에 있는 SOC는 hardware floating point를 지원하므로 gcc-arm-linux-gnueabihf를 사용한다. 

Gdb-multiarch로 여러 architecture를 지원하는 gdb도 설치한다. 

 

2. 코드작성 및 빌드

제대로 컴파일, 디버깅 되는지를 다음과 같이 확인한다. 

Raspberry Pi의 IP는 192.168.0.10, Ubuntu는 192.168.0.20 로 IP를 가지고 있는 것으로 설명한다. 

 

Ubuntu에서 아래 코드를 작성하여 빌드한다. 

#include <iostream>

using namespace std;

 

int main() {

    cout << "!!!Hello World From Pi!!!" << endl;

    return 0;

}

 

빌드는 아래와 같이 실행하여 hello 파일이 생성되는지 확인한다. 

$ arm-linux-gnueabihf-g++ -g -o hello hello.cpp

$ file hello

hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=6eabae0d7840768461723df1c5d60dc1b88239fa, not stripped

 

3. 라즈베리로 복사 및 실행

hello를 scp를 이용하여 target board로 복사한다. 

$ scp hello pi@192.168.219.102:/home/pi/work/

 

 

 

4. 라즈베리에서 실행

 

ssh로 라즈베리 파이에 접속한다.

$ ssh pi@192.168.219.102

복사된 경로로 이동하여 파일을 실행한다.

 

 

 

정상적으로 실행되고 출력이 target에 나오면 모든 것이 완료된 것이다.

 

 

boost를 사용한 프로젝트를 크로스 컴파일하는 방법

- 라즈베리파이에 있는 boost 라이브러리, 기타 다른 라이브러리를 복사해와서 사용해야 한다.

728x90

댓글