본문 바로가기
[Public] 임베디드/Linux

[Linux] 임베디드 시스템의 개발환경 타입

by 차출발 2010. 12. 7.
반응형

2010. 12. 07


오늘 부터 임베디드에 입문하게 되었다.
젠장 ㅡ,ㅡ 먼소리인지 도대체 통 감이 안온다.
하루하루 한개식 알아가는 식으로 공부해 보고자 한다.


임베디드 시스템에서 개발환경 타입은 크게 3분류로 나누어 진다.

1. 호스트 타입
2. 호스트 / 타겟 개발 셋업 타입
3. 호스트 / 타겟 디버그 셋업 타입


이 각각의 타입에 대해서 자세히 한번 알아보자


1. 호스트 타입

임베디드 리눅스 타겟에서 가장 흔히 볼수 있는 타입이라고 한다.
일반적으로 사용되는 호스트(리눅스, 유닉스, 윈도우)에 대해서 알아보자


1) 리눅스 워크스테이션

임베디드 리눅스 시스템 개발에 가장 일반적이다.
말 그대로 리눅스가 들어가서?
우리는 보통 윈도우 환경을 많이 사용하기 때문에 리눅스에 익숙하지 않다.
그래서 이런 리눅스 시스템을 개발할려면 리눅스를 매일 사용하라고 권유한다.

이 리눅스 호스트에는
데비안(Debian), 맨드레이크(Mandrake), 레드헷(RedHat), 수세(SuSE), 옐로우 도그(Yellow Dog)등
표준 리눅스 배포판이 있다.

보통 우리는 레드헷을 많이 사용할 것이다.
임베디드 시스템을 개발하기 위해서 배포판을 굳이 사용안해도 된다.
가장 빠르고 가장 최신의 하드웨어 에서 작업에 맞추어서 사용하라


2) 유닉스 워크스테이션

상황에 따라 전통적인 유닉스 워크스테이션에서 작업하는 경우도 빈번하게 발생한다.
예를 들자면 솔라리스(Solaris) 워크스테이션은
전자통신 솔루션 개발자들 사이에서 가장 일반적인 개발환경이다.

리눅스를 많이 사용하지만 유닉스로도 얼마든지 작업이 가능하다.
리눅스가 유닉스와 상당히 유사하기 때문에 대부분 적용이 된다.



3) 윈도우 워크스테이션 (2000, NT, 98계열)

십여 년 전에 임베디드 시스템 개발은 윈도우 워크스테이션으로 이동해갔다.
그때부터 많은 개발자들이 윈도우 플래폼 작업에 익숙해졌고
새로운 개발자들로 윈도우 환경에서 시작하게 된것이다.

이로 인하여 리눅스 시스템 개발시 윈도우 워크스테이션을 사용하기 시작하였다.

윈도우 플랫폼에서 처음 작업시 가장 큰 문제는 GNU개발 툴체인을 사용할 수 없다는것이다.
그러나 레드햇이 윈도우와 호환가능한 GNU툴체인인 Cygwin환경을 제공하였고
몇몇 사람이 이를 이용해 크로스 플랫폼 툴을 빌드하기에 실제로 문제가 되지 않는다.

윈도우 워크스테이션을 하는 수 없이 사용하고 리눅스 타겟 개발을 위해 리눅스에서 작업을 원하면 VMWare나 Connectix 와 같은 가상 소프트웨어를 사용하는 것이다.
이렇게 해서 윈도우를 메인 워크스테이션으로 사용한다는 것이다.

여기서 QT가 나오고 한것인가 하는 의문이 생긴다.



다음으로

2. 호스트 / 타겟 개발 셋업 타입

말 그대로 호스트 타로 타겟 따로이다.
임베디드 리눅스 시스템을 개발시
세가지의 호스트 타겟 아키텍쳐를 사용할 수 가 있다.

연결 셋업
이동식 스토리지 셋업
독립 셋업

방법에 따라 셋업이 하나의 범주에도 속하고 심지어 시간에 따라 범주가 변하기도 한다.



1) 연결셋업

물리적인 케이블을 이용해 타겟과 호스트를 연결할 때 주로
직렬 케이블이나 이더넷 링크를 많이 사용한다.




타겟과 호스트 사이에 스토리지 장치없이 모든 전송을 링크를 통해서 한다는 것이다.
그러면 프로그램을 매번 수정시 스토리지가 없기 때문에 매번 전송이 필요하다는 것인데

커널은 TFTP(Trivial File Transfer Protocol)를 통해서
루트 파일 시스템은 NFS 마운트를 해서

이는 타겟에서 원격 컴포넌트를 이용해 문제 해결이 가능하기 때문에 쉽게 개발이 가능하다.

연결 셋업은 가장 일반적인 방법으로 물리적인 링크를 이용해 디버깅도 가능하다.
그러나 호스트/타겟 셋업 타입을 곧 배우겠지만 디버깅 용도로 다른 링크를 두는게 훨신 일반적이다고 한다.

예를 들면
이더넷과 RS232 링크 기능이 있는 임베디드 시스템은 이더넷 링크는 실행 가능한 이미지나 커널 그리고 루트 파일시스템,
호스트와 타겟사이에 데이터 전송속도가 빠를수록 좋은 큰 아이템등에 사용되고
RS232 는 디버깅을 위해 사용된다고 한다.



2) 이동식 스토리지 셋업

