임베디드 개발자 입문-5
저 자 : 박철 출판일 : 2004년 1월호 무엇을 준비해야 할까?
앞서 살펴봤던 것과 같이 우리가 이제껏 알고 있던 그리고 흔히 접해왔던 일반적인 컴퓨터 기반의 하드웨어, 소프트웨어 개발과는 달리 임베디드 시스템의 경우엔 그 개발 환경 구축부터 개발에 이르기까지 여러 가지 상이한 점들이 존재하기 때문에 처음 이를 접하는 개발자들은 다소 혼란스럽고 적응에 실패하기도 한다.
그러나 임베디드 시스템 역시 CPU(프로세서)와 메모리로 되어 있는(어느 특정 목적을 위해 개발된) 조그만 컴퓨터라 생각하고 개발에 임한다면 그리 어렵지만은 않을 거라고 필자는 확신한다. 즉, 임베디드 시스템 개발시 다음의 기본 기술 요소들만 확실하게 닦아 놓는다면 나름대로 쉽게 적응할 수 있지 않을까 싶다.
소프트웨어와 하드웨어의 기본 동작 원리
처음 컴퓨터 전원 버튼을 누른 순간 컴퓨터 보드 안에 이미 내장되어 있던 BIOS 프로그램이 실행되어 부팅 순서를 결정하고 부팅 가능한 운영체제가 선택됨과 동시에 해당 운영체제가 부팅하기 시작한다. 부팅이 끝난 운영체제 상에서 원하는 애플리케이션을 실행시키기 위해 마우스로 더블 클릭하는 순간 운영체제는 해당 애플리케이션을 메모리에 상주시킨 뒤 이를 실행시키게 되며 이때 만약 USB 같은 외부 디바이스들을 제어할 필요가 있을 경우 이를 제어하게 된다.
임베디드 시스템 역시 이와 마찬가지다. 전원이 들어감과 동시에 이미 내장되어 있던 부트로더가 실행되고, 이후 해당 임베디드 리눅스나 윈도우 CE 같은 운영체제가 실행되는, 이와 같은 소프트웨어와 하드웨어의 동작 원리에 대해 개발자는 이들이 실행되는 구조를 그려가며 반드시 이해해야만 할 것이다.
<그림 7> 밥솥용 임베디드 리눅스 소스 개발과정
하드웨어 개발
필자의 생각에 이는 모든 개발자들에게 해당되는 사항은 아니라고 본다. 자신의 전공 분야에 따라 전문적으로 개발하는 분야가 다른 만큼 소프트웨어 개발자들은 하드웨어 개발 방법에 관해 사실 몰라도 된다. 그러나 하드웨어를 개발하는 방법을 몰라도 된다는 얘기가 하드웨어를 몰라도 된다는 얘기는 아니다.
아무리 컴퓨터상에서 소프트웨어를 전문적으로 개발하는 사람이라 할지라도 해당 컴퓨터의 하드웨어 사양(스펙)을 모른다면 어찌 원하는 성능을 얻을 수 있겠는가?
이런 관점에서 보면 어떤 개발자라도 하드웨어에 대해 기본적으로 알아야 하겠지만 임베디드 개발자의 경우엔 소프트웨어 전문 개발자들보다 조금 더 깊이 알아둘 필요가 있다. 그래야 개발자가 원하는 대로 하드웨어를 제어할 수 있을 테니까.
프로그래밍 언어
이는 사실 언급할 필요도 없는 사항일지 모른다. 전쟁에 참여하는 군인이 총을 놓고 간다면 어찌 되겠는가? 그러나 필자가 겪어 본 바에 따르면 총을 놓고 가는 군인들이 더러 눈에 보여 굳이 언급을 하고자 한다. 요즘에 가끔 TV를 보면 정말 화려한 가수나 연예인들이 많이 보이는 데 이는 눈에 보이는 것만을 쫓고 있는 요즘 세태가 반영되어 그런 듯 싶어 썩 반갑지가 않다. 이는 개발에서도 그대로 적용되는 데, 요즘 보면 결과가 바로 눈에 보이는 언어들에 사람들이 몰리며 이에 대한 책들도 많이 나오고 있다. 그러나 이들 중 C 언어부터 차근차근 밟아 나가는 사람들은 그리 흔하지 않은 건 왜일까?
어떤 프로그래밍 언어이든 하나는 확실하게 알고 있어야 한다. 그래야 확장이 가능하기 때문이다. 그러나 이런 언어들은 공부에 대한 결과가 바로 눈에 띄지 않기 때문에 중도에 포기하는 개발자들이 많다. 이는 영어를 공부하는 것으로 생각해보면 알 수 있다. 영어에는 왕도가 없다지 않은가. 그저 묵묵히 최선을 다해 습득하는 것 그 길뿐이다. 프로그래밍 언어 역시 마찬가지라고 생각된다. 조급해 하지 말고 묵묵히 습득하다 보면 어느새 늘어 있는 자신의 실력에 놀랄 때가 반드시 있을 것이다.
[ 임베디드 시스템 산업 인력 현황 ] 매년 대학에서 배출되는 임베디드 소프트웨어 개발인력이 업체에서 필요로 하는 인력에 비하여 매우 부족하다. 향후 5년간 임베디드 소프트웨어 개발인력의 수급 부족이 약 1만 2000명으로 예상되고 있다. 임베디드 시스템 개발자는 단순 프로그래밍 차원을 넘어 하드웨어, 소프트웨어 지식을 겸비하고 프로젝트 관리 능력을 갖춘 시스템 아키텍트 수준의 인력을 요구하는데, 이러한 인력이 절대 부족하다. 그만큼 개발자로서 매력 있는 분야라 할 수 있다.
1990년대에 마이크로소프트의 윈도우 기반의 PC 시대를 지나 2000년대에는 포스트 PC, 즉 임베디드 시스템의 시대라고 해도 과언이 아니다. 앞으로 멀지 않은 장래에 임베디드 시스템인 포스트 PC에 대한 기존의 PC 시장의 비율이 55대 45로 전망할 만큼 임베디드 시스템 산업이 뜨겁게 성장하고 있다. 임베디드 시스템은 사회간접자본(SOC)으로 대표되는 32비트 RISC CPU가 내장된 반도체 사업, 임베디드 OS, 그리고 다양한 애플리케이션 소프트웨어 산업이 어우러지는 복합적인 시스템 산업이 될 것이라 생각한다.
임베디드 시스템은 컴퓨터가 등장한 이후 공장 자동화 분야에 CPU가 사용되면서부터 시작했다고 해도 과언이 아닐 정도로 오랜 역사를 가지고 있다. 그리고 2000년을 기점으로 임베디드 시스템의 트렌드 변화가 일어나고 있다. 임베디드 시스템이 기존의 체계에 변화를 촉진하고 있으며 전체 산업영역으로 급속히 확산되고 있다. 이러한 임베디드 시스템의 범위 및 분야가 광범위한 체계를 갖추고 있기 때문에 이에 종사하는 개발자가 되기 위해서는 많은 시간이 필요하다. 그래서 다른 영역에 있는 개발자와 입문자가 쉽게 접근하는 데 어려움이 있다는 것이 문제가 된다. 하지만 이를 효율적이고 체계적으로 학습하여 빠르게 개발자가 되기 위한 방법론을 제시하는 것이 이 글의 목적이라고 할 수 있다.
모든 분야의 일이 마찬가지지만, 임베디드 시스템 관련 개발 분야만큼 실무를 바탕으로 하는 분야도 많지 않을 것이다. 임베디드 분야는 보드를 설계하고 이 보드에 개발 환경을 구축하고 부트 코드를 작성하고 OS를 포팅하고 디바이스 드라이버를 작성하고 애플리케이션을 작성하는 등의 일련의 작업들을 하는 것을 의미한다. 임베디드에 거는 기대감과 희망
이 글에서는 임베디드 시스템을 32비트 CPU 기반 임베디드 하드웨어 시스템, OS, 미들웨어, 애플리케이션의 계층 구조를 가지는 임베디드 시스템에 대하여 살펴보고 이들을 개발하기 위해서는 어떤 식으로 접근해야 할지 살펴보았다.
‘무어의 법칙’에서 말해주듯 하드웨어 사양들은 하루가 다르게 변화하고 있고, 이보다 더 빠른 속도로 소프트웨어 환경은 급변하고 있다. 그리고 이러한 환경에서 다양한 분야가 생겨나고 또 사라져 가고 있다. 이런 광속의 시대를 살면서 과연 우리의 개발자들은 어디에 서야 할 것인가에 대해 오랜 기간 개발자의 길을 걸어온 사람들은 누구나 고민하고 있으리라 생각된다. 과연 이 땅의 개발자들은 어디로 가야 하는가?
필자는 임베디드라는 분야에 우리가 서야 할 길이 있다고 확신하고 있으며, 이를 다양한 개발 경험과 강의 현장에서 몸소 느끼고 있다. 그러나 아직 인식이 많이 되어 있지 않기에 어찌하면 이 분야에 쉽게 접근할 수 있을지를 생각해봤다.
앞서도 언급하였지만 임베디드는 우리가 이제껏 접해왔던 컴퓨터 환경과는 그 운용 방법이나 개발 방법 등 모든 면에서 다르다 할 수 있다. 하지만 그 속내를 들여다보면 우리가 이제까지 등한시했던 기본적인 내용들을 다시금 돌아보고 숙지한다면 결국 개발이라는 방법 자체가 아닌 개발 과정의 흐름은 동일하다는 사실을 이해하리라 생각한다.
CPU, 프로그래밍 언어, 컴파일러와 같은 기본 개발 분야에 있어서 이미 선진 유럽과 미국을 우리가 뛰어 넘기란 사실상 불가능해 보인다. 그러나 이제 막 꽃을 피우기 시작한 임베디드라면 기대해도 좋을 희망이 있지 않을까? 뛰어난 임베디드 개발자들이 무수히 쏟아져 나오길 마음 속으로 간절히 기도하며 글을 맺는다.
정리 | 조규형 | jokyu@korea.cnet.com
참+고+자+료
◆ Embedded World 2003, 1 vol. 1
◆ 임베디드 소프 트웨어 기술동향 및 산업 발전 전망, 정보통신연구진흥 제 4권 제 3 호, 임채덕 등, 정보통신연구진흥원,http://iita6.iita.re.kr:8888/korean/journal/13/focus_
01.htm, 2002. 9.
◆ 2002 Embedded Software Tools Worldwide Forecast, Gartner Dataquest Market Statistics 110850, 2002. 10.
◆ Worldwide Embedded Software Tools Outlook, 2002, Gartner Dataquest Alert, 2002, 10.
◆ Worldwide Embedded Operating Environments Forecast, 2003-2007, IDC #29308, 2003, 5.
◆ The Embedded Software Strategic Market Intelligence Program 2002/2003, Volume II, VDC, 2003. 3.
◆ Embedded Software Developers Maintain the Status Quo, Gartner, 2003. 5.
◆ 2001 Worldwide Embedded Software Tools Market Share, Gartner Dataquest Market Statistics, SWTA-WW-MS-0113, 2002. 7.
◆ 이것이 성장엔진이다 임베디드 S/W, 전자신문 2003. 3. 11.
저 자 : 박철 출판일 : 2004년 1월호 무엇을 준비해야 할까?
앞서 살펴봤던 것과 같이 우리가 이제껏 알고 있던 그리고 흔히 접해왔던 일반적인 컴퓨터 기반의 하드웨어, 소프트웨어 개발과는 달리 임베디드 시스템의 경우엔 그 개발 환경 구축부터 개발에 이르기까지 여러 가지 상이한 점들이 존재하기 때문에 처음 이를 접하는 개발자들은 다소 혼란스럽고 적응에 실패하기도 한다.
그러나 임베디드 시스템 역시 CPU(프로세서)와 메모리로 되어 있는(어느 특정 목적을 위해 개발된) 조그만 컴퓨터라 생각하고 개발에 임한다면 그리 어렵지만은 않을 거라고 필자는 확신한다. 즉, 임베디드 시스템 개발시 다음의 기본 기술 요소들만 확실하게 닦아 놓는다면 나름대로 쉽게 적응할 수 있지 않을까 싶다.
소프트웨어와 하드웨어의 기본 동작 원리
처음 컴퓨터 전원 버튼을 누른 순간 컴퓨터 보드 안에 이미 내장되어 있던 BIOS 프로그램이 실행되어 부팅 순서를 결정하고 부팅 가능한 운영체제가 선택됨과 동시에 해당 운영체제가 부팅하기 시작한다. 부팅이 끝난 운영체제 상에서 원하는 애플리케이션을 실행시키기 위해 마우스로 더블 클릭하는 순간 운영체제는 해당 애플리케이션을 메모리에 상주시킨 뒤 이를 실행시키게 되며 이때 만약 USB 같은 외부 디바이스들을 제어할 필요가 있을 경우 이를 제어하게 된다.
임베디드 시스템 역시 이와 마찬가지다. 전원이 들어감과 동시에 이미 내장되어 있던 부트로더가 실행되고, 이후 해당 임베디드 리눅스나 윈도우 CE 같은 운영체제가 실행되는, 이와 같은 소프트웨어와 하드웨어의 동작 원리에 대해 개발자는 이들이 실행되는 구조를 그려가며 반드시 이해해야만 할 것이다.
<그림 7> 밥솥용 임베디드 리눅스 소스 개발과정
하드웨어 개발
필자의 생각에 이는 모든 개발자들에게 해당되는 사항은 아니라고 본다. 자신의 전공 분야에 따라 전문적으로 개발하는 분야가 다른 만큼 소프트웨어 개발자들은 하드웨어 개발 방법에 관해 사실 몰라도 된다. 그러나 하드웨어를 개발하는 방법을 몰라도 된다는 얘기가 하드웨어를 몰라도 된다는 얘기는 아니다.
아무리 컴퓨터상에서 소프트웨어를 전문적으로 개발하는 사람이라 할지라도 해당 컴퓨터의 하드웨어 사양(스펙)을 모른다면 어찌 원하는 성능을 얻을 수 있겠는가?
이런 관점에서 보면 어떤 개발자라도 하드웨어에 대해 기본적으로 알아야 하겠지만 임베디드 개발자의 경우엔 소프트웨어 전문 개발자들보다 조금 더 깊이 알아둘 필요가 있다. 그래야 개발자가 원하는 대로 하드웨어를 제어할 수 있을 테니까.
프로그래밍 언어
이는 사실 언급할 필요도 없는 사항일지 모른다. 전쟁에 참여하는 군인이 총을 놓고 간다면 어찌 되겠는가? 그러나 필자가 겪어 본 바에 따르면 총을 놓고 가는 군인들이 더러 눈에 보여 굳이 언급을 하고자 한다. 요즘에 가끔 TV를 보면 정말 화려한 가수나 연예인들이 많이 보이는 데 이는 눈에 보이는 것만을 쫓고 있는 요즘 세태가 반영되어 그런 듯 싶어 썩 반갑지가 않다. 이는 개발에서도 그대로 적용되는 데, 요즘 보면 결과가 바로 눈에 보이는 언어들에 사람들이 몰리며 이에 대한 책들도 많이 나오고 있다. 그러나 이들 중 C 언어부터 차근차근 밟아 나가는 사람들은 그리 흔하지 않은 건 왜일까?
어떤 프로그래밍 언어이든 하나는 확실하게 알고 있어야 한다. 그래야 확장이 가능하기 때문이다. 그러나 이런 언어들은 공부에 대한 결과가 바로 눈에 띄지 않기 때문에 중도에 포기하는 개발자들이 많다. 이는 영어를 공부하는 것으로 생각해보면 알 수 있다. 영어에는 왕도가 없다지 않은가. 그저 묵묵히 최선을 다해 습득하는 것 그 길뿐이다. 프로그래밍 언어 역시 마찬가지라고 생각된다. 조급해 하지 말고 묵묵히 습득하다 보면 어느새 늘어 있는 자신의 실력에 놀랄 때가 반드시 있을 것이다.
[ 임베디드 시스템 산업 인력 현황 ] 매년 대학에서 배출되는 임베디드 소프트웨어 개발인력이 업체에서 필요로 하는 인력에 비하여 매우 부족하다. 향후 5년간 임베디드 소프트웨어 개발인력의 수급 부족이 약 1만 2000명으로 예상되고 있다. 임베디드 시스템 개발자는 단순 프로그래밍 차원을 넘어 하드웨어, 소프트웨어 지식을 겸비하고 프로젝트 관리 능력을 갖춘 시스템 아키텍트 수준의 인력을 요구하는데, 이러한 인력이 절대 부족하다. 그만큼 개발자로서 매력 있는 분야라 할 수 있다.
1990년대에 마이크로소프트의 윈도우 기반의 PC 시대를 지나 2000년대에는 포스트 PC, 즉 임베디드 시스템의 시대라고 해도 과언이 아니다. 앞으로 멀지 않은 장래에 임베디드 시스템인 포스트 PC에 대한 기존의 PC 시장의 비율이 55대 45로 전망할 만큼 임베디드 시스템 산업이 뜨겁게 성장하고 있다. 임베디드 시스템은 사회간접자본(SOC)으로 대표되는 32비트 RISC CPU가 내장된 반도체 사업, 임베디드 OS, 그리고 다양한 애플리케이션 소프트웨어 산업이 어우러지는 복합적인 시스템 산업이 될 것이라 생각한다.
임베디드 시스템은 컴퓨터가 등장한 이후 공장 자동화 분야에 CPU가 사용되면서부터 시작했다고 해도 과언이 아닐 정도로 오랜 역사를 가지고 있다. 그리고 2000년을 기점으로 임베디드 시스템의 트렌드 변화가 일어나고 있다. 임베디드 시스템이 기존의 체계에 변화를 촉진하고 있으며 전체 산업영역으로 급속히 확산되고 있다. 이러한 임베디드 시스템의 범위 및 분야가 광범위한 체계를 갖추고 있기 때문에 이에 종사하는 개발자가 되기 위해서는 많은 시간이 필요하다. 그래서 다른 영역에 있는 개발자와 입문자가 쉽게 접근하는 데 어려움이 있다는 것이 문제가 된다. 하지만 이를 효율적이고 체계적으로 학습하여 빠르게 개발자가 되기 위한 방법론을 제시하는 것이 이 글의 목적이라고 할 수 있다.
모든 분야의 일이 마찬가지지만, 임베디드 시스템 관련 개발 분야만큼 실무를 바탕으로 하는 분야도 많지 않을 것이다. 임베디드 분야는 보드를 설계하고 이 보드에 개발 환경을 구축하고 부트 코드를 작성하고 OS를 포팅하고 디바이스 드라이버를 작성하고 애플리케이션을 작성하는 등의 일련의 작업들을 하는 것을 의미한다. 임베디드에 거는 기대감과 희망
이 글에서는 임베디드 시스템을 32비트 CPU 기반 임베디드 하드웨어 시스템, OS, 미들웨어, 애플리케이션의 계층 구조를 가지는 임베디드 시스템에 대하여 살펴보고 이들을 개발하기 위해서는 어떤 식으로 접근해야 할지 살펴보았다.
‘무어의 법칙’에서 말해주듯 하드웨어 사양들은 하루가 다르게 변화하고 있고, 이보다 더 빠른 속도로 소프트웨어 환경은 급변하고 있다. 그리고 이러한 환경에서 다양한 분야가 생겨나고 또 사라져 가고 있다. 이런 광속의 시대를 살면서 과연 우리의 개발자들은 어디에 서야 할 것인가에 대해 오랜 기간 개발자의 길을 걸어온 사람들은 누구나 고민하고 있으리라 생각된다. 과연 이 땅의 개발자들은 어디로 가야 하는가?
필자는 임베디드라는 분야에 우리가 서야 할 길이 있다고 확신하고 있으며, 이를 다양한 개발 경험과 강의 현장에서 몸소 느끼고 있다. 그러나 아직 인식이 많이 되어 있지 않기에 어찌하면 이 분야에 쉽게 접근할 수 있을지를 생각해봤다.
앞서도 언급하였지만 임베디드는 우리가 이제껏 접해왔던 컴퓨터 환경과는 그 운용 방법이나 개발 방법 등 모든 면에서 다르다 할 수 있다. 하지만 그 속내를 들여다보면 우리가 이제까지 등한시했던 기본적인 내용들을 다시금 돌아보고 숙지한다면 결국 개발이라는 방법 자체가 아닌 개발 과정의 흐름은 동일하다는 사실을 이해하리라 생각한다.
CPU, 프로그래밍 언어, 컴파일러와 같은 기본 개발 분야에 있어서 이미 선진 유럽과 미국을 우리가 뛰어 넘기란 사실상 불가능해 보인다. 그러나 이제 막 꽃을 피우기 시작한 임베디드라면 기대해도 좋을 희망이 있지 않을까? 뛰어난 임베디드 개발자들이 무수히 쏟아져 나오길 마음 속으로 간절히 기도하며 글을 맺는다.
정리 | 조규형 | jokyu@korea.cnet.com
참+고+자+료
◆ Embedded World 2003, 1 vol. 1
◆ 임베디드 소프 트웨어 기술동향 및 산업 발전 전망, 정보통신연구진흥 제 4권 제 3 호, 임채덕 등, 정보통신연구진흥원,http://iita6.iita.re.kr:8888/korean/journal/13/focus_
01.htm, 2002. 9.
◆ 2002 Embedded Software Tools Worldwide Forecast, Gartner Dataquest Market Statistics 110850, 2002. 10.
◆ Worldwide Embedded Software Tools Outlook, 2002, Gartner Dataquest Alert, 2002, 10.
◆ Worldwide Embedded Operating Environments Forecast, 2003-2007, IDC #29308, 2003, 5.
◆ The Embedded Software Strategic Market Intelligence Program 2002/2003, Volume II, VDC, 2003. 3.
◆ Embedded Software Developers Maintain the Status Quo, Gartner, 2003. 5.
◆ 2001 Worldwide Embedded Software Tools Market Share, Gartner Dataquest Market Statistics, SWTA-WW-MS-0113, 2002. 7.
◆ 이것이 성장엔진이다 임베디드 S/W, 전자신문 2003. 3. 11.