강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
누구나쉽게배우는임베디드리눅스①
조회 : 35,348  


누구나쉽게배우는임베디드리눅스

임베디드리눅스첫걸음마

 

 

임베디드 리눅스를 이해하기 위해서는 먼저 임베디드 시스템에 대해 알아야 한다. 어려운 같지만 알고 보면 우리 주변에서 흔히 있는 핸드폰, 디지털 카메라, 디지털 TV, 냉장고 등이 모두 임베디드 시스템의 일종이라고 한다. 영준누구나 쉽게 배우는 임베디드 리눅스강좌 회는 이처럼 상세하고 쉬운 설명으로 시작해 재미있는 임베디드 리눅스의 세계로 여러분을 초대한다.

 

_ 장영준 삼성전자 SW연구소 Linux Technology Group 선임 연구원

 

 

앞으로의 연재 순서

임베디드 리눅스 걸음마

교차 개발 환경을 구축하자

부트로더 설정은 이렇게

커널을 올려보자

루트 파일 시스템은

어떻게 구성되는가

2% 부족함을 채워보자

 

 

바로 우리 옆에 있는 임베디드 시스템

임베디드 리눅스(Embedded Linux). 요즘 IT 관련 신문과 잡지에서 많이 나오는 용어이다. 풀어 써보면 단어 사이에 다음과 같은 말이 생략되어 있다고 있다.

임베디드 (시스템을 대상으로 동작하는) 리눅스

풀어서 쓰긴 했지만, 아직 의미가 닿지는 않으리라. 많이 접해보기는 했지만 생소할 수도 있는임베디드 리눅스라는 것에 대해 자세히 알아보기 전에 먼저임베디드 시스템리눅스 무엇인지 살펴보기로 한다. 우선 간단한 퀴즈 하나를 풀어보자.

핸드폰, 디지털 카메라, 가정용 게임기, 냉장고, TV, 프린터

모두 주변에서 쉽게 접할 있는 전자제품들이다. 그러면 제품들의 공통점은 무엇일까? 정답은 위제품 모두 임베디드 시스템의 종류라는 것이다. 임베디드(embedded) 기본형인 embed라는 단어를 사전에서 찾아보면 다음과 같은 의미를 가지고 있다.

embed [imb d,em-] : 깊숙이 박다, 파묻다, 끼워 넣다

사전적 의미로 봤을 임베디드 시스템이란 어떤 장치에 끼워 넣은 시스템이라는 의미가 된다. 이런 의미에서 임베디드 시스템을내장형 시스템이라고 말하기도 한다.

그러면 어떤 장치에 내장된 시스템을 임베디드 시스템이라고 하는지 알아볼 차례이다.

여기서 퀴즈를 하나 풀어보자. 다음 제품 간의 차이점은 무엇일까?

 

            

 

 

가정용 게임기 vs PC

그림 1 가정용 게임기와 PC

 

 

많은 차이점이 있을 있겠다. 우선 게임기는 TV 연결하여 게임을 즐길 있는 기기인데 비해,PC 인터넷, 문서작성, 채팅 등더 많은 작업을 있다. PC

거기에다 게임도 즐길 있다. 기능면에서 봤을 활용도가 훨씬 많다. PC 업그레이드가 가능하다는 것도 게임기와의 차이점이라고 있다.

게임기는 구입하고 나면 구입 당시 사양 그대로 소프트웨어(게임 카트리지) 바꿔가면서 게임을 즐기게 되지만, PC 구입 당시 장착된 그래픽 카드나 RAM 내부 부품을 교환해 한층 나은 시스템으로 바꿀 있다. 그러나 정답은 아직 나오지 않았다.

힌트는 임베디드 시스템의 구체적인 정의 안에 숨어 있다.제한된 자원을 가지고 특정한 목적이 있는 작업을 처리하기 위한 시스템이란 것이 정의이다.

, 필자가 의도한 정답은게임기는 임베디드 시스템으로 분류되는데 비해 PC 그렇지 않다 것이다. 게임기뿐 아니라 핸드폰, 디지털 카메라, 냉장고, TV 나아가서는 자동차의 전자시스템, 의료용 기기, 공장 자동화 기기들까지도 특정 목적을 염두에 두고 만들어진 제품이므로 임베디드 시스템이라고 있다. PC 제외한 대부분의 전자 제품이 임베디드 시스템이라고 해도 과언이 아니다. 실제로 PC 나오기 전까지는 임베디드 시스템이란 용어를 사용하지 않았다. 범용성이 강조된 PC와 비교하여 사용하기 위해 만들어진 용어다. 그러면 이러한 임베디드 시스템의 공통적인 특징에 대해 알아보도록 하자

 

 

 

임베디드 시스템의 특징

