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

비밀번호

댓글 작성자
 




... 61  62  63  64  65  [66]  67  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
12324정성태9/11/202018466개발 환경 구성: 514. smigdeploy.exe를 이용한 Windows Server 2016에서 2019로 마이그레이션 방법
12323정성태9/11/202018339오류 유형: 649. Copy Database Wizard - The job failed. Check the event log on the destination server for details.
12322정성태9/11/202021967개발 환경 구성: 513. Azure VM의 RDP 접속 위치 제한 [1]
12321정성태9/11/202017016오류 유형: 648. netsh http add urlacl - Error: 183 Cannot create a file when that file already exists.
12320정성태9/11/202019610개발 환경 구성: 512. RDP(원격 데스크톱) 접속 시 비밀 번호를 한 번 더 입력해야 하는 경우
12319정성태9/10/202018507오류 유형: 647. smigdeploy.exe를 Windows Server 2016에서 실행할 때 .NET Framework 미설치 오류 발생
12318정성태9/9/202017276오류 유형: 646. OpenVPN - "TAP-Windows Adapter V9" 어댑터의 "Network cable unplugged" 현상
12317정성태9/9/202021207개발 환경 구성: 511. Beats용 Kibana 기본 대시 보드 구성 방법
12316정성태9/8/202018820디버깅 기술: 170. WinDbg Preview 버전부터 닷넷 코어 3.0 이후의 메모리 덤프에 대해 sos.dll 자동 로드
12315정성태9/7/202021294개발 환경 구성: 510. Logstash - FileBeat을 이용한 IIS 로그 처리 [2]
12314정성태9/7/202021502오류 유형: 645. IIS HTTPERR - Timer_MinBytesPerSecond, Timer_ConnectionIdle 로그
12313정성태9/6/202021083개발 환경 구성: 509. Logstash - 사용자 정의 grok 패턴 추가를 이용한 IIS 로그 처리
12312정성태9/5/202028244개발 환경 구성: 508. Logstash 기본 사용법 [2]
12311정성태9/4/202020609.NET Framework: 937. C# - 간단하게 만들어 보는 리눅스의 nc(netcat), json_pp 프로그램 [1]
12310정성태9/3/202019863오류 유형: 644. Windows could not start the Elasticsearch 7.9.0 (elasticsearch-service-x64) service on Local Computer.
12309정성태9/3/202018525개발 환경 구성: 507. Elasticsearch 6.6부터 기본 추가된 한글 형태소 분석기 노리(nori) 사용법
12308정성태9/2/202020995개발 환경 구성: 506. Windows - 단일 머신에서 단일 바이너리로 여러 개의 ElasticSearch 노드를 실행하는 방법
12307정성태9/2/202021914오류 유형: 643. curl - json_parse_exception / Invalid UTF-8 start byte
12306정성태9/1/202018486오류 유형: 642. SQL Server 시작 오류 - error code 10013
12305정성태9/1/202020905Windows: 172. "Administered port exclusions"이 아닌 포트 범위 항목을 삭제하는 방법
12304정성태8/31/202019330개발 환경 구성: 505. 윈도우 - (네트워크 어댑터의 우선순위로 인한) 열거되는 IP 주소 순서를 조정하는 방법
12303정성태8/30/202019667개발 환경 구성: 504. ETW - 닷넷 프레임워크 기반의 응용 프로그램을 위한 명령행 도구 etrace 소개
12302정성태8/30/202019824.NET Framework: 936. C# - ETW 관련 Win32 API 사용 예제 코드 (5) - Private Logger파일 다운로드1
12301정성태8/30/202018822오류 유형: 641. error MSB4044: The "Fody.WeavingTask" task was not given a value for the required parameter "IntermediateDir".
12300정성태8/29/202019802.NET Framework: 935. C# - ETW 관련 Win32 API 사용 예제 코드 (4) CLR ETW Consumer파일 다운로드1
12299정성태8/27/202020188.NET Framework: 934. C# - ETW 관련 Win32 API 사용 예제 코드 (3) ETW Consumer 구현파일 다운로드1
... 61  62  63  64  65  [66]  67  68  69  70  71  72  73  74  75  ...