라즈베리 파이는 간단한 프로그램은 빌드가 가능하지만 프로그램의 덩치가 커지면 데스크탑에서 빌드후 소스를 라즈베리로 복사하여 실행하는 방법을 많이 이용한다.
본 방법은 라즈베리파이 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 라이브러리, 기타 다른 라이브러리를 복사해와서 사용해야 한다.
'엔지니어링 > 임베디드' 카테고리의 다른 글
리눅스 Ubuntu 명령어 정리 (0) | 2019.11.15 |
---|---|
리눅스에 Boost 라이브러리 설치 (0) | 2019.11.15 |
IMU MEMS 센서 MPU6050 살펴보기 1 - 자이로 센서 (0) | 2019.10.27 |
IMU MEMS 센서(Gyroscope + Accelerometer) (3) | 2019.10.27 |
[아두이노 기초교육] Visual Studio for Arduino 설치 및 개발 환경설정 (0) | 2019.10.22 |
댓글