앞에서 알아본 바와 같이 임베디드 시스템은 종류가 다양하여 공통적인 특징으로 정의 내리기는 쉽지 않다. 하지만 임베디드 시스템이란 특정 목적만을 수행하기 위해 만들어진 시스템이므로, 특정 목적을 달성하는데 최적화 시스템이라고 말할 수는 있다. 때문에 수행되는 응용 프로그램의 목적에 맞춰 기반이 되는 시스템이 제작된다.

반면 범용성을 갖는 PC 시스템을 먼저 만들어 놓은 후에 응용 프로그램이 시스템에 맞도록 제작이 된다. 시스템의 설계 단계에서부터 PC와는 차이가 생기게 되는 것이다.

다른 가지 특징은 임베디드 시스템이 제한된 자원을 가진다는 점이다. 이는 특히 휴대폰이나 PDA, MP3 플레이어 휴대용 기기에서 더욱 두드러진 특징이다. 이로 인해 다음과 같은 제약이 기게 된다. 휴대용 기기는 보통 배터리를 사용하기 때문에 전력 공급 면에서 제약을 받는다.

예를 들어 휴대폰에서 동작하는 게임을 개발한다고 했을 , 시스템 성능이 뛰어나 빠르고 멋진 게임을 만들 수는 있다 하더라도 배터리가 일찍 닳게 된다면 무용지물이 것이다. 때문에 임베디드 시스템 개발 시에는 전력 문제를 고려해야 한다. 또한 저장 공간 역시 제한을 받을 수밖에 없다. 휴대폰이 나 PDA에는 보통 대용량의 하드디스크 대신 플래시 메모리를 장착해 사용하는데, 플래시 메모리는 하드디스크에 비해 용량대비 가격이 훨씬 비싸다. 하지만 약간의 충격에도 손상을 받는 하드디스크를 사용하기란 힘든 실정이다. 그리고 응용프로그램이 실행되는 필요한 메모리의 크기 역시 제약을 받는다.

기업은 임베디드 시스템 제작 제품 가격을 염두에 두고 가급적 작은 크기의 메모리를 장착하려고 한다. 때문에 시스템에 내장되는 프로그램의 크기를 작게 만들기 위한 고려가 있어야 것이다.

이처럼 임베디드 시스템의 제약들은 기술이 발전하고 부품 가격이 하락함에 따라 점차 해결의 길이 열리고 있기는 하지만 아직도 임베디드 시스템을 개발할 반드시 고려해야 사항임은 분명하다.

마지막으로 임베디드 시스템은 실시간(Real-time)성을 필요로 하는 경우가 많다. 실시간성이란 특정업무가 정해진 시간 내에 수행돼야 함을 의미한다.

단적인 예로 미사일 발사 시스템의 경우 미사일 발사 버튼을 누른 순간 치의 오차도 없이 발사가 돼야 한다. 이런 시스템의 경우 실시간성이 보장되지 않는다면 문제를 야기할 수가 있다. 이러한 시스템에서는 오차가 발생하지 않도록 철저히 보장을 해줘야 한다.

이에 비해 동영상을 재생하는 시스템의 경우는 동영상이 끊기지 않고 재생돼야 한다는 실시간성을 가지고 있다. 그런데 동영상은 약간 끊긴다 해도 보기에 불편한 정도이지 앞의 미사일 발사 시스템과 같은 위험성을 가지지는 않는다. 따라서 실시간성 기준이 앞의 경우보다 완화될 수도 있다.

실시간성의 정도에 따라 미사일 발사 시스템과 같은 경우를 하드 실시간 시스템(Hard Real-time System), 동영상 재생 시스템의 경우를 소프트 실시간 시스템(Soft Real-time System)이라고 한다.

 

임베디드 시스템에서 OS 필요한 이유

OS PC 임베디드 시스템을 구동시키는데 사용되는 가장 기본적인 프로그램이다. OS 설치되지 않은 시스템에서는 아무 작업도 수가 없다. OS 설치된 상태에서 문서편집기 프로그램을 통해 문서작성을 하고, 인터넷 브라우저 프로그램을 통해 인터넷을 사용할 있게 된다.

가장 대표적인 OS로는 마이크로소프트의 윈도우 시리즈를 있다. Windows 98, Windows NT,

Windows XP 등이 있다. PC OS로는 윈도우 외에도 유닉스, 리눅스 등이 많이 쓰이고 있고, 임베디드 시스템용 OS로는 윈도우, 리눅스 외에도 VxWorks, pSOS, Nucleus 등이 많이 쓰인다. 그러면 PC 아닌 임베디드 시스템에서 OS 필요할까?

 

