라즈베리파이 C++ 크로스 컴파일(Cross Compile) 환경 설정

|

라즈베리파이용 프로그램을 Windows PC에서 개발할 수 있도록 크로스 컴파일(Cross Compile) 환경을 설정하는 방법입니다.


툴체인(Toolchain) 다운로드 및 설치

먼저 Windows toolchain for Raspberry/PI을 다운로드 하고 설치를 합니다.

image -fullwidth


Eclipse 설치

Visual GDB 같은 상용 IDE도 존재하지만, 여기서는 무료로 사용할 수 있는 Eclipse를 활용하도록 하겠습니다.

Eclipse Download 사이트로 가서 Eclipse IDE for C/C++ Developers를 다운로드합니다.

그리고 환경 설정으로 가거나 새로운 프로젝트를 하나 만들어서 Cross GCC 설정을 해줍니다.

image

image

크로스 컴파일러 prefix를 arm-linux-gnueabihf-로 설정합니다.

이제 Hello, World 등의 간단한 코드를 실행해서 빌드가 잘되는지 확인하면 됩니다.


C++11 환경 설정

라즈베리파이용 툴체인도 C++11 이상을 지원합니다. 따라서 이왕 개발할거면 C++11 이상으로 개발하는 것이 좋을 것 같습니다.

image

Project > Properties > C/C++ Build / Settings > Tool Settings에서 [GCC C++ Compiler] 항목과 [GCC C Compiler] 항목에서 [Miscellaneous] 항목을 찾습니다. 그리고 [Other flags] 뒷 부분에 다음 옵션을 추가합니다.

-std=c++0x


위와 같이 설정하면 C++11 문법으로 빌드는 되지만, Eclipse IDE 상에서는 문법 오류로 표시됩니다. 아래의 설정을 추가로 해주시면 됩니다.

image

Project > Properties > C/C++ General > Preprocessor Include Paths, Macros etc에서 [Providers] 탭을 선택한 다음 [CDT GCC Built-in Compiler Settings MinGW] 항목을 선택합니다. 그리고 아래쪽에 있는 Flag 설정 칸에 다음 옵션을 추가해줍니다.

-std=c++0x


그 이후 C/C++ Index Rebuild 를 수행해주면 Eclipse IDE가 C++11 문법을 정상적으로 인식합니다.

image

라즈베리파이 호스팅 네임 변경

|

라즈베리파이의 호스팅 네임(Hosting Name)을 변경하는 방법입니다. 라즈베리파이의 디바이스 이름이 변경되며, 블루투스 등에서 기기를 검색할 때 뜨는 이름도 변경됩니다.


/etc/hostname

sudo nano /etc/hostname

기본 이름으로 raspberrypi가 입력되어 있을 텐데, 원하는 이름으로 변경합니다. 저 같은 경우는 snowdeer-raspberry로 변경했습니다.


/etc/hosts

DNS 매핑을 관리하는 파일입니다. 이 부분을 제대로 설정하지 않으면 종종 다음과 같은 오류 메세지를 볼 수 있습니다.

sudo: unable to resolve host snowdeer-raspberry

다음 명령어를 이용해서 `hosts’ 파일을 열어줍니다.

sudo nano /etc/hosts

127.0.0.1 raspberrypi로 되어 있는 부분을 127.0.0.1 snowdeer-raspberry로 변경하시면 됩니다.


raspi-config

더 편리한 방법은 raspi-config 프로그래을 이용하는 방법입니다. 여기를 참조하세요.

블루투스 라이브러리 설치

|

블루투스 라이브러리 설치

라즈베리파이에서 블루투스 모듈을 사용한 프로그램을 개발할 때 다음과 같은 라이브러리들을 설치해주어야 합니다.

sudo apt-get install build-essential libbluetooth-dev


SDP Server 활성화

그리고나서 SDP Server를 활성화해주어야 하는데, dbus-org.bluez.service 파일의 내용을 다음과 같이 편집해 주면 됩니다.

sudo nano /etc/systemd/system/dbus-org.bluez.service

nano를 이용해서 dbus-org.bluez.service 파일을 열고, 그 안에

ExecStart=/usr/lib/bluetooth/bluetoothd

부분을 찾아서 뒤에

ExecStart=/usr/lib/bluetooth/bluetoothd --compat

와 같이 --compat 옵션을 붙여줍니다.


.bashrc 편집

그 다음 현재 라즈베리파이의 홈 폴더의 .bashrc 파일을 열어서

nano /home/pi/.bashrc

다음과 같은 코드를 추가합니다.

sudo chmod 777 /var/run/sdp

그리고 라즈베리파이를 재시작 해주시면 됩니다.

GitHub Pages에서 다시 시작

|

작년에 GitHub Pages에서 블로그를 운영했었습니다. 그러다가 워드프레스(WordPress)를 사용해보고 싶은 생각에 구글 클라우드 플랫폼(Google Cloud Platform)기반으로 워드프레스 블로그를 오픈했습니다.

그리고는 약 1년만에 다시 Jekyll을 활용한 GitHub Pages로 돌아왔습니다. 워드프레스 기반의 블로그와 GitHub Pages 기반의 블로그는 장단점 및 그 특징이 뚜렷했습니다. 아무래도 동적 웹페이지 방식의 블로그와 정적 웹페이지 방식의 블로그라 그 특징이 명확했던 것 같습니다.

사실, 워드프레스도 크게 불만은 없었습니다. 설치나 운영은 오히려 더 쉽고 편했습니다. 테마나 각종 플러그인 설치도 쉬웠고, 문제가 생길 때마다 구글링을 통한 검색도 쉬웠습니다.

다만 My SQL 데이터베이스의 불안정 때문에 ‘데이터 베이스 연결 오류’가 자주 떴는데, 이게 은근히 스트레스가 되었습니다. 거기에 설치형 블로그다보니 호스팅비도 매달 내야 하는데, (구글 클라우드 플랫폼을 사용하면 1년간 무료이기 때문에 실제로는 아직 돈을 지불하지는 않았습니다.) 제 블로그 특성상 수익이 창출되지는 않기 때문에 이번 기회에 과감히 다시 GitHub Pages로 넘어오기로 마음먹었습니다.

블로그를 여러 군데 운영하는 것은 많은 수고와 노력이 필요하기에 지난 자료들을 GitHub Pages로 옮기는 작업이 끝나면, 앞으로는 여기에만 포스팅을 하도록 하겠습니다.

scp 사용법

|

SCP (Secure Copy)

SCP(Secure Copy) 명령어는 원격의 파일이나 폴더를 복사하는 Linux 명령어입니다.

scp 명령어는 다음과 같은 형태로 사용할 수 있습니다.

scp [옵션] [원본 경로] [타켓 경로]

예를 들어서, 다른 곳에 있는 파일을 현재 위치로 다운로드하고 싶을 경우는 다음과 같은 형태로 사용할 수 있습니다.

scp -r pi@192.168.0.100:/home/pi/temp ./

여기서 -r 옵션은 하위 폴더까지 모두 포함시키는 옵션입니다.

반대로 로컬에 있는 파일을 서버로 업로드할 경우는 다음과 같이 할 수 있습니다.

scp -P 22 ./index.html pi@192.168.0.100:/home/pi

-P 옵션은 포트를 지정할 때 사용하며, 기본적으로 22번 포트를 사용하는 경우는 생략을 해도 됩니다.