본문 바로가기

MCU (마이크로콘트롤러) & Embedded Linux/Embedded Linux

임베디드 리눅스? 무엇? - 01

저도 임베디드 리눅스(Embedded Linux)가 무엇인지 알고싶어 개인적으로 공부하면서 알게 된 것들을 더 쉽게 정리하기 위해 블로깅을 합니다. 그렇기 때문에 틀릴 수 있는 내용도 있을 것입니다. 그렇지만 내용을 쓰기 전에 인터넷의 자료를 많이 참고하여 맞는지 확인하여 블로깅을 하겠습니다. 그렇지만 일단 시작할 수는 있어도 아직 임베디드 리눅스(Embedded Linux)를 심어 테스트 할 타겟(Target. 목적물.) 시스템을 구하지(또는 결정하지) 못 했기 때문에 실용적이지 못한 블로깅이 될까봐 걱정입니다.


저는 임베디드 리눅스(Embedded Linux)라는 용어보다 임베디드 시스템(Embedded System)이란 용어가 더 친숙하고 또한 먼저 나온 용어라고 기억하고 있으며 임베디드 시스템이라는 용어가 더 광범위한 용어라고 보시면 될거 같습니다. 즉 임베디드 리눅스는 임베디드 시스템에 포함된다고 보시면 됩니다. 여기서 시스템이라는 용어가 OS와 같은 프로그램과 그것이 돌아가는 하드웨어를 포함하여 말하는 것이므로 이러한런 OS에는 많은 것이 더 있지만 좀 친숙해서 쉽게 알 수 있는 것에는 Linux, Windows CE 그리고 iOS등이 있다고 볼 수 있겠습니다. 그렇다면 임베디드란 무엇을 말하는 것입니까? 어떤 곳 즉 어느 사이트의 게시물을 읽어보니 임베디드 시스템(Embedded System)을 내장(형) 시스템이라고 직역에 가깝도록 번역하시는 분도 있던데 그렇게 해석해서 보기엔 뭔가 부족하다는 느낌을 갖게 합니다. 이에 더하여 여기의 게시물을 포함하여 다른 곳들의 내용들도 임베디드 리눅스 또는 임베디드 시스템을 서로 혼용해서 쓰기도 한다는 것을 알아두셔야 합니다.


그렇다면, 위에서 언급된 Embedded용 OS를 이용하여 만든 제품에는 어떤 것이 있을까요? 안드로이드폰엔 Embedded Linux가, 윈도우 스마트폰엔 Windows CE가 그리고 아이폰엔 iOS가 탑재되어 운용되고 있습니다. 이런 스마트폰들은 컴퓨터보다는 좀 부족하지만 컴퓨터로 할 수 있는 많은 일들을 할 수 있습니다. 그래서 Embedded System을 한국어로 직역한 내장(형) 시스템으로 부르기엔 부족하다고 느끼게 되실 것입니다. 그렇다고 따로 번역할 적당한 용어가 있는 것도 아니어서 원어인 임베디드 시스템(Embedded System)으로 부르는 것이 맞아 보입니다. 이외에도 청소로봇, 셋톱박스(set top box), 디지털 카메라, 디지털 TV, 게임기, 냉장고, 세탁기 등도 임베디드 시스템이라고 부를 수 있습니다. 그러고보니 임베디드 시스템은 몰라도 우리의 생활 깊숙히 들어와 있어서 없으면 생활이 곤란할 정도로 생활의 편의를 주는 것들이 많다는 것을 느끼실 것입니다. 이쯤되면, 임베디드 시스템 아니 임베디드 리눅스를 배우고 그것을 사용하여 생활에서 편리하게 또는 획기적인 편의를 주는 제품을 만들어 그것을 모두 같이 누리고 싶다는 열망이 강해지는 분들이 계실 것입니다.


임베디드 시스템(Embedded System)을 만들기 위한 기본조건들