TV 예로 들어보면, 아날로그 컬러TV TV 본연의 기능만 수행하면 되는 비교적 간단한 구조로 되어 있어, 시스템에 수행하고자 하는 기능만 내장되어 있으면 문제없었다. 그런데 요즘 출시되는 디지털TV에는 TV 본연의 기능 외에도 네트워킹 기능, 게임 기능 다양한 부가 기능들이 포함되어 있고, 시스템의 복잡성은 점점 커지는 추세다. 핸드폰의 경우도 마찬가지다. 기본적인 전화 통화 기능만 되는 제품에서, 카메라 기능, 게임 기능 다양한 부가기능이 추가되면서 게임을 하는 도중 전화를 받을 있어야 하는 복잡한 처리를 효율적으로 해야 필요성이 생기게 됐다.

기존 임베디드 시스템 제작 방식으로는 이처럼 복잡해진 기능을 효율적으로 처리하기가 어렵다. 때문에 OS 기술을 적용해 제품을 만들어 내는 추세가 대세인 것이다. 물론 요즘도 냉장고, 전자레인지 등 간단한 시스템에는 OS 필요 없을 있다.

 

임베디드 OS

제한된 자원을 가지고 특정 목적을 수행해야 하는 임베디드 시스템의 특성 때문에 임베디드 시스템에 내장되는 OS 역시 목적에 적합한 OS 사용해야 한다.

PC 경우에는 손에 꼽을 정도로 개의 OS 시장 전체를 장악하고 있지만, 임베디드 시스템의 경우는 시스템마다 저마다의 특징을 가지고 있기 때문에 종류가 상당히 많은 편이다. 크게 분류를 해보자면 임베디드 시스템에 많이 사용되는 OS로는 RTOS, 윈도우 CE, 리눅스 등이 손꼽힌다.

 

RTOS

임베디드 OS 원래 실시간성이 필요한 기기에 내장되던 RTOS (Real-Time Operating System)

부터 비롯되어 점차 휴대폰 다른 임베디드 시스템으로까지 적용범위가 확대된 것이다. RTOS는 임베디드 OS 원조라고 있다. 처음부터 실시간성을 염두에 두고 만들어졌기 때문에 실시간처리에서 OS 비해 강점을 가지고 있고, 개발 환경도 우수한 편이다.

대부분 상용 OS이기 때문에 가격이 비싸고, 임베디드 시스템이 점차 복잡해지고 기능이 많아짐에 따라 OS 성능이 강력한 리눅스나 윈도우로 점차 대체되고 있는 실정이다. 대표적인 상용 RTOS로는 VxWorks, Nucleus, pSOS 등이 있다.

 

윈도우 CE

PC OS 시장을 장악하고 있는 마이크로소프트의 임베디드용 OS이다. 많은 사용자들에게 익숙한 윈도우와 비슷하게 구성되어 있고, 개발 환경도 윈도우와 유사해 적응하기 쉽다.

윈도우의 응용 프로그램을 그대로 사용할 있다는 것도 장점이다. 이러한 이점을 살릴 있는 휴대폰, PDA 등의 임베디드 시스템에 주로 사용되고 있다.

 

임베디드 리눅스

반면 상용 RTOS 비해 실시간성에서 떨어지고, 윈도우 계열에 비해 개발환경이 열악한 편이다. 열악한 개발환경으로 인해 개발기간이 상대적으로 길어지고, 개발에 필요한 지원을 받을 곳이 마땅하지 않다는 단점도 있다. 하지만 공개된 소스 코드로 인해 두터운 개발자 층을 확보하고 있고, 여러 업체가 임베디드 리눅스 개발 기술지원을 하고 있어, OS 안정성, 신뢰성, 성능 등이 빠르게 개선되고 있으며, 활용도가 급격하게 증가하고 있는 추세다.

 

임베디드 리눅스의 구성 요소

이번에는 임베디드 리눅스를 동작시키기 위해 필요한 사항에 대해 알아보겠다. 여기에서 나오는 내용들은 앞으로의 연재에서 더욱 상세하게 설명이 것이다.

 

 

임베디드 리눅스의  가장 큰 장점은 오픈 소스로 되어 있다는 점이다. 라이센스 비용이 없고,

소스 코드가 공개되어 있기 때문에 커널의 소스 코드를 필요에 맞게 수정하여 사용할 있다.

이는 다양한 임베디드 시스템 개발에 유리한 면으로 작용한다.

 

 

호스트-타겟 구조 교차개발환경

 

타겟(Target)이란 임베디드 리눅스 가 내장될 시스템, 핸드폰, 게임기와 같은 기기를 의미한다. 그리고 호스트(Host) 타겟에서 실행될 리눅스나 응용 프로그램을 개발하는데

사용되는 시스템을 의미한다. 보통 PC에서 프로그램을 개발하는 경우

