임베디드 리눅스 소프트웨어 개발의 빌드 환경 구축을 위한 글을 찾았습니다.
[http://wildduck.tistory.com/77] 을 글을 참조 합니다.
======================================
Technical Report
임베디드 리눅스 S/W
개발 생산성 향상을 위한 원격 빌드 환경 구축
2009.
12. 02 오화종
1. 들어가며
임베디드 리눅스 S/W 개발 환경은 일반적인 S/W 개발 환경에 비해 많은 제약을 갖는다. 특히, 타켓 장비와 개발 장비가 달라 크로스
컴파일러를 사용해야 하며, 개발 장비의 운영체제를 리눅스가 아닌 윈도우즈를 사용하면 소스 코드 에디팅은
윈도우에서 하고 컴파일은 리눅스 머신 또는 가상 리눅스 머신에서 해야 하는 불편함이 있다. 본 글에서는
오픈소스 IDE인 Eclipse와 리눅스의 Samba, SSH를 연동하여 마치 하나의 개발 장비에서 소스 코드 에디팅과 컴파일을 하고 컴파일 워닝 또는 오류
메시지를 IDE 상에서 비주얼하게 확인하는 방법을 소개한다. 이
원격빌드 환경을 구축하여 S/W를 개발하면 소스 코드 에디팅 결과를 빠르게 확인하고 처리할 수 있게
되어 전체적으로 개발되는 S/W의 품질 및 개발 생산성을 향상 시킬 수 있을 것이라 생각한다. 여기에 덧붙여 구축된 환경에서 이용 가능한 유용한 기능들을 간략히 소개한다.
2. 원격 빌드 환경 구축
최종 구성된 원격 빌드 환경은 그림 1 과
같이 크로스 컴파일러가 설치된 리눅스 빌드 서버와 Eclipse IDE를 실행하는 개발 PC, 타겟 단말기로 구성되며, 원격 에디팅 및 컴파일을 위하여 Samba와 SSH를 사용한다. 빌드서버의
경우 개발 PC와 분리된 리눅스 서버 또는 개발 PC에서
동작하는 가상 리눅스 서버가 사용될 수 있다. 최종 빌드된 바이너리는
ftp를 통하여 빌드서버에서 개발단말기로 전송되거나 serial 라인을 통하여 전송될 수
있다.

그림
n Eclipse CDT – C언어용 오픈소스 IDE.
http://www.eclipse.org 참조
n Samba – 리눅스 파일 시스템을 공유를 위한 유틸리티
n
SSH – Secure Shell. 암호화된
패킷을 송수신하는 안전성이 향상된 Telnet 버전
개발 PC에서는
빌드서버에서 Samba로 오픈한 디렉토리를 윈도우즈의 네트워크 드라이브로 잡은 후 그곳에 Eclipse CDT의 프로젝트를 생성하여 소스코드를 편집한다. 원격
빌드는 Eclipse CDT의 Make Target 실행시
SSH 원격 커맨드 실행을 수행하게 하여 빌드서버의 크로스 컴파일러를 실행시키고 그 결과를 받아와 IDE 화면에 표시하게 된다. 자세한 설정 과정은 아래와 같으며 본인이
사용하고 있는 Vmware Ubuntu 리눅스(가상 IP: 192.168.222.160)를 빌드서버로 하는 환경을 예로 설명한다.
①
리눅스의 Samba 설정
리눅스 서버에 Samba를
설치하고 설정파일 /etc/samba/smb.conf 을 그림 2 와
같이 수정한 후 /etc/init.d/smb restart 명령으로 Samba를 재구동하여 사용할 디렉토리를 오픈한다. 예제 에서는 편의상 전체 파일시스템을 오픈하였다.

그림
2
②
윈도우즈의
네트워크 드라이브 설정
위에서 공유된
리눅스 파일 시스템을 윈도우즈에서 네컴퓨터 à 도구 à 네트워크 드라이브 연결을 선택하여
네트워크 드라이브로 잡는다. 예제 에서는 Z 드라이브, \\192.168.222.130\root 를
네트워크 드라이브로 잡았다. 이렇게 하면 윈도우에서 리눅스 파일시스템을 마치 로컬디스크 처럼 사용할
수 있게 된다.
③
SSH 설정
리눅스 서버에 SSH를
설치한 후 개발PC 사용자의 공개키를 저장한다. 이것은 원격
빌드를 위하여 개발 PC의 Eclipse CDT 에서 SSH를 사용하는데 매번 아이디/패스워드를 입력하지 않게 하기 위함이다.
n 공개키 생성
그림 3 과
같이 cygwin의 ssh-keygen 명령으로 공개키를
생성한다. (cygwin의 openssh 패키지)
공개키는 /home/administrator/.ssh/id_dsa.pub 파일로 생성되었다.

그림
3
n 빌드서버에
공개키 복사 및 인증키 목록 갱신
위에서 생성된 공개키 파일을 빌드서버의 /root/.ssh 폴더에
복사한 후 인증키 목록 추가를 위해 그림 4 와 같이 ssh-copy-id
명령을 실행한다. 여기서
root@192.168.222.130 부분은 ‘접속계정@호스트이름’ 형식이다.

그림
4
④ Eclipse CDT 프로젝트 설정
n 프로젝트
생성
Eclipse를 실행시킨 후 그림 5 와 같이 메뉴 à 파일
à NEW à C Project 를 선택하여 프로젝트를 생성한다. 이때 생성 위치는 네트워크 드라이버로 잡은 빌드서버의 디렉토리로 한다.

그림
5
n 시스템 함수
검색을 위한 시스템 헤더파일 위치 설정
메뉴 à Project à C/C++ General à Paths and Symbols 를 선택하여 그림 6 과 같이 리눅스 빌드서버에 설치 되어 있는 크로스 컴파일러가
사용하는 시스템 헤더파일 위치를 설정한다.

그림
6
n 테스트 프로그램
작성
개발할 프로그램을 작성한다. 예제 에서는 그림 7 과 같이 간단한 프로그램을 작성하였다.

그림
7
n Makefile 파일 작성
작성된 프로그램을 빌드하기 위한 Makefile을 그림 8 과
같이 만든다. 컴파일 옵션으로 -W -Wall 을 주어 최대한
컴파일러 워닝 레벨을 높인다.

그림
8
⑤ Eclipse CDT Make Target 설정
SSH 원격 커맨드를 실행 하기 위하여 아래와 같이 Make Targets 창에서 all 타겟을 설정 한다. 그림 9 와
같이 메뉴 à 윈도우 à Show View 를 선택하여 Make Target 창을 뛰운 후 새로운 타겟을 설정한다. 이때 Build Command 항목에 SSH 원격 커맨드 실행 명령을 넣는다. 만약 시스템간의 locale 설정이
문제된다면 해당하는 locale이 반영 되도록 설정한다. 예제에서는
다음과 같이 설정 하였다.
ssh root@192.168.222.130 ‘export LANG=C; make -C
/workspace/RemoteBuildTest’

그림
9
⑥ 원격
빌드 시연
n 원격 빌드
이제 모든 준비가 완료 되었다. 설정된 Make Targets 아이콘인 all을 더블클릭 하면 프로그램이
컴파일 되어 바이너리 파일이 아래와 같이 생성된다. 컴파일된 바이너리는 개발 PC가 아닌 리눅스 빌드서버에 생성된다. Eclipse CDT 에는
기본적으로 elf 바이너리 파서가 있어 빌드된 바이너리 이미지를 그림 10 과
같이 쉽게 분석할 수 있다.

그림
10
n 컴파일 워닝
및 오류 메시지 확인
그림 11 은 워닝 및 오류 메시지 확인을 위하여 소스수정후 원격 빌드한
결과이다. 해당 메세지가 IDE 화면에 비주얼하게 표시되는
것을 볼수 있다. 오류와 워닝 메시지가 구별되어 표시되며 쉽게 위치를 확인 할 수 있다.

그림
11
3. Eclipse에서 사용 가능한 유용한
기능
위와 같이 Eclipse CDT 로 원격 빌드환경을 구축하면 추가적으로 Eclipse 및 연동 툴이 제공하는 유용한 기능들을 이용할 수 있다. 주요한
기능은 아래와 같다. 또한, Eclipse CDT 오픈소스
프로젝트는 국제적인 Eclipse 제단의 관리하에 매년 정규 릴리즈를 하고 있어 앞으로도 유용한 기능들이
빠르게 추가 보완 될 것으로 예상된다.
n CVS 및 SVN 연동
n 강력한 소스 브라우징
n 자동 리팩토링
n 자동 인덴테이션
n 원격 디버깅
n 버그 및 테스크 관리
위와 같은 여러 기능 및 도구들을 이용하면 일반 PC의 어플리케이션을 개발하는 것과 버금가는
편리한 환경을 구축 할 수 있다. 필자가 제안하는 임베디드 리눅스
S/W 개발용 통합 개발환경의 구성도는 그림 12 와 같다. 여러가지 다소 지루한 작업들을 자동화 시켜 프로그램 개발에 집중할 수 있고
이에 따라 개발 생산성 및 품질을 향상 시킬수 있을 것이라 생각한다.

그림
12
4. 마무리
임베디드 리눅스 S/W 개발 환경은 일반적인 개발 환경에 비하여 많은
제약이 있다. 하지만 최근 Eclipse 등의 유용한 개발
도구들이 임베디드 환경에서도 사용될 수 있도록 꾸준히 진화하고 있다. 이러한 툴들을 적절히 연동하여
사용하면 좀더 편리하고 자동화된 환경을 갖추어 S/W 개발 생산성 및 품질 향상에 도움이 될 것이라
생각한다. 본 보고서에서는 그중에 한가지인 원격빌드 환경을 구축하는 방법을 소개 하였다. 최근 급격하게 진화하고 있는 이러한 도구 및 기술들을 받아들이고 적절히 적용 시키는 것도 임베디드 S/W 개발에 중요한 요소가 아닐까 생각한다.