본문 바로가기

Hacked Brain/embeddedland.net

임베디드 개발자 입문-1

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

  2000년대는 포스트 PC, 즉 임베디드 시스템의 시대라고 해도 과언이 아니다. 많은 임베디드 시스템의 사양이 32비트 프로세서를 사용하는 시스템으로 급격히 변화되고 있다. 특집 1부에서는 임베디드 개발자가 되기를 원하는 독자들을 위하여 임베디드 분야와 다른 분야의 차이점이 무엇이며, 임베디드 개발 자체가 무엇인가와 임베디드 개발자가 되기 위해서 무엇을 준비해야 하는가를 설명하고자 한다.

박철 | pc@hybus.net
임베디드 기반의 개발과 특히 임베디드 교육에 많은 관심을 가지고 있으며, 이에 대한 사업화 방안에 관해 항상 고심하고 있는 사람이다. 실제 강의 현장에서 수강생들과 함께 호흡하는 걸 좋아하며 지인들과의 술자리를 즐기는 편이다. 개인적인 바람이라면 운전에 능숙해지고 싶다고.
--------------------------------------------------------

프로그래밍은 잘하는데 하드웨어를 잘 몰라도 임베디드 시스템 개발자가 될 수 있을까? 전자공학을 전공했는데 임베디드 시스템 소프트웨어 프로그램을 잘할 수 있을까? 필자 또한 임베디드 시스템을 처음 시작할 때 이와 같은 심정이었다. 필자는 학부와 대학원에서 전자통신을 전공하였다. 그리고 학부 때 배운 컴퓨터 언어는 포트란이 전부였다. 그것도 컴퓨터 없이 칠판수업을 받았다. OS와 32비트 프로세서를 접하기 시작한 것도 서른 살이 넘어서였으며, 프로그램 언어도 8비트 마이콤용 어셈블리 정도만 사용하는 수준이었다. 상상이 가는가?
필자는 임베디드 리눅스 기반 프로젝트를 다년간 수행하였으며, 현재 임베디드 리눅스 교육을 짧게는 5일 길게는 6개월 과정을 주관하며 가르치고 있다. 이 글은 그러한 경험을 바탕으로 임베디드 개발자가 되기 위해 필요한 기술적인 범위에 대해 말하고자 한다.
먼저 PC 환경 개발과 임베디드 시스템 환경 개발과의 차이를 다룰 것이며, 임베디드 시스템이 무엇인가를 효율적으로 설명하기 위해서 밥솥이라는 가전제품을 예로 들어 임베디드 시스템 개발자가 되기 위해서 필요한 것이 무엇인가를 말하고자 한다.

PC와 임베디드 시스템 환경의 개발 차이
두 시스템에서 개발 환경의 차이는 소프트웨어 개발 환경의 차이와 소프트웨어 개발 범위의 차이 등이 있다.
현재까지 대부분의 소프트웨어 개발자들은 PC에서 작업을 수행하여 왔다. <그림 1>과 같이 기존의 소프트웨어 개발과정은 소스 코딩을 하고 컴파일하고 실행하는 형태가 모두 PC 환경에서 이루어졌다는 것이다. 하지만 임베디드 시스템 소프트웨어 개발 과정은 소스 코딩을 하고 컴파일을 수행한 후 이를 타겟 시스템으로 전송한다. 그리고 전송된 실행 코드를 타겟에서 실행한다. 기존의 소프트웨어 개발자가 가장 먼저 어려움을 겪고 있는 것은 개발 환경이 다르다는 것이다.
임베디드 시스템에서 프로그램의 대상이 PC가 아닌 타겟 보드라는 것이다. PC 소프트웨어 개발은 별도의 보드가 필요 없이 PC상에서 모든 것이 이루어지기 때문에 보드가 없어도 개발이 진행된다. 그러나 임베디드 시스템의 소프트웨어 개발은 타겟 보드가 필요하다. 그러므로 개발 보드가 없이는 임베디드 환경에서 소프트웨어 개발이 불가능하다.
그리고 소프트웨어 개발자라 할지라도 타겟 보드에 대한 지식이 필요하다. 타겟 보드의 CPU 구조에 대한 이해와 어셈블러, 개발 보드의 주변장치의 이해 등이 필요하다. 이러한 것이 순수 소프트웨어만을 하던 개발자들이 겪는 어려움이라고 할 수 있다.
현재의 소프트웨어 개발 환경은 임베디드 환경으로 급속히 변해가고 있기 때문에 이러한 개발 환경의 이해 없이는 개발에 매우 큰 어려움을 겪을 수 있다. 이렇게 임베디드 시스템 소프트웨어 개발자가 되기 위해서는 개발 환경을 이해하고 이러한 시스템을 PC를 사용하듯이 능숙히 조작하는 것이 첫 번째 과제라고 할 수 있다.
사용자 삽입 이미지


<그림 1> PC와 임베디드 시스템 환경
 
SW 개발 범위의 차이
PC에서 소프트웨어 작업은 커널이나 디바이스 드라이버가 이미 준비된 상태에서 애플리케이션 작업만을 수행하는 것이었다. 물론 하드웨어도 거의 비슷한 형태로 제공된다. 임베디드 시스템에서는 사용되는 CPU가 다르고 이를 위한 개발 환경을 구축해야 하며, 직접 커널을 포팅해야 한다. 그리고 디바이스 드라이버도 해당 시스템에 맞게 제작하여야 한다. 그 이후에야 애플리케이션 프로그램을 작성한다.