Visual Studio 같은 개발 툴을 사용하여 PC에서 직접 개발하고, 개발된 결과물 역시 PC에서 바로 동작시켜 있게 되어 있다. 이는 다른 임베디드 시스템에 비해 PC 사양이 높고 여러모로 개발을 하기에 적합한 환경을 가지고 있기 때문이다.

하지만, 휴대폰을 예로 들면, 휴대폰은 생산 단가 문제 때문에 특정 목적을 수행하는 데에만 필요한 최소사양으로 구성이 되어 있다. 따라서 휴대폰에 내장될 프로그램을 휴대폰 내에서 개발할 수가 없는 상황이다. 마찬가지로 보통 임베디드 시스템은 사양이 개발을 하기에 부족하거나 아예 불가능한 경우가 대부분이다. 따라서 PC 같은 외부 환경에서 프로그램을 개발하고 개발된 결과물을 임베디드 리눅스가 내장되는 시스템인 타겟에서 수행하는호스트-타겟구조를 사용하여 개발을 하게 된다. 이러한 호스트-타겟 구조를 교차개발환경(Cross Development Environment)이라고 한다.

 

 

툴체인

프로그램을 개발하기 위해서는 해당 소스 코드를 가지고 시스템에서 실행하기 위한 이미지 형태로 들어줘야 한다. 작업을 컴파일러가 담당하고 있다. 컴파일러를 비롯하여 프로그램을 실행하는데 필요한 기타 환경이 호스트(개발을 담당하는 PC) 타겟(임베디드 리눅스가 내장되는 시스템)에서 서로 다른 경우가 있다. 그러면 호스트에는 해당 타겟을 개발하기 위한 환경이 필요할 것이다. 환경을 타겟을 개발하는데 필요한 툴들의 모임이라고 하여 툴체인(Toolchain)이라고 부른다.

 

부트로더

핸드폰과 같은 임베디드 시스템을 동작시키기 위해서는 처음에 시스템을 구동시켜 주는 프로그램이 필요하다. 처음 전원을 켜게 되면 핸드폰 내의 ROM이나 플래시메모리와 같은 저장장치에 있는 부트로더(Boot Loader)라는 프로그램이 가장 먼저 실행된다. 그리고 부트로더는 운영체제를 메모리에 로딩해 운영체제가 동작할 있도록 만들어 준다. 요약해 보면, 부트로더의 역할은 시스템이 처음 가동될 있도록 시스템의 초기화를 담당하고, 운영체제를 실행하는 기능을 수행한다고 있다.

 

리눅스 커널

임베디드 시스템이 동작하는 기반이 되는 운영체제이다. 운영체제에서 시스템이 동작하는 필요한 핵심 기능을 모아놓은 것을 커널이라고 한다.

 

루트 파일 시스템

리눅스가 동작하기 위해서는 운영체제의 핵심인 커널 이외에 루트 파일 시스템(Root File System, 이하 RFS)이라는 것이 추가로 필요하다. PC 경우 보통 하드디스크(저장장치) 장착되어 있고, 하드디스크 내에 문서 편집기, 웹브라우저 등의 응용 프로그램 파일들, 그리고 각종 문서, 그림 파일들이 저장되어 있다. PC에서 여러 가지 작업을 하기 위해 필요한 내용들이 저장된 공간이다.

리눅스가 설치된 PC 보시면/라는 디렉토리가 있고/아래의 /bin, /sbin, /lib 등의 하위 디렉토리가 있음을 확인할 있다. 리눅스에서는/ 라는 디렉토리에 하드디스크 등의 저장장치를 연결하여 필요한 기능들을 수행할 있게 하고 있다.

이때/ 루트 파일 시스템(RFS)라고 한다. 여기에 리눅스가 동작되기 위해 필요한 기능을 함께 담고 있다. PC에서는 보통 하드디스크가 사용되지만 임베디드 시스템에서는 플래시 메모리와 같은 저장장치가 주로 사용된다.

 

 

지금까지 임베디드 리눅스란 무엇이고, 어떤 구성요소를 가지고 있는가에 대해 알아보았다. 다음 호부터는 오픈 소스를 이용하여 임베디드 시스템에 리눅스를 탑재하고 동작시키기 위한 과정을 하나씩 살펴보도록 것이다

 

 

필자 장영준 삼성전자 SW연구소에서 근무하고 있다. 사내기술연구소에서 임베디드 리눅스 제작 강의에 다수 출강한 바있고 현재 임베디드 리눅스 관련프로젝트를 진행하고 있다.

 

 

출처 : 공개 SW 리포트 7호 페이지 46 ~ 51 발췌(2007 6) - 한국소프트웨어 진흥원 공개SW사업팀 발간


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1645


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
한국소프트웨어진흥원 공개SW사업팀