개발 시스템 환경 구축의 개요
개발 호스트 구축 환경
사례 1
사례 2
사례 3
본 단원에서는 임베디드 리눅스를 대상으로하는 개발 시스템의 구축에 대한 설명입니다. 과연 임베디드 리눅스 시스템에서 운영되는 시스템을 개발하기 위해 개발환경을 어떻게 구축하는지에 대한 예와 구축에 필요한 항목에 대해 말씀 드리겠습니다.
PC에서 동작 되는 프로그램은 PC상에서 실행되는 컴파일러로 만들어 집니다. 이렇게 자신과 같은 환경에서 실행되는 프로그램을 만들어 주는 컴파일러를 특히 네이티브(Native) 컴파일러라고 합니다.
그러나 임베디드 리눅스가 설치된 보드에서는 시스템 리소스가 열악한 경우가 많아서 네이티브 컴파일러를 운영하기가 힘이 듭니다. 그래서 환경이 좋은 PC 개발 호스트를 구축하고 그 개발 호스트에서 만들어진 프로그램을 임베디드 리눅스 장비로 다운로드를 한 후에 프로그램을 실행하게 됩니다.
이렇게 다른 환경에서 실행되는 프로그램을 만들어 주는 컴파일러를 크로스(Cross) 컴파일러라고 합니다. 그러므로 임베디드 리눅스에서 실행되는 시스템을 개발하기 위해서는 크로스 컴파일러를 운영할 수 있는 개발환경을 구축해야 하며 일반적으로 리눅스를 이용하여 개발 호스트를 구축합니다.
개발 호스트로서 갖추어야할 내용을 정리해 보면 아래와 같습니다.
- 크로스 컴파일러를 운영할 수 있는 개발환경
- binutil , gcc, glibc 또는 newlibc
- FALinux 에서 제공하는 크로스 컴파일러 툴체인 환경
- 시리얼 에뮬레이터 minicom
- tftp 서버
- nfs 서버
- samba 서버
- 커널 소스
- 램디스크 이미지 ( 기본적인 것 )
- vi 에디터
이와 같은 내용을 담아 개발 호스트 환경을 구축하는 방법에도 아래와 같이 크게 3가지로 나눌 수 있습니다.
- 사례 1: 리눅스 개발 호스트 + 시리얼 케이블만 사용
- 사례 2: 리눅스 개발 호스트 + 이더넷을 이용한 LAN 네트워크 구축
- 사례 3: 리눅스 개발 호스트 + 윈도즈 작업 환경 + 이더넷 LAN network 구축
이중 가장 추천하는 방식은 "사례 3" 입니다.
항목 내용 개발 호스트 리눅스 PC 플래시 써 넣기 JTAG 터미널 시리얼 사례 1 은 최소한 비용과 규모의 개발환경으로 개발 호스트로 리눅스 OS를 설치해서 크로스 컴파일 개발 환경을 구축합니다. 가장 초기에 부트 이미지를 써 넣기 위해서 는 JTAG를 사용합니다. 그러나 JTAG의 처리속도는 매우 느리므로 개발 보드에서 부트로더가 동작 한 이후에는 리눅스 개발 호스트에서 만들어진 실행 파일 및 필요 파일은 시리얼을 통해 다운로드한 후 실행합니다. 이때 사용 가능한 프로토콜은 이지부트를 사용했을 경우에는 ZMODEM 프로토콜입니다.
이 사례를 이용한 개발 순서는 아래와 같습니다.
항목 내용 개발 호스트 리눅스 PC 플래시 써 넣기 JTAG 터미널 시리얼 다운로드 네트워크 이 구성은 가장 일반적인 구축 예입니다. 개발 호스트로 리눅스 OS를 설치하고 크로스 컴파일 개발 환경을 구축합니다. 가장 초기에 부트 이미지를 써 넣기 위해서는 JTAG를 사용합니다. 그러나 JTAG의 처리속도는 매우 느리므로 개발 보드에서 부트로더가 동작 한 이후에는 이더넷을 이용한 네트워크 통해 개발 호스트에서 보드로 파일을 다운로드합니다.
이때 사용되는 것이 bootp와 tftp이며, bootp 는 개발보드의 IP를 받아 오기 위해서 사용되는 프로그램이고 tftp는 실제 파일 이미지를 가져 오기 위해 사용하는 프로그램입니다.minicom은 장비에 동작하는 부트로더에서 표출하는 메시지를 보거나 명령을 수행시키기 위한 환경으로 사용됩니다. 또한 임베디드 장비가 리눅스로 부팅한 후에 콘솔 창으로 사용됩니다.
nfs는 장비에서 동작하는 리눅스 커널이 동작한 후에 임베디드 장비에는 대용량 보조 기억 장치가 없으므로 호스트와 파일을 공유하여 보조 기억 장치로 사용하기 위해서 이용됩니다. 즉, 임베디드 장비에서 리눅스 호스트의 일부 영역을 자신의 리소스로 이용하게 됩니다.
이 사례를 이용한 개발 순서는 아래와 같습니다.
항목 내용 개발 호스트 리눅스 PC 작업 PC Microsoft Windows PC 플래시 써 넣기 JTAG 터미널 시리얼 다운로드 네트워크 이 구성이 가장 추천하는 구축의 예입니다. 개발 호스트로 리눅스 OS를 설치하고 크로스 컴파일 개발 환경을 구축합니다. 그러나 작업은 Microsoft Windows(이하 MS윈도우) PC에서 합니다. 즉, 프로그램을 작성하고 컴파일하고 디버깅하는 모든 작업을 MS 윈도우 PC에서 하며, 리눅스 개발 호스튼 파일 공간과 컴파일러를 제공해 줍니다.
가장 초기에 부트 이미지를 써 넣기 위해서는 JTAG를 사용합니다. 그러나 JTAG의 처리속도는 매우 느리므로 개발 보드에서 부트로더가 동작 한 이후에는 실행 이미지를 다운로드하기 위해서 이더넷 을 이용한 네트워크상에서의 다운로드를 수행합니다.
이때 사용되는 것이 bootp와 tftp이며, bootp 는 개발보드의 IP를 받아 오기 위해서 사용되고, tftp는 실제 이미지를 가져 오기 위해 사용됩니다.
MS윈도우에서 터미널 에뮬레이터( 하이퍼 터미널, 새롬 데이터맨 프로 등등)를 이용하여, 장비의 부트로더에서 표출하는 메시지를 보거나 명령을 실행 시킵니다. 또한 임베디드 장비가 리눅스로 부팅한 후에는 MS윈도우의 터미널 프로그램으로 콘솔로 사용하게 됩니다.
nfs 는 장비에서 동작하는 리눅스 커널이 동작한 후에 임베디드 장비에는 대용량 보조 기억 장치가 없으므로 호스트와 파일을 공유하여 보조 기억 장치로 사용하기 위해서 필요합니다. 즉, 임베디드 장비에서 리눅스 호스트의 일부 영역을 자신의 리소스로 이용하게 됩니다.
삼바는 개발 호스트 인 리눅스 머신과 MS윈도우와의 파일을 공유하기 위해서 사용됩니다. 대부분의 작업은 MS윈도우에서 진행하며 리눅스는 컴파일 및 개발장비에 이미지 전송을 하기 위해서 사용됩니다. 또한 MS윈도우에서 리눅스의 제어명령을 수행하기 위해서 텔넷 프로그램이나 Xmanager, Exceed와 같은 X 클라이언트 프로그램을 사용합니다.
사례 3 과 같은 구성이 나온 이유는 우리나라 대부분의 개발자가 MS윈도우 환경에 익숙하기 때문으로 애용하는 에디터와 익숙한 웹 브라우저를 사용할 수 있다는 장점이 있기 때문입니다.
이 사례를 이용한 개발 순서는 다음과 같습니다.