저자: 『IT EXPERT, 임베디드 리눅스』저자 박재호(
jrogue@hanbitbook.co.kr)
『IT EXPERT, 임베디드 리눅스』를 기획해서 집필을 끝낼 때까지 봄, 여름, 가을이 훌쩍 지나가버리고 말았다. 휴일과 휴가 기간을 잊어버릴 정도로 정신없이 타겟 보드와 싸웠던 시기가 지나가고 어느덧 출간이 가까워져 오니 감회가 색다르다. 지금까지 필자가 진행해왔던 작업을 다시 한번 뒤돌아볼 기회를 만든 한빛미디어에 감사를 드리며, 혹시 책을 구입하게 될지도 모르는 머지않은 미래 독자분들의 현명한 선택을 위해
『IT EXPERT, 임베디드 리눅스』에는 직접적으로 나오지 않는, 이면에 숨겨진 배경 이야기를 풀어놓고자 한다.
리눅스와 임베디드 시스템의 궁합
솔직히 말해서 임베디드 시스템 이면에 숨겨진 운영체제는 최종 사용자 입장에서 보면 크게 중요하지 않다(† 주석: 이 말에 강하게 반발하는 개발자들도 있을 것이다. 하지만 임베디드 시스템을 사용하는 사람 대부분은 임베디드 시스템이 PC가 되길 결코 원하지 않는다는 점에 주목하기 바란다. 실전에서 PC처럼 동작하면 절대 임베디드 시스템을 구매하지 않겠다고 윽박지르는 사용자를 한번 만나보기 바란다). 물론 PC에 가까운 시스템일수록 최종 사용자는 운영체제에 민감하게 반응하지만, 일반적인 임베디드 장치에서 최종 사용자는 심지어 어떤 운영체제가 밑바닥에서 움직이는지 관심조차 표명하지 않는 경우가 대부분이다. 어떤 운영체제를 사용하거나 임베디드 시스템이 기대한 바와 같이 제대로 동작하면 그만이기 때문이다. 그렇다면 아무 운영체제나 사용해도 문제가 없다는 이야기일까?
유감스럽게도 개발자 입장에서는 결코 그렇지 않다. 임베디드 시스템은 메모리와 하드웨어 제약이 있을 뿐만 아니라, 웃고 즐기는 게임기부터 한 사람 일생을 바꿔놓을 전문적인 시력 측정 장치에 이르기까지 너무나 다양한 분야에 걸쳐 아름다운 스펙트럼을 뿜어내고 있다. 이런 복잡한 상황에서 매번 하드웨어를 만들 때마다 처음부터 완전히 새롭게 운영체제를 이식하고, 여기에 디바이스 드라이버나 윈도우 시스템을 개발해야만 한다면 임베디드 분야에 뛰어들 그야말로 간 큰 개발자는 아무도 없을 것이다. 보통 참조 하드웨어를 만든 다음 이를 토대로 자신에게 필요한 간단한 운영체제와 라이브러리를 구축하면 정말 사골을 여러 번 재탕해서 끓이듯 두고두고 쓰기 마련이다. 하지만 이러한 관행이 임베디드 시스템에 접근하려는 초보 개발자의 진입장벽이 되어, 결국 여기저기서 개발 경력이 풍부한 경험자만 뽑으려고 치열하게 다투는 원인으로 작용하고 만다. 리눅스는 이러한 관행을 타파하여 한 단계 높은 단계에서 임베디드 시스템을 개발할 수 있도록 만들어줌으로써 임베디드 시스템에 대한 진입장벽을 낮추는 작용을 할 수 있다.
여기서 진입장벽이 낮다고 해서 리눅스를 만병통치약으로 취급하면 곤란하다. 어차피 임베디드 시스템은 하드웨어-운영체제-소프트웨어 세 박자가 절묘하게 맞아야 하기 때문에 운영체제인 리눅스만 도입한다고 해서 모든 두통거리를 해결할 수 있다는 환상은 이 자리에서 바로 깨버리기 바란다. 하지만 리눅스는 다른 운영체제가 절대 쫓아오지 못할 멋진 특성이 많이 있다. 그 중에서 가장 큰 특성은 리눅스가 처음부터 표방하고 나선 공개 소스 정책이다. 리눅스는 일부 상업적인 목적으로 만든 디바이스 드라이버 모듈을 제외하고는 모든 원시 코드를 뜯어볼 수 있다. 오픈 소스 정책에 반감이 있는 개발자들은 고치지도 못하는 원시 코드를 보고 있으면 무슨 소용이 있냐고 비아냥거릴 수도 있다. 물론 전적으로 동감하기는 어렵지만 최종 사용자를 위한 일반 응용 프로그램 단에서는 어느 정도 일리가 있는 이야기이다. 하지만 과연 임베디드 분야에서도 그럴까? 임베디드 시스템 개발자들은 수동적으로 남이 주는 소프트웨어를 받아 먹는 젖먹이가 아니다. 활발하게 하드웨어와 소프트웨어 부문을 연결시켜서 동작하도록 만드는 전형적인 투사들이다. 이러한 개발자들에게 공개 소스는 천군만마와 같다. 임베디드 시스템에서 두 번도 아닌 딱 한 번만 각종 소프트웨어를 디버깅해봐라! 필자가 만일 윈도우 CE나 임베디드/XP를 주제로 삼아서 동일한 책을 집필했다면 피상적인 이야기만 늘어놓을 수 밖에 없었을 것이다. 마치 본네트조차 열 수 없는 자동차 수리 방법을 설명하는 공학도처럼…
구체적으로 어떤 부문에 초점을 맞추고 있는가?
『IT EXPERT, 임베디드 리눅스』는 전반부에 임베디드와 무관한 일반적인 리눅스에 대한 설명을 조금 꺼낸 다음, 중반부에 타겟 보드 몇 개와 (임베디드 리눅스) 배포판을 대략적으로 설명하고, 후반부에 기존 인터넷에 돌아다니는 디바이스 드라이버 일부를 발췌해서 가공없이 그대로 소개하는 기존 임베디드 리눅스 서적의 판에 박힌 구성 방식에서 탈피하여 "임베디드"와 "리눅스"라는 양대 주제를 균형있게 저울질하면서 처음부터 끝까지 자기 손으로 x86(PCM-5824)/ARM(아사벳, EZBOARD, TBEL1110)/MPC(SWAN-II) 타겟 보드에서 제대로 동작하는 리눅스 환경을 구축할 수 있도록 도와주는 방식을 따른다.
책 구성 방식을 좀더 상세하게 알아보자.
I부에서 리눅스를 임베디드 시스템에 맞춰서 이론적으로 조감하며, II부에서 임베디드 리눅스를 실제 시스템 개발에 적용할 때 바로 적용할 수 있는 구체적인 방법론을 설명하며, III부에서 실전에 들어가서 교차 개발 환경과 네트워크 설정부터 시작해서 부트 스트랩 로더와 커널 이식, 루트 파일 시스템 구성, 실시간 리눅스 커널과 윈도 시스템 이식과 패키징 방법에 이르기까지 임베디드 리눅스 시스템을 타겟 보드에 올리기 위해 필요한 전체 과정을 빠짐없이 다룬다.
하지만, 전반적인 내용을 빠짐없이 다루느라 폭이 넓어진 만큼 이 책은 깊이 있게 커널 내부 구조를 설명하거나 구체적인 리눅스 디바이스 드라이버 제작 방법을 소개하지는 않으며(† 각주: 커널과 디바이스 드라이버에 대해서는 이미 한빛미디어에서
『리눅스 커널의 이해』와
『리눅스 디바이스 드라이버』라는 멋진 책이 나와있다.
『리눅스 커널의 이해』 원서인
『Understanding the Linux Kernel』 2판이 커널 2.4에 맞춰 곧 나온다는 희소식이 들여온다), 실시간 커널과 윈도 시스템에서 동작하는 응용 프로그램을 작성하는 방법을 소개하지도 않으므로 아무쪼록 목적에 맞춰 신중하게 선택하기 바란다.
누구를 대상으로 집필했는가?
『IT EXPERT, 임베디드 리눅스』는 중/고급 임베디드 시스템 개발자를 대상으로 한다. 하드웨어 쪽에서 접근하는 경우와 소프트웨어 쪽에서 접근하는 개발자 모두를 충족시키기 위해 최대한 균형을 맞추려고 노력했다. 하지만 리눅스 분야에 어느 정도 지식이 있어야 어려움 없이 뿌듯한 기분으로 책 내용을 독파할 수 있을 것이다. 리눅스에 대해서도 전혀 문외한인데다 임베디드 환경 역시 처음으로 접하는 초보자라면 후반부(II부 끝부분부터 III부 전체)가 상당히 어렵게 다가올 수 있다는 사실을 미리 경고하고 싶다.
특히 III부에 기술한 절차에 따라 이식 작업을 진행하다 보면 뭔가 쉽게 결과를 얻을 수 있을 법도 한데, 막상 직접 해보면 결코 만만하지 않다는 것을 경험하게 될 것이다. 다시 말해, 임베디드 시스템 특성상 하드웨어 환경에 따라 조금씩 손봐야 할 부분이 지천에 널려있기 때문에 이 책을 그저 그런 "~ 따라하기"식의 서적이라고 착각하면 곤란하다. "IT EXPERT"에서 "EXPERT"가 의미하는 바를 생각하면서, 임베디드 세계에서는 오직 끈기와 투지만이 성공적인 프로젝트 진행을 이끌어낸다는 사실을 명심하면 좋겠다.
좀더 실질적인 정보를 제시하기 위해
『IT EXPERT, 임베디드 리눅스』 본문에서 독자 범위와 관련한 내용을 발췌해서 소개하겠다. 다음에 해당하는 개발자라면 충분히 책을 읽는 과정에서 지적 욕구를 충족할 수 있을 것이다.
- 임베디드 리눅스 관련 프로젝트 관리자: 프로젝트 관리자는 도대체 어떤 절차를 밟아서 임베디드 리눅스를 타겟 보드에 이식하는지 전반에 걸친 과정 자체를 충분히 이해할 필요가 있다. 이 책 II부에서는 임베디드 리눅스를 채택해서 프로젝트를 진행할 때 필요한 각종 절차를 다루고 있으므로 이를 참조하기 바란다.
- 임베디드 리눅스 관련 이식 담당 개발자: 임베디드 리눅스를 타겟 보드에 직접 이식해야 하는 개발자는 프로젝트 진행에 있어 한시가 급한 경우가 대부분이다. 특히 이 책 III부에서는 구체적으로 교차 개발 환경부터 부트 스트랩 로더와 커널 컴파일, 루트 파일 시스템 구축과 패키징에 이르기까지 임베디드 리눅스 이식과 관련한 거의 모든 내용을 빠짐없이 다루므로 이를 참조하기 바란다.
- 임베디드 리눅스 위에서 응용 프로그램을 제작하는 개발자: 이식과 관련이 없는 개발자라고 할지라도 일단 환경이 갖춰져야 그 다음 작업을 진행할 수 있다. 이 책 III부에서는 교차 개발 환경 구축 방법과 실시간 커널/윈도 시스템 설치 방법을 다루고 있으므로, 응용 프로그램을 제작하는 개발자에게 실질적인 도움을 줄 수 있을 것이다.
- 리눅스 호사가: 일반 리눅스 호사가들은 배포판을 사용하지 않고서 스스로 뭔가를 해보려고 시도하는 경우가 많다. LFS(Linux From Scratch)와 같은 문서가 어느 정도 도움을 주긴 하지만 x86 플랫폼에 국한되어 있으므로, 이 책을 통해 보다 다양한 플랫폼(x86, ARM, MPC)에서 동작하는 리눅스 시스템 구축 정보를 얻을 수 있을 것이다.
- 임베디드 리눅스를 적용할지 말지 고민하는 개발자: 비록 이 책을 철저하게 임베디드 리눅스를 타겟 보드에 이식하기 위한 실전 위주로 기술했지만, 임베디드 리눅스를 처음 접하는 개발자를 위한 기본적인 이론에 대해서도 충분히 다루고 있다. I부 전체와 II부 일부에 임베디드 리눅스와 관련한 기본 지식을 실어놓았으므로 이를 참조하기 바란다.
집필하면서 힘들고 어려웠던 뒷 이야기
책을 집필하면서 여러 가지 어려움이 있었다. 물론 가장 큰 어려움은 짧은 집필 기간과 준비 부족을 들 수 있지만, 이런 요인들은 너무나도 일반적이므로, 이를 제외한 나머지 인상 깊은 몇몇을 소개하려고 한다.
가장 먼저 생각나는 어려움은 바로 머리 속으로만 생각하지 않고 손가락을 사용해서 테스트를 여러 번 거쳐야 했다는 점이다. 솔직히 일반 개발자가 리눅스를 이식하는 경우는 한번 성공하면 그것으로 끝이다. 하지만 책으로 나올 정도로 지식을 집약하기 위해서는 안될 경우에는 왜 안되는지를, 잘 될 경우에는 다른 최적화 방안이 없는지를 항상 자문 자답해야 하는 어려움이 있다. 특히 성공하고 난 다음 타겟 보드 별로 반드시 똑같은 절차를 그대로 밟아서 다른 환경 요인과 무관하게 동작한다는 사실을 확인하는 반복 작업은 정말 고통스러웠다. 또한 특정 부문을 집필하다 더 좋은 방법이 떠오를 경우 앞/뒤 부문을 흐름에 맞게 수정하는 작업과 나중에 소프트웨어 판올림이나 버그 수정으로 인해 내용을 바꾸는 작업 역시 결코 만만하지 않았다.
『IT EXPERT, 임베디드 리눅스』에 나오는 중간 중간에 고개를 내미는 현장 사례는 바로 이러한 노력을 반영하고 있다.
또 다른 어려움은 플랫폼에 중립적이라는 리눅스 특성을 최대한 잘 표현하기 위해 조금 무리를 해가면서 x86, ARM, MPC CPU를 모두 다루었다는 점이다. 특히 ARM과 같은 경우에는 TBEL1110이 단종되었다는 소식을 듣고서 EZBOARD로 방향을 급선회하는 바람에 후반 작업이 길어져버리고 말았다. 그밖에 타겟 보드 종류가 많다 보니 잔 고장에 일일이 대응해야 했으며, 매번 타겟 보드에 맞춰서 제대로 동작하는 리눅스 커널을 이리저리 바꿔가면서 테스트하는 작업이 상당히 부담스러웠다. 하지만, 이런 노력의 결과로
『IT EXPERT, 임베디드 리눅스』 III부를 보면 알겠지만, 커널 이식 이후부터는 점차로 CPU 차이에 따른 플랫폼 특성이 사라지기 시작하면서 상위 단계에서 임베디드 시스템을 다루고 있다는 느낌이 들기 시작할 것이다.
마지막으로 소개할 어려움은 임베디드 리눅스를 타겟 보드에 올려서 동작하는데 필요한 요소를 적재적소에 배열하는 작업을 들 수 있다. 목차를 따라가다 보면 느끼겠지만,
『IT EXPERT, 임베디드 리눅스』에 나오는 각 부/장들은 서로 유기적으로 움직이도록 구성해 놓았다. 예를 들어 I부에서 실시간 리눅스 커널에 대한 설명이 나오면 II부에서는 실시간 리눅스 커널을 개발 과정에서 활용하는 전략과 전술을, III부에서는 구체적으로 실시간 리눅스 커널을 타겟 보드에 올리는 방법을 연결해서 설명한다. "임베디드"와 "리눅스"라는 주제를 놓고서 개발자에게 꼭 필요한 내용을 부족함 없이, 그러나 도가 지나쳐서 자신이 잘 아는 한쪽 부문으로 넘쳐버리지 않게 재배치하는 작업에 상당한 노력을 기울였으므로
『IT EXPERT, 임베디드 리눅스』를 읽는 도중에 임베디드 리눅스를 구성하는 각 요소 사이에 존재하는 균형과 조화를 읽을 수 있을 것이다.
공식 홈페이지 소개
리눅스는 상당히 빠르게 변모하고 있다. 집필이 끝나갈 무렵에 이미 gcc 3.2와 리눅스 커널 2.4.19(그리고 ARM을 위한 rmk 패치)가 등장했으며, 내년 상반기면 커널 2.6(3.0으로 이름을 붙일 가능성도 전적으로 배제할 수 없다)이 등장해서 운영체제 세계에 또 다른 파란을 불러 일으킬 것으로 보인다. 따라서 종이책이기 때문에 어쩔 수 없이 감내해야 하는 태생적 한계인 "고착성"을 극복하기 위해 시시각각 변하는 기술적 진보에 대응할 수 있도록 온라인 매체을 동원하여 필요한 자료를 지속적으로 추가할 필요가 있다. 이에 출판 시점에 맞춰 한빛미디어 관계자 분들의 도움을 빌어 이 책 공식 홈페이지를 열어놓았다.
http://embedded-linux.hanbitbook.co.kr
아무쪼록 이 홈페이지와 부속 게시판을 통해 다양한 현장에서 실제로 겪었던 경험담을 나눌 수 있는 멋진 놀이터가 될 수 있기를 기대한다.
"Just For Fun!"