이 셋업에서는 호스트와 타겟사이에 물리적인 링크가 없다.
대신 호스트가 스토리지 장치에 쓴 것이 타겟으로 옮겨져 부팅하는데 쓰인다.




연결 셋업과 비교하자면
호스트에 크로스 플래폼 개발환경이 있다는 점만 같지만 그와 달리
타겟에는 부트로더만 존재한다.
나머지는 컴포넌트는
컴팩트플래시(IDE) 장치나 다른 타입의 드라이브등 이동식 스토리지 매체에 저장되는데
이는 호스트에서 프로그래밍되어 시스템 시작시 타겟의 부트로더에 의해 로드된다.

사실 타겟에는 어떠한 형태든 영구적인 스토리지가 없어도 된다.
이동식 스토리지 셋업은 임베디드 시스템 개발의 초기단계에서 매우 유용하다.
하지만 일반 초기 개발단계가 끝나면 연결셋업으로 바꾸는 것이 커널이나 루트 파일시스템이 변경될때마다
타게과 호스트 사이에서 물리적인 장치를 옮기 필요가 없기 때문에 훨신 효율적이다.


3) 독립 셋업

이 셋업에서는 타겟이 독립 개발 시스템의 역할을 하기 때문에
부팅과 운영 다른 소프트웨어를 개발하기 위해 필요한 소프트웨어를 모두지니고 있다.



이 셋업은 본질적으로 실제 워크스테이션과 비슷하고 작업하고자 하는 하드웨어가 보통의 워크스테이션이 아니라
임베디드 시스템 자신이라는 점만 나타낸다.

모든 개발 툴이 네이티브 환경에서 동작하기때문에 크로스 플랫폼 개발환경이 필요없다.
게다가 스토리지가 타겟에 모두 존재하므로 스토리지의 이동이 필요없다.

이 셋업은 임베디드 시스템에서 표준 리눅스 배포판을 사용할 수 있기에 고가용성 시스템과 같은 고사양 PC 기반의
임베디드 시스템을 구축하는 개발자에 적합하다

개발하고 나면 배포판중 필요없는 부분을 줄이고 용도에 맞게 커스터마이징한다.
이방법을 사용하면 개발자들이 자신의 루트 파일스스템을 빌드하고 시스템 시작의 환경설정을 직접 할수는 있지만
사용하는 배포판에 대해 자세히 알아야한다.




마지막으로

3. 호스트 타겟 디버그 셋업 타입


디버깅을 목적으로 호스트에 타겟을 연결할때 사용하는 인터페이스는 크게 세 가지 타입으로 나뉜다.

직렬라인
네트워킹 인터페이스
특수한 디버깅 하드웨어

디버깅 인터페이스는 자신만의 장점 및 응용 범위를 지닌다.

1) 직렬라인

직렬라인은 하드웨어가 간단할 뿐만아니라 시스템에서 쉽게찾아볼수 있다.
그러나 문제점 역시 생기기 마련이다.

문제점을 보면 대부분의 직렬 링크의 속도에는 제한이 있다는점
임베디드 시스템에서 직렬 포트가 하나만 있거나

직렬 링크가 임베디드 시스템의 유일한 외부 인터페이스면 터미널 에뮬레이터를 사용해
시스템과 대화를 하면서 디버깅이 불가능하다.
이런 경우는 원격 커널 디버거를 사용해서 커널 시작과정을 디버깅 할 때는 커널이 부팅을 완료때까지 타겟에서 쉘이 동작하지 못하므로 터미널 에뮬레이터가 필요 없는 경우에만 많이 사용된다.



2) 네트워킹 인터페이스

이더넷을 통한 TCP/IP 같은 네트워킹 인터페이스를 사용하면 직렬 링크에서보다 훨신 더 큰 대역폭을 얻을수 있다.
게다가 타겟과 호스트가 하나의 물리적 네트워크 링크를 통해 많은 네트워킹이 가능하기에 대화와 동시에 디버깅이 가능하다.

물론 터미널 에뮬레이터를 사용하여 임베디드 시스템의 직렬 포트를 통해
타겟과 대화하는 동시에 네트워킹 링크를 통해 디버깅도 가능하다.

하지만 네트워킹을 사용한다는 것은  네트워킹 스택이 이미존재한다는 것인데
네트워킹 스택은 리눅스 커널에 있으므로 커널 자체를 디버깅할 때는 네트워킹 링크를 사용할 수 없다.
따라서 커널 디버깅은 직렬로 통해서 한다.



3) 디버깅 인터페이스

직렬 이나 네트워킹을 이용하려면 타겟에 최소한의 소프트웨어가 가추어져 있어
가장 기본적인 입출력 하드웨어를 다루어야한다.
그러나 리눅스를 새로운 보드에 포팅하거나 커널 자체를 디버깅 할 경우에는 이 가정이 맞지 않다.

그래서 이런 경우 소프트웨어 상에서 하드웨어를 직접 제어할 수 있는 디버깅 인터페이스를사용해야한다.
이와 관련된 몇가지 방법(BDM, JTAG)이 있으나 대부분 비용이 많이 든다


이게 전체적이 개념이다.
처음이라 전체적인것을 이해하기 어려울 것이다
앞으로 하나하나식 차근차근 나아가고
나중에 이글을 보면 이해하기 쉬울것이다.









도움이 되셧다면 리플하나 남겨주세요 !

큰 힘이 된답니다 *^^*