본문 바로가기

Hacked Brain/embeddedland.net

임베디드 개발자 입문-4

 http://cafe.naver.com/devctrl/67
임베디드 개발자 입문-4
  저 자 : 박철
  출판일 : 2004년 1월호

  부트로더 제작
<그림 5>와 같이 일반적으로 부트로더라 하면 일반 x86 리눅스에서는 LILO를 많이 사용할 것이다. LILO란 Linux Loader로서 DOS나 윈도우 NT, 리눅스 등 다른 OS를 선택적으로 부팅할 수 있도록 하는 기능을 제공한다. LILO는 하드디스크의 MBR에서 동작하는 프로그램으로 OS가 실행할 수 있도록 점프하는 기능을 수행한다.
사용자 삽입 이미지


<그림 5> LILO와 X-boot250과 비교

그럼 우리가 사용하는 x-boot250이란 부트로더는 플래시 0 블럭에서 실행되고 여러 가지 다양한 기능들을 수행한다. 먼저 커널이나 램디스크(ramdisk) 등의 데이터를 호스트로부터 SDRAM 영역으로 다운로드할 수 있는 기능이 있고 SDRAM에 있는 데이터를 플래시 영역으로 라이팅할 수도 있다. 그리고 커널이 이미 올라가 있다면 부팅할 수 있는 기능도 같이 제공한다. 부트로더의 기능을 요약해보면 다음과 같다.

부트로더 기능
◆ 하드웨어의 초기화 : 부트로더에서 제일 먼저 실행, CPU, 속도, 메모리, 인터럽트, UART 등을 초기화해 준다.
◆ 리눅스 부팅 : 부트로더 상에서 리눅스를 부팅하는 기능이 있다.
◆ 커널 또는 램디스크 다운로드 : 부트로더의 가장 중요한 기능인 커널이나 램디스크 이미지를 다운로드하는 기능이 있다. 호스트 상에서 컴파일된 이미지를 시리얼이나, tftp를 이용해 이더넷을 통해 SDRAM 상으로 다운로드가 가능하다.
◆ 다운로드한 커널 및 램디스크를 플래시에 라이트 : 다운로드한 커널과 램디스크 이미지는 SDRAM 상에 있기 때문에 전원이 꺼지면 다운로드한 이미지는 날라가 버린다. 그러므로 플래시 기능을 통하여 SDRAM 상의 커널과 램디스크를 지정된 플래시 주소 영역에 라이팅하는 기능이다.
◆ tftp를 통한 SDRAM에 다운로드 : 시리얼을 통해 커널 등을 다운로드하기에는 속도가 너무 느리다. 그러나 tftp를 이용한 이더넷으로 다운로드할 수 있는 기능을 추가하여 고속으로 커널이나 램디스크를 다운로드할 수 있다.

임베디드 시스템 SW 개발과정
하드웨어가 제작되고 개발 환경이 구축되면, 다음으로 진행되는 과정은 <그림 6>과 같이 소프트웨어 개발 과정이다.

◆ OS 포팅(임베디드 리눅스 포팅)
◆ 디바이스 드라이버 제작
◆ TCP/IP 등 미들웨어 제작
◆ GUI 등 애플리케이션 제작
사용자 삽입 이미지


<그림 6> 임베디드 소프트웨어의 구조

OS 포팅(임베디드 리눅스 포팅)
타겟 보드에 부트로더가 올라가 있으면 이제는 커널을 이식하는 순서이다. 현재 전자밥솥에는 임베디드 리눅스를 포팅을 한다. 포팅에 필요한 내용은 다음과 같다.
우선 리눅스의 정식 버전을 어느 것으로 사용할 것인가 결정한다. 현재 포팅하려고 하는 리눅스 정식 버전은 2.4.18이다. 여기에 ARM 패치를 인가한다. 그리고 PXA255용 패치를 인가한다. 이 두 가지 패치는 일반적으로 공개되어 있다. 나머지 밥솥용 패치는 개발자가 개발을 하여 패치 처리를 해야 한다. 여기에는 밥솥용 타겟 보드의 특성에 맞는 리눅스 초기화 코드와 하드웨어에 있는 디바이스 드라이버가 추가된다. 이렇게 해서 개발된 리눅스 커널은 밥솥을 위한 전용 커널이 된다.

디바이스 드라이버 제작
다양한 하드웨어 장치를 구동시키기 위해서 운영체제는 장치 드라이버를 필요로 한다. 임베디드 리눅스는 디바이스 드라이버를 캐릭터, 블럭, 네트워크 디바이스 드라이버로 구분한다. <그림 3>의 임베디드 시스템 하드웨어 구조를 참조하여 디바이스 드라이버를 분리해 보면 다음과 같다.

◆ 캐릭터 디바이스 드라이버 : 히터 디바이스 드라이버 제작, 사운드 디바이스 드라이버 제작, LCD 디바이스 드라이버 제작, 터치 디바이스 드라이버 제작
◆ 블럭 디바이스 드라이버 : 여기서 블럭 디바이스 드라이버는 파일 시스템과 밀접한 관계를 가지고 있다. 밥솥용 임베디드 시스템에서는 파일 시스템을 플래시에 구현하였기 때문에 여기서 필요한 블럭 디바이스 드라이버는 플래시를 제어하는 디바이스 드라이버이다. 이를 흔히 MTD(Memoty Technology Device)라고 하며 임베디드 시스템에서는 매우 중요한 개념이다.
◆ 네트워크 디바이스 드라이버 : TCP/IP 제어를 받는 이더넷 디바이스 드라이버를 구현한다.
사용자 삽입 이미지


<그림 3> 임베디드 시스템 하드웨어 구조

TCP/IP 등 미들웨어 제작
또한 앞으로의 임베디드 시스템에서는 통신이 기본으로 자리를 잡게 될 것이다. TCP/IP를 기반으로 하는 프로토콜을 사용하여 임베디드 시스템이 다른 기기와 정보를 공유할 수 있다면 다양한 네트워크 서비스를 사용자에게 제공할 수 있다.

GUI 등 애플리케이션 제작
애플리케이션은 크게 다음과 같이 3가지로 볼 수 있다.

◆ 기본 기능 : 밥솥의 본 기능
◆ 부가 기능 1 : TCP/IP를 이용한 통신 기능
◆ 부가 기능 2 : LCD를 이용한 GUI 기능

이 시스템의 가장 기본 기능은 밥솥의 기능이다. 이를 하나의 프로세스에 할당하여 애플리케이션을 제작한다. 그리고 TCP/IP를 통해서 각종 네트워크 기능을 구현한다. 마지막으로 GUI 기능을 제공한다. 임베디드 시스템에서는 대부분 제한된 크기의 디스플레이를 사용하고 있으며 이러한 장치에서 텍스트, 그래픽 및 영상을 표시하기 위해서는 특별한 GUI 기술이 필요하다. 현재 널리 사용되고 있는 내장형 시스템 GUI 기술들(타이니 X, 피코구이, Qt, 마이크로윈도우)이 적용되어 텍스트, 그래픽, 영상 등을 사용자에게 제공한다.