Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

라즈베리 파이 제로 용 프로그램 개발을 위한 Eclipse C/C++ 윈도우 환경 설정

라즈베리 파이가 너무 느려서 그 안에서 IDE를 띄워 개발하기에는 다소 답답합니다. 그래서 개별 PC의 윈도우에서 개발한다면 원격 디버깅까지 가능한 Visual Studio를 이용하는 것이 가장 편리한데요,

Visual Studio 2017에서 Raspberry Pi C++ 응용 프로그램 제작
; https://www.sysnet.pe.kr/2/0/11358

부득이 Visual Studio를 사용할 수 없다면 Notepad++에 NppFTP 플러그인을 설치해 개발하는 것도 나쁘진 않습니다. 가령, 간단한 C 프로젝트라면 다음과 같은 식으로 소스 코드와 makefile을 엮으면 그런대로 개발에 큰 불편함은 없습니다.

// $ sudo apt-get install git-core
// $ git clone https://github.com/WiringPi/WiringPi.git
// $ cd wiringPi
// $ git pull origin
// $ ./build

// main.c

#include <stdio.h>
#include <wiringPi.h>

extern int _pinNumber;

int main()
{
    int value;
    
    while (1)
    {
        value = digitalRead(_pinNumber);
        
        printf("%d\n", value);
        
        delay(1000);
    }
} 

// sub.c
int _pinNumber = 5;

# makefile

test.out : main.o sub.o
    gcc -o test.out main.o sub.o -lwiringPi
    
main.o : main.c
    gcc -c -o main.o main.c 
    
sub.o : sub.c
    gcc -c -o sub.o sub.c 
    
clean :
    rm *.o test.out

참고로, Visual Studio Code도 생각해 볼 수 있지만, 아쉽게도 "라즈베리 파이 제로"가 armv6l CPU의 명령어 셋이라 Visual Studio Code도 실행할 수가 없고, 심지어 "Remote-SSH" 확장으로도 접속할 수 없습니다. (접속 시도 시 "The remote host's architecture is not supported."라는 오류가 발생합니다.)




Notepad++/NppFTP의 조합에서 빠진 것이 있다면 역시 디버깅인데요, 어쩔 수 없군요, ^^ Eclipse의 힘을 빌려야겠습니다.

이를 위해 "Eclipse IDE for C/C++ Developers"를 윈도우 PC에 설치한 다음,

Eclipse: https://www.eclipse.org/downloads/

"GNU toolchain for raspberry"를 다운로드해 설치합니다.

Prebuilt Windows Toolchain for Raspberry Pi
; https://gnutoolchains.com/raspberry/

raspberry-gcc8.3.0-r3.exe 
; https://sysprogs.com/getfile/1362/raspberry-gcc8.3.0-r3.exe

설치 후, "C Managed Build" 타입의 새 프로젝트를 선택, "Toolchains"의 항목을 "Cross GCC" 유형으로 생성합니다.

raspberry_pi_dev_eclipse_1.png

위의 과정 이후 "Cross GCC Command"를 설정하는 창이 나오는데 여기에는 이전에 설치한 "GNU toolchain for raspberry"의 컴파일러 경로를 입력합니다.

raspberry_pi_dev_eclipse_2.png

Cross compiler prefix: arm-linux-gnueabihf-
Cross compiler path: C:\SysGCC\raspberry\bin

그렇게 해서 생성한 기본 소스 코드를 다음과 같이 바꿔주고,

#include <stdio.h>
#include <wiringPi.h>

int _pinNumber = 5;

int main()
{
    int value;

    while (1)
    {
        value = digitalRead(_pinNumber);

        printf("%d\n", value);

        delay(1000);
    }
}

"Project" / "Properties" 창을 열어 "C/C++ Build" / "Settings" 범주의 "Cross GCC Linker" / "Libraries"에 "wiringPi" 라이브러리를 추가합니다.

raspberry_pi_dev_eclipse_3.png

끝입니다. 이제 "Ctrl + B(Build)"를 누르면 컴파일이 되고 /Debug 폴더에 "blink" 실행 파일이 생성됩니다. 재미있는 것은 "GNU toolchain for raspberry"으로 컴파일했기 때문에 생성된 바이너리가 라즈베리 파이 32비트 ARM CPU 명령어 셋을 가진 리눅스 실행 파일 포맷이라는 점입니다.

따라서 윈도우에서 실행은 안되지만, 그 파일을 라즈베리 파이에 복사 후 실행하면 정상적으로 구동이 됩니다.

물론, 저런 식으로 ^^; 개발을 하고 싶진 않을 것입니다. 마찬가지로 비주얼 스튜디오에서 그랬던 것처럼, Eclipse에서도 IDE 내에서 실행 시 원격 라즈베리 파이로 자동으로 복사되고 디버깅까지 하고 싶을 텐데요, 이를 위해서는 라즈베리 파이 측에 gdbserver 구성 요소를 설치해 두고,

$ sudo apt-get install gdbserver

Eclipse의 "Run" / "Run Configurations..." 메뉴를 선택하면 "C/C++ Remote Applications"를 설정할 수 있는 창이 뜹니다.

raspberry_pi_dev_eclipse_4.png