하지만, 임베디드 시스템을 만들기 위해선 프로그램을 짤 수 있는 능력뿐만 아니라 전기/전자[각주:1] 회로를 설계할 수는 없어도 전기/전자 회로를 볼(또는 해석) 줄 알아야 하며, 컴퓨터의 하드웨어(CPU, I/O Devices, Memory 등.)를 알아야 하는 것은 기본이고 그것에 더하여 C언어와 어셈블리(Assembly) 언어를 사용하여 프로그램을 짤 수 있는 능력까지 되면 기본은 갖추었다고 생각할 수 있습니다. 너무 많은 것을 요구한다고 생각하실 수 있지만 기본적으로 그정도를 알고 최종적으로 만들게 될 임베디드 시스템이 동작될 환경(그것을 동작시킬 사람들의 특성과 현장 특성 등을 말함.) 등을 잘 파악하여 프로그램을 짜야만 그나마 오류가 적은 임베디드 시스템을 만들 수 있게 된다고 합니다.


임베디드 리눅스(Embedded Linux) 시스템과 컴퓨터의 차이

아무리 Embedded라는 용어가 더 붙어있어서 그렇지 Linux가 올라간다는 것은 기본적으로 컴퓨터라는 것인데, 그렇다면 우리가 쓰는 컴퓨터와 Embedded Linux가 올려진 기기와는 어떤 차이가 있는 것인지 의아해 하시는 분이 있을 것입니다. 그렇다면 비교가 좀 우습지만 PC와 게임기엔 어떤 차이가 있는 것일까요? 분명 많은 차이가 있습니다. 게임기는 TV를 연결하여 게임만 할 수 있는 반면 PC는 게임뿐만이 아니라 매우 다양한 일을 할 수 있습니다. 게다가 능력이 된다면 PC는 자신만을 위한 프로그램을 만들어 쓰실 수도 있습니다. 그렇네요. Embedded라는 용어가 붙으면 제한적인 목적의 기기가 된다는 것입니다. 게임기뿐 아니라 핸드폰, 디지털 카메라, 냉장고, TV 더 나아가서는 자동차의 전자시스템, 의료용 기기, 공장 자동화 기기들까지도 특정 목적을 염두에 두고 만들어진 제품이 임베디드 시스템이므로 컴퓨터를 제외한 거의 모든 전자제품들은 임베디드 시스템이라 보시면 될 것입니다. 또한 임베디드 시스템은 사용될 목적에 맞추어 그 하드웨어가 만들어지는 반면 컴퓨터(PC)는 하드웨어를 먼저 만든 다음에 그 컴퓨터의 하드웨어에 맞추어 프로그램이 만들어지는 것과 같이 서로 역으로 만들어진다는 특징을 가지고 있습니다. 결론적으로 컴퓨터는 다양하게 이용할 수 있도록 범용적인 목적을 가지고 만들어지나 임베디드 리눅스(또는 시스템)는 특정 목적으로 만들어진다는 차이점을 가집니다.


임베디드 시스템의 특징

임베디드 시스템은 종류가 워낙 다양하여 공통적인 특징을 말하기엔 힘들지만, 특정 목적만을 수행하기 위해 만들어진 것이므로 그 특정 목적을 달성하기 위해 최적화된 시스템이라고 볼 수 있습니다. 또한 임베디드 시스템은 아주 약간의 변화가 있어서 미미하지만 제한된 하드웨어 자원을 가집니다. 예를 들어, 휴대폰/PDA/mp3 플레이어 등의 휴대용 기기들은 베터리를 사용하므로 전력공급면에서 제한이 있습니다. 그렇기 때문에 어떤 휴대폰용 앱이 속도가 빨라서 좋지만 베터리 소모가 심하다면 그 앱 때문에 더 중요한 통화나 문자를 쓸 수 없게 되므로 앱 개발단계에서부터 베터리 소모가 덜 되게 설계할 필요성이 대두됩니다. 만일 가정용/산업용 AC로 전기를 공급받는다면 전원제한은 없는 것이므로 그러한 전원자원 제한에 대해 고려할 필요는 없을 것입니다. 또한 핸드폰은 컴퓨터와는 달리 보조메모리인 하드디스크(HDD)가 없으므로 보조메모리 자원을 못 쓰므로 이에 대한 대책도 필요합니다. 그것만이 아니라 핸드폰엔 하드디스크를 쓸 수 없으므로 플래쉬 메모리를 쓰게 되는데 이것은 하드디스크보다 단가가 비싸므로 기업의 입장에서 어떤 임베디드 시스템을 만들 때 그 시스템에 넣어야 할 플래쉬 메모리의 크기를 최대로 줄이게 되는 것이 당연하므로 이 또한 제한이 됩니다. 더구나 임베디드 스템이 어디에 쓰이느냐에 따라 Real-Time에 대한 요구정도가 달라진다는 것도 문제가 되는데 Real-Time[각주:2]에 대한 요구정도가 크면 클수록 빠른 성능을 지닌 부품이 필요하게 된다는 것입니다. 단적인 예로 미사일 제어용 엠비디드 시스템은 정도가 매우 높은 Real-Time(Hard Real-Time)이 필요하고 반면에 핸드폰의 음성통화나 동영상 플레이에 쓰이는 엠비디드 시스템은 정도가 조금 낮은 Real-Time(Soft Real-Time)이 필요하다고 볼 수 있습니다.


