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

비밀번호

댓글 작성자
 




... 91  92  93  94  95  96  97  [98]  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11485정성태4/11/201823673.NET Framework: 738. C# - Console 프로그램이 Ctrl+C 종료 시점을 감지하는 방법파일 다운로드1
11484정성태4/11/201824758.NET Framework: 737. C# - async를 Task 타입이 아닌 사용자 정의 타입에 적용하는 방법파일 다운로드1
11483정성태4/10/201828052개발 환경 구성: 358. "Let's Encrypt"에서 제공하는 무료 SSL 인증서를 IIS에 적용하는 방법 (2) [1]
11482정성태4/10/201820494VC++: 126. CUDA Core 수를 알아내는 방법
11481정성태4/10/201832160개발 환경 구성: 357. CUDA의 인덱싱 관련 용어 - blockIdx, threadIdx, blockDim, gridDim
11480정성태4/9/201822184.NET Framework: 736. C# - API를 사용해 Azure에 접근하는 방법 [2]파일 다운로드1
11479정성태4/9/201817800.NET Framework: 735. Azure - PowerShell로 Access control(IAM)에 새로운 계정 만드는 방법
11478정성태11/8/201920063디버깅 기술: 115. windbg - 덤프 파일로부터 PID와 환경변수 등의 정보를 구하는 방법 [1]
11477정성태4/8/201817496오류 유형: 460. windbg - sos 명령어 수행 시 c0000006 오류 발생
11476정성태4/8/201819068디버깅 기술: 114. windbg - !threads 출력 결과로부터 닷넷 관리 스레드(System.Threading.Thread) 객체를 구하는 방법
11475정성태3/28/201821364디버깅 기술: 113. windbg - Thread.Suspend 호출 시 응용 프로그램 hang 현상에 대한 덤프 분석
11474정성태3/27/201819493오류 유형: 459. xperf: error: TEST.Event: Invalid flags. (0x3ec).
11473정성태3/22/201824607.NET Framework: 734. C# - Thread.Suspend 호출 시 응용 프로그램 hang 현상파일 다운로드2
11472정성태3/22/201818592개발 환경 구성: 356. GTX 1070, GTX 960, GT 640M의 cudaGetDeviceProperties 출력 결과
11471정성태3/20/201821974VC++: 125. CUDA로 작성한 RGB2RGBA 성능 [1]파일 다운로드1
11470정성태3/20/201824160오류 유형: 458. Visual Studio - CUDA 프로젝트 빌드 시 오류 C1189, expression must have a constant value
11469정성태3/19/201817185오류 유형: 457. error MSB3103: Invalid Resx file. Could not load file or assembly 'System.Windows.Forms, ...' or one of its dependencies.
11468정성태3/19/201816695오류 유형: 456. 닷넷 응용 프로그램 실행 시 0x80131401 예외 발생
11467정성태3/19/201816097오류 유형: 455. Visual Studio Installer - 업데이트 실패
11466정성태3/18/201817241개발 환경 구성: 355. 한 대의 PC에서 2개 이상의 DirectX 게임을 실행하는 방법
11463정성태3/15/201819592.NET Framework: 733. 스레드 간의 read/write 시에도 lock이 필요 없는 경우파일 다운로드1
11462정성태3/14/201822487개발 환경 구성: 354. HTTPS 호출에 대한 TLS 설정 확인하는 방법 [1]
11461정성태3/13/201825082오류 유형: 454. 윈도우 업데이트 설치 오류 - 0x800705b4 [1]
11460정성태3/13/201817572디버깅 기술: 112. windbg - 닷넷 메모리 덤프에서 전역 객체의 내용을 조사하는 방법
11459정성태3/13/201818381오류 유형: 453. Debug Diagnostic Tool에서 mscordacwks.dll을 찾지 못하는 문제
11458정성태2/21/201819360오류 유형: 452. This share requires the obsolete SMB1 protocol, which is unsafe and could expose your system to attack. [1]
... 91  92  93  94  95  96  97  [98]  99  100  101  102  103  104  105  ...