위의 화면에서 왼쪽 상단에 있는 "New Configuration" 아이콘을 눌러 새로운 설정을 추가한 다음, "Connection"이 현재 "Local"만 제공되고 있으므로 "New..." 버튼을 눌러 "SSH" 유형의 연결을 추가한 다음,

raspberry_pi_dev_eclipse_5.png

프로젝트의 실행 파일(이 글의 예제에서는 blink)이 원격지 컴퓨터의 어디로 복사될 것인지, 그리고 복사 이후 실행할 명령어를 지정해 줍니다.

raspberry_pi_dev_eclipse_6.png

Remote Absolute File Path for C/C++ Application: /home/pi/sample/blink
Commands to execute before application: chmod 755 /home/pi/sample/blink

위의 예에서는 blink 실행 파일을 "/home/pi/sample/" 디렉터리에 복사하기 때문에 원격지(라즈베리 파이)에 동일한 디렉터리가 존재해야 합니다. (없으면 만들어 줍니다. ^^) 또한, 복사한 파일은 실행 권한이 없으므로 "chmod 755 ..."를 이용해 지정한 것도 유의해야 합니다.

설정을 완료하면, 위의 화면에서 지정한 "Name" (이 글에서는 "blink Debug")에 해당하는 항목이 디버그 아이콘 메뉴에 나오므로,

raspberry_pi_dev_eclipse_7.png

이를 선택하면 원격 디버깅을 시작하고 BP(Breakpoint) 및 Step Into/Over를 이용한 동작을 수행할 수 있습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 5/5/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13501정성태12/25/20232087개발 환경 구성: 700. WSL + uwsgi - IPv6로 바인딩하는 방법
13500정성태12/24/20232178디버깅 기술: 194. Windbg - x64 가상 주소를 물리 주소로 변환
13498정성태12/23/20232822닷넷: 2186. 한국투자증권 KIS Developers OpenAPI의 C# 래퍼 버전 - eFriendOpenAPI NuGet 패키지
13497정성태12/22/20232294오류 유형: 885. Visual Studiio - error : Could not connect to the remote system. Please verify your connection settings, and that your machine is on the network and reachable.
13496정성태12/21/20232307Linux: 66. 리눅스 - 실행 중인 프로세스 내부의 환경변수 설정을 구하는 방법 (gdb)
13495정성태12/20/20232317Linux: 65. clang++로 공유 라이브러리의 -static 옵션 빌드가 가능할까요?
13494정성태12/20/20232500Linux: 64. Linux 응용 프로그램의 (C++) so 의존성 줄이기(ReleaseMinDependency) - 두 번째 이야기
13493정성태12/19/20232546닷넷: 2185. C# - object를 QueryString으로 직렬화하는 방법
13492정성태12/19/20232261개발 환경 구성: 699. WSL에 nopCommerce 예제 구성
13491정성태12/19/20232232Linux: 63. 리눅스 - 다중 그룹 또는 사용자를 리소스에 권한 부여
13490정성태12/19/20232345개발 환경 구성: 698. Golang - GLIBC 의존을 없애는 정적 빌드 방법
13489정성태12/19/20232133개발 환경 구성: 697. GoLand에서 ldflags 지정 방법
13488정성태12/18/20232067오류 유형: 884. HTTP 500.0 - 명령행에서 실행한 ASP.NET Core 응용 프로그램을 실행하는 방법
13487정성태12/16/20232381개발 환경 구성: 696. C# - 리눅스용 AOT 빌드를 docker에서 수행 [1]
13486정성태12/15/20232194개발 환경 구성: 695. Nuget config 파일에 값 설정/삭제 방법
13485정성태12/15/20232088오류 유형: 883. dotnet build/restore - error : Root element is missing
13484정성태12/14/20232161개발 환경 구성: 694. Windows 디렉터리 경로를 WSL의 /mnt 포맷으로 구하는 방법
13483정성태12/14/20232296닷넷: 2184. C# - 하나의 resource 파일을 여러 프로그램에서 (AOT 시에도) 사용하는 방법파일 다운로드1
13482정성태12/13/20232817닷넷: 2183. C# - eFriend Expert OCX 예제를 .NET Core/5+ Console App에서 사용하는 방법 [2]파일 다운로드1
13481정성태12/13/20232266개발 환경 구성: 693. msbuild - .NET Core/5+ 프로젝트에서 resgen을 이용한 리소스 파일 생성 방법파일 다운로드1
13480정성태12/12/20232602개발 환경 구성: 692. Windows WSL 2 + Chrome 웹 브라우저 설치
13479정성태12/11/20232299개발 환경 구성: 691. WSL 2 (Ubuntu) + nginx 환경 설정
13477정성태12/8/20232480닷넷: 2182. C# - .NET 7부터 추가된 Int128, UInt128 [1]파일 다운로드1
13476정성태12/8/20232206닷넷: 2181. C# - .NET 8 JsonStringEnumConverter의 AOT를 위한 개선파일 다운로드1
13475정성태12/7/20232278닷넷: 2180. .NET 8 - 함수 포인터에 대한 Reflection 정보 조회파일 다운로드1
13474정성태12/6/20232133개발 환경 구성: 690. 닷넷 코어/5+ 버전의 ilasm/ildasm 실행 파일 구하는 방법 - 두 번째 이야기
1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...