저자: GNOME Linux Institute :: HEAD 임영규 { limlinux@hanmail.net }
최근 상당한 발전을 거듭하고 있는 임베디드 리눅스의 기본 개념에 대하여 간단히 논한다. 임베디드 리눅스를 처음 배우고자 하는 이들에게 도움이 될 것이며, 기본 모델에 대한 이해를 도울 수 있으리라고 본다. 임베디드 리눅스 시스템을 개발하기 위해서는 우선 개발 환경에 대한 이해를 하여야 한다. 이러한 개발 환경은 다음과 같이 구분할 수 있다.
호스트(Host) 타입
호스트(Host)/타겟(Target) 타입
호스트(Host)/디버그(Debug) 셋업 타입
호스트 타입
임베디드 리눅스에서 가장 많이 사용하고 있는 호스트 타입에 대한 설명과 유용성에 대하여 알아본다. 호스트 타입 개발 환경은 다음과 같이 나뉘어 진다.
리눅스 워크스테이션
유닉스 워크스테이션
윈도우 워크스테이션
리눅스 워크스테이션 모델의 호스트 타입 개발 환경을 위해서는 개발 환경이 리눅스인 점을 감안하여 사용자는 리눅스에 익숙해져야 한다. 따라서 호스트에선 데비안, 맨드레이크,레드햇,수세,옐로우 도그등의 배포판을 사용할 수 있다. 유닉스 워크스테이션 모델의 경우 유닉스 환경에서 임베디드 시스템에 사용할 프로그램을 개발하는 것이다. 윈도우 플랫폼에서 작업하기 위해서는 GNU 툴체인 사용 할 수 없다는 담점이 있다. 그러나 최근에는 Cygwin환경을 제공하고 있기 때문에 이를 이용하여 크로스 플랫폼을 빌드할 수 있다. 또는 VMWARE, Connectix와 같은 에뮬레이션 프로그램을 이용하여야 한다.
호스트/타겟 개발 셋업 타입
호스트 컴퓨터와 개발 타겟을 물리적인 케이블로 연결하여 임베디드 리눅스 시스템을 개발 하는것을 말한다. 이 환경에는 다음 3가지로 나눌 수 있다.
연결 셋업
이동식 스토리지 셋업
독립셋업
연결 셋업 환경의 가장 큰 특징은 호스트와 타겟 사이에 저장 장치를 옮기지 않고 물리적인 케이블을 이용하여 옮긴다는 것이다. 따라서 호스트에서 크로스 플랫폼을 개발하는 환경이 있고, 타겟에는 부트로더, 커널, 루트파일 시스템이 있다. 이 경우 타겟에서 필요로 하는 데이터, 즉 부트로더, 커널, 루트파일 시스템을 옮기기 위하여 ehter net RS232 링크 기능을 사용할 수 있따. LAN을 이용한 tftp, nfs를 통한 마운트를 이용하는 방법이 있고 RS232C의 경우 주로 디버깅 용도로 사용한다.
[그림 1]은 호스트/타겟 연결 셋업을 나타내고 있다.
[그림 1] 호스트/타겟 연결 셋업
이동식 스토리지 셋업은 연결 셋업과 달리 무릴적인 링크가 없다. 대신 호스트 스토리지 장치에 쓴것이 타겟으로 옮겨져 부팅하는데 쓰인다. 이 환경은 단지 타겟에 부트로더만 존재한다. 따라서 일단 초기 개발 단계가 끝나면, 연결 셋업으로 바꾸어 커널이나 루트 파일 시스템이 변경될 때마다 타겟과 호스트 사이에서 물리적인 장치를 옮길 필요가 없기 때문에 훨씬 효율적이다.
마지막으로 독립 셋업은 모든 개발 환경을 타겟보드 자체에 갖추고 있는 모형이다. 따라서 개발자들이 자신의 루트 하일 시스템을 빌드하고 시스템 시작의 환경 설정을 직접 할 수 있으나, 사용하는 배포판에 대하여 자세히 알고 있어야 한다.
호스트/타겟 디버그 셋업 타입
타겟의 내용을 디버깅 할 목적으로 사용하는 인터페이스 환경이다. 이 환경은 크게 다음 3가지로 구분된다.
직력라인 인트페이스
네트워킹 인트페이스
특수 디버깅 하드웨어
직렬라인 인트페이스를 사용하는 방식은 가장 간단한 방법이다. 그러나 호스트와 링크 속도에 제한을을 받는다는 단점이 있고, 타겟에 직렬포트가 있어야 한다는 것이다. 직렬 링크의 경우 터미널 에뮬레이트를 이용하여 타겟의 내용을 수정 할 수 있다.
네트워킹 인터페이스는 이더넷을 이용한 디버깅이다. 이것은 직렬 링크에 비하여 많은 장점이 있다. 호스트와 타겟이 터미널을 통하여 정보를 교환 할 수 있으며, 동시에 디버깅이 가능하다는 장점이 있다. 또 이것의 반대 기능도 가능하다.
특별한 하드웨어를 이용하는 디버깅 방법은 BDM, JTAG 인터페이스를 이용하는 방법이다. 이들 인터페이스는 CPU 실리콘 내에 내장된 BDM이나 JTAG에 의존하는데, CPU의 BDM이나 JTAG핀에 특수한 디버그를 연결하는 것으로 제어할 수 있다. 하지만 가격이 비싸고, CPU 제조 업자들이 상세한 정보를 제공하지 않는 단점이 있다. 이러한 인터페이스는 직렬 또는 이더넷 인터페이스를 이용한 디버깅이 불가능할 때 매우 유용하게 디버깅 할 수 있다. ARM CPU는 BDM을 지원한다. 참고로 BDM은 Background Debug Mode이며 JTAG는 Joint Test Action Group의 약자이다.
호스트와 타겟을 연결하기 위해서는 minicom, C-Kermit, TFTP, NFS르 이용한다. 이상으로 간단하게나마 임베디드 리눅스 시스템 개발 환경에 대하여 알아 보았다. 다음으로 임베디드 개발 환경에 아주 유용하게 사용 할 수 있는 esto를 소개하고자 한다.
VisualEsto는 Qplus-P 임베디드 운영체제 상에서 수행되는 응용 소프트웨어 개발을 위한 통합 개발 환경을 말한다. Qplus는 임베디드 리눅스를 기반으로 하는 프로세스 기반의 임베디드 운영체제이며, GUI 기바느이 통합 개발 환경으로서 리눅스와 윈도우 호스트를 지원한다. 또한 임베디드 응용 프로그램 개발자가 호스트 상에서 소트작성, 컴파일,실행, 디버깅, 모니터링을 하나의 단일화된 통합 환격에서 수행할 수 있도록 하여 사용자에게 응용 프로그램 개방의 용이성을 제공해 준다.
Esto의 구조는 다음 2가지로 나누는데, 우선 타겟, 즉 개발 보드쪽에서는 실시간 운영체제를 기반으로 라이버러리, 타겟 에이전트, 타겟 응용프로그램이 포함된다. 호스트쪽에서는 리눅스/윈도우 운영체제를 기반으로 호스트 에이전트, 타겟빌드, 크로스 컴파일 툴 체인, 프로젝트 관리자, 원격 쉘, 원격 디버그, 원격 모니터, 전력 소모 특정기등의 응용 개발 도구들로 구성된다. Esto를 설치하기 위한 시스템 환경은 다음과 같다.
호스트 : redhat 7.2이상, KDE 환경
타겟 : x86 또는 ARM프로세스 보드
연결 : 이더넷, 시리얼
호스트 : bootpd, dhcpd 서버, tftp서버, nfs 동작
사용자 환경 셀의 설정은 다음과 같다.
~/.bashrc 파일
export VISUAL_QPLUS=/opt/VisualEsto
export PATH=$VISUAL_QPLUS/bin:$VISUAL_QPLUS/cdt/bin:$PATH
export LD_LIBRARY_PATH=$VISUAL_QPLUS/lib:$LD_LIBRARY_PATH
로 설정한다.
Esto는 두가지의 교차개발 환경을 지원하는데, 두대의 리눅스 시스템을 이용하는 경우이며, 다른 하나는 한대의 리눅스 시스템을 사용하는 경우이다. 이때 각 호스트 및 타겟의 CPU 플렛폼은 x86이다.
[그림 2]와 [그림 3]은 visualesto 설치 파일과 esto의 통합 개발환경 스크린 샷이다.
[그림 2] 설치 파일
[그림 3] esto IDE 실행화면
임베디드 리눅스 시스템에 대한 기본 개념과 개발 모형에 대하여 알아보았다. 또한 소개된 VisualEsto를 이용한 실제 Test 환경도 소개하였다. 현재 리눅스를 이용한 임베디드 리눅스 시템은 나날이 많은 발전을 거듭하고 있다. 따라서 임베디드 리눅스 시스템을 개발하고자 하는 많은 이들에게 도움이 되리라 생각한다.
참고문헌
임베디드 리눅스 시스템 구축하기(한빛미디어, 카림 야크무르 저, 김태석 역)
ESDP 표준교재(한국정보통신인력개발센터 저)
http://esto.etri.re.kr