임베디드 시스템에 OS가 필요한가?

냉장고, TV, 세탁기, 전자랜지, 전축, 비디오/DVD 플레이어 등에 OS가 왜 필요한지 알아야, 임베디드 리눅스(Embedded Linux)를 배우고 싶은 동기가 생길텐데 왜 필요한 것인지 먼저 알아보겠습니다. 엠비디드 시스템에 OS가 필요하게 된 것은 전기/전자 제품들이 디지털화 되면서 아날로그 기기에서는 상상도 할 수 없는 부가기능들이 추가되면서 그 필요성이 커졌다고 보아야 합니다. 깨놓고 다이얼식 아날로그 TV를 사용할 때는 그것에 인터넷을 쓸 수 있게 한다든지 인공지능을 넣어 생활의 편의를 도모한다든지의 필요성이 없었기에 TV 고유의 기능만 잘되게 그리고 질 좋게 만들면 되었습니다. 그러나 지금은 디지털 TV에 USB를 꽂아 mp3/동영상 플레이를 할 수 있고, 인터넷 웹서핑도 할 수 있고 프리미엄 제품엔 음성인식 시스템도 들어있어 말하면 채널을 돌려주거나 보고싶은 동영상이나 특정 가수의 노래가 있는 동영상을 보여주거나 때론 유튜브의 동영상도 보여줄 수 있도록 부가기능을 넣었다는 광고를 보기도 합니다. 이러한 기능들은 컴퓨터와 같은 기능을 하는 부품들을 넣고 그것을 동작시키기 위해 OS와 그 응용 프로그램들이 필요하다는 것은 이해하시리라 보입니다. 그 다양한 기능을 발휘하기 위해 임베디드 시스템용 OS가 필요한 것입니다.

  1. 미국에선 전기공학이라고 한가지 분류만 있는데 그것이 일본으로 넘어와 전기/전자공학으로 분류되었고 그 일본의 영향으로 그것이 한국으로 넘어와 그대로 쓰였다고 합니다.

    그렇다면 전기공학과 전자공학을 어떻게 구분한다는 것입니까? 저도 많이 햇갈렸지만 어느 책에서 구분법을 알려줘 이제는 쉽게 이해하고 있습니다.

    전기공학 : 전기자체를 다루는 학문 . 그러니까 전기 발전소에서 가정/기업/정부기관까지 오는 전기를 다룹니다.

    전자공학 : 가져온 전기를 전기신호로 만들어 또는 전기 신호를 가지고 와서 가공하고 어떤 일 즉 소리/영상/전파/데이터 등으로 하여 어떤 제품을 만드는 공학을 말합니다. 궁극적으로 전기신호를 다루는 학문입니다. 그러니까 컴퓨터/라디오/MP3기기/스마트폰/레이더/인터넷 주고받는 기기 등이 포함될 것입니다. [본문으로]
  2. 한국어로 실시간이라 번역하는데, 이것은 특정한 일이 정해진 시간 내에 할 수 있음을 말하는 용어로 일반적으로 빠른 처리속도를 내는 것을 말한다. 그렇지만 이것도 상대적인 속도를 의미하는 경우가 많다.

    운동으로 예를 들면 일반 사람이 취미로 권투를 하면서 상대의 펀치를 피하거나 막는다면 그것을 두고 Real-Time으로 처리했다고 말하며 프로 권투선수의 경우에도 마찬가지로 했다면 둘 다 Real-Time으로 처리한 것이지만 프로 권투선수의 경우엔 일반 사람보다 훨씬 빨라야만 Real-Time으로 처리한 것이 된다.

    따라서 Real-Time으로 처리했다는 것은 반드시 빨랐다고 볼 수는 없지만 어느정도는 빨랐다고 얘기할 수 있다. [본문으로]