|
임베디드 계발을 위해 리눅스를 선택하셨다면, 먼저 리눅스 커널의
전반적이 이해가 있어야 원활히 동작하는 드라이버계발을 할수있습
니다.그런의미에서 한빛미디어나 오라일리책을 권해드리고 싶군요.
1. 리눅스 커널의 이해
==> 커널의 전반적인 이해
2. 리눅스 디바이스 드라이버
==> 디바이스드라이버 계발를 위한 필독서
3. 러닝 리눅스
==> linux os사용을 위한 책
4. 정보문화사의 "Beginning Linux Programming : 제3판 "
==> linux상에서 어플계발
임베디드 시스템 펌웨어 분석
- Ed Sutter 저/성원호 역 | 에이콘출판사
- 개인적으로 강추입니다. 펌웨어 작성의 전반적인 내용을 다루고 있습니다. 모니터기반의 디버깅, 간이 플래시 메모리 파일시스템, 메모리 조각모음기법, 이더넷 접속법 등등
임베디드 웹서버를 위한 TCP/IP - Jeremy Bentham 저/박종진,이동은,이형수 공역 | 에이콘출판사
- 간단한 웹서버의 구현을 설명합니다. PIC에서 구현하는 예제도 나와있습니다.
MicroC/OS-Ⅱ 실시간 커널 - Jean J. Labrosse 저/성원호 역 | 에이콘출판사
- RTOS에 관심이 있으시다면 꼭 읽어보셔야겠죠.
Embedded Systems Building Blocks - Jean J.Labrosse 저/성원호 역 | 에이콘출판사
- 여러 테크닉을 소개합니다. 고정소수점을 이용한 실수 계산이나 ADC의 사용법이라던지.. 키 매트릭스의 사용법 등등
재미있는 임베디드 시스템 디자인 - Arnold S. Berger 저/이영동 역/성원호 감수 | 에이콘출판사 |
- 이건 좀 어렵더군요. 설계 사례 소개와 설계시 고려해야 할 사항들에 대한 설명입니다.
임베디드 하드웨어 이해와 설계 - 존 캣솔리스 저/박재호,이해영 공역/육경환 감수 | 한빛미디어
- 각종 소자의 사용법 등 기초적인 내용을 자세히 설명합니다. 읽어볼만 합니다.
C/C++로 작성하는 임베디드 시스템 프로그래밍 - 마이클 바 저/이석주 역 | 한빛미디어
- 얇은 책입니다. 말 그대로 C/C++을 이용한 펌웨어 작성의 기초를 설명합니다..
-----------------------------------------------------------
리눅스 임베디드 & 시스템프로그래밍 서적
임베디드 리눅스나 시스템 차원에서의 리눅스 프로그래밍은 리눅스에 대해 알고 있다는 가정 하에 중상급자나 실무자가 접근할 수 있는 한 차원 높은 리눅스 세계다. 임베디드 리눅스는 우리가 접할 수 있는 범용적인 컴퓨터에서 좀더 실용적이고 간결한 인터페이스로 구성된 장치에 탑재 가능한 OS의 꿈을 이뤄냈다. 또한 기본적으로는 오픈소스라는 장점 때문에 임베디드 리눅스는 그 잠재성을 널리 인정받고 있다. 좀더 범용적인 컴퓨팅 환경에서의 시스템 프로그래밍 또한 마찬가지이다. 범용적인 환경에서 좀더 최적화된 환경을 구성해내는 데 있어 리눅스는 탁월하다. 이에 이번 달에는 범용 인터페이스에서의 시스템 프로그래밍과 다양한 인터페이스에서의 임베디드 리눅스 프로그래밍을 중점적으로 다룬 서적들을 소개하고자 한다.
기획ㆍ정리 | 강경수 기자 |elegy@korea.cnet.com
글 | 고려대 하나와영 벤치마크팀 | http://oaz.korea.ac.kr
사진 | 김성아 기자 | ksa@korea.cnet.com
서적협찬 | 강남컴퓨터서적 | http://www.kangcom.com
지난 2002년 11월부터 3개월 동안 대표적인 임베디드 리눅스 포털 사이트인 ‘LinuxDevices.com’에서 실시한 ‘임베디드 리눅스 개발자 대상 설문 조사’에 의하면 “향후 2년 이내에 임베디드 리눅스를 사용하게 될 확률이 매우 높다 혹은 이미 사용중이라고 답한 사람이 67% 이상으로 조사돼 임베디드 리눅스에 대한 개발자들의 큰 기대를 보여주고 있다. 실제로 이런 기대에 부응이라도 하듯이 임베디드 리눅스는 주로 PDA, 휴대폰 등의 휴대 단말기 시장에서 이미 다양하게 적용되어 제품화 단계를 거쳤거나 시제품으로 나와 있는 예가 많다. 이러한 임베디드 환경에서 리눅스가 우리나라에서도 인기를 끄는 휴대 단말기 시장 외에 네트워크 장비, 통신기기, 가전제품 등에도 그 적용이 이뤄질 것이라고 하니 사뭇 기대된다.
리눅스 환경은 많이 접해보았지만 임베디드 리눅스는 생소한 독자들도 있을 것이다. 임베디드 리눅스는 기본적으로 범용적인 컴퓨팅 환경에서의 키보드, 마우스, 모니터 같은 것들과 거리가 먼 것을 지향하는 환경이다. 때로는 터치 스크린이 그 인터페이스가 될 수도 있고, DVD 플레이어 등의 재생 버튼 등이 그것이 될 수도 있다. 이처럼 임베디드 환경에서의 리눅스 프로그래머는 시스템적 차원에서의 프로그래밍을 해야 하는 셈이다. 운영체제 그 자체를 고치는 것 그리고 자신만의(또는 회사에서 제시한) 어떤 코어나 인터페이스에 맞추어 개별화시키는 작업은 리눅스에 대한 더 심화적인 이해를 요구한다.
아직까지 임베디드 리눅스 환경은 별다른 표준이 정해져 있지 않은 상태이다. 즉, 각각의 기기 또는 인터페이스마다 최적화된 운영체제가 탑재되고 그 운영체제는 특별한 문제가 있지 않는 한 버전업 등의 변화가 없는 운영체제가 된다. 이번 북 벤치마크를 통해 임베디드 리눅서가 되어 자신만의 하드웨어에(범용적인 하드웨어라도 관계는 없다) 자신만의 리눅스를 구성할 수 있는 계기가 되면 어떨까? 지난 2001년 2월에 다뤄진 리눅스 프로그래밍과 2002년 1월의 ‘리눅스 시스템 & 네트워크’에 이어 새로운 2003년 버전의 따끈따끈한 주제를 담은 서적들을 벤치마크했다.
도서 선정 기준
이번 주제는 2002년에 다뤄진 리눅스 시스템 프로그래밍과 상통하는 부분이 있다. 그러나 전체적으로는 범용적 시스템 프로그래밍에서 특화된 시스템 프로그래밍으로 바뀐 것이 큰 변화라 할 수 있겠다. 따라서 크게 임베디드 리눅스 부분과 기존보다 심화된 리눅스 시스템 프로그래밍 부분으로 나누어 책을 선정했다.
임베디드 리눅스는 이론보다 실용적인 부분을 다룬 서적을 선정했다. 이는 임베디드 리눅스가 워낙 특화된 환경에서 다양하게 활용되고 있기 때문이다. 『IT EXPERT 임베디드 리눅스(한빛미디어)』, 『임베디드 시스템 & 임베디드 리눅스』, 『임베디드 리눅스(정보문화사)』 등이 바로 그것이다.
시스템 프로그래밍은 커널을 심화분석한 『리눅스 커널 분석 2.4』, 『리눅스 매니아를 위한 커널 프로그래밍』, 『리눅스 커널의 이해』이다. 또 『Linux Programming Bible』과 같이 리눅스 커널과 임베디드를 같이 다루고 있는 서적도 선택했다. 이외에 『유닉스 시스템 프로그래밍』과 같은 유닉스 환경에서의 시스템 프로그래밍도 같이 살펴보았고 임베디드 분야와 외적이긴 하지만 『리눅스 클러스터로 만드는 슈퍼 컴퓨터』와 같은 분산 환경에서의 리눅스 프로그래밍에 관한 서적도 다뤘다.
평가 기준
선정된 서적은 그 주제의 분류 또한 다양한 편이다. 그러나 대부분 중급자 이상을 타겟으로 하는 리눅스 관련 서적에 있어 어떤 한 가지 주제만을 가지고 서적을 선정하여 그 양과 질을 따지는 것은 문제가 있다. 따라서 선정된 서적의 주제에 따라 주제를 어느 정도 충실하게 표현했는지, 가령 커널 분석 서적의 경우 주석조차 없는 단순한 소스의 나열이 내용의 대부분을 차지하는 경우 좋지 않은 평가를 줄 수밖에 없었다. 특히 리눅스 서적의 특성상 온라인 문서나 포럼 등을 통해 얻을 수 있는 정보 외에 책을 통해서만 얻을 수 있는 정보가 어느 정도 있을 것이라는 판단도 하게 되었다.
Linux Programming Bible
권수호/글로벌/2002년 6월 발행/3만원
리눅스 커널 소스 분석, 실제 임베디드 시스템에 적용, RTLinux의 설명으로 구성되어 있다. 리눅스 커널 소스 분석이 가장 많은 분량을 차지하고 있는데 버전 2.4를 기준으로 소스 코드와 설명이 나와 있다.
본문에는 소스 코드를 상당히 많이 실었다. 덕분에 분량이 1000여 페이지가 되었는데 코드만 한꺼번에 나열한 것이 아니라 개념 설명과 함께 부분 코드, 코드에 대한 설명이 이어지고 있다. 개념 설명에 있어 이론에만 치중해서 어려운 글과 그림만 남발하기보다는 실제 코드 분석에 도움이 되도록 간단하게 중요한 내용을 실었다. 많은 코드가 단지 책을 무겁게 만드는 용도가 아닌 실제 커널 동작에 중요한 부분만 떼어 놓았고 주석만으로 부족한 부분에 대한 설명도 코드마다 달려 있다.
소스 분석에는 네트워크나 디바이스 드라이버, USB, IEEE1394, PCMCIA 등의 다양한 주제에 대한 내용도 담고 있는데 다른 커널 분석 서적에서는 쉽게 찾을 수 없는 부분이고, 디바이스 드라이버 개발자들에게 도움이 될 수 있을 것이다.
그 다음으로는 실제 보드에 임베디드 리눅스를 심는 과정을 통해 리눅스 커널의 수정과 임베디드 시스템에의 적용을 예시해 주고 있다. 커널 분석에서와 같은 편집으로 매우 실용적이고 실제 개발자를 위한 배려가 느껴진다. RTLinux의 경우는 앞에서의 내용에 비해서 권말부록처럼 느껴지는 면이 있기 하지만 실시간 운영체제를 공부하거나 개발하려는 사람에게는 귀중한 자료가 될 듯 싶다.
독자들은 리눅스 커널의 분석과 더불어 임베디드 시스템이나 실시간 운영체제로 확장시킬 수도 있을 것이다. 그러나 많은 내용을 다루다 보니 설명이 미흡한 부분도 눈에 띈다. 주로 디바이스 드라이버 설명에서 그런 경향이 많은데, 이건 필자도 책에서 밝힌 것이지만 혼자 많은 양의 자료를 수집하고 정리하다 보니 모든 내용에 충실할 수 없었다는 것이다. 그리고 실제 코드의 분석이 주가 되다 보니 운영체제나 임베디드 시스템의 기본 원리나 개념에 대한 설명도 전문서적보다는 부족할 수밖에 없다. 운영체제의 동작원리를 배우려는 사람보다는 실제 구현을 위해 리눅스를 분석하거나 리눅스 디바이스 드라이버 제작을 공부하려는 사람, 임베디드 시스템으로 리눅스를 포팅하기 위해 공부하는 사람에게 적합한 서적이다.
리눅스 커널의 이해
Daniel Pierre Bovet, Marco Cesati 지음 심마로, 이호 옮김/한빛미디어/2001년 12월 발행/3만5000원
리눅스의 가장 큰 매력이라고 한다면 공개되어 있는 소스를 자신의 기호에 맞게 수정하여 나만의 OS 환경을 꾸밀 수 있다는 것이다. 리눅스를 조금이라도 접해본 사람이라면 이런 리눅스의 매력을 알고 있을 것이다. 하지만 막상 공개되어 있는 소스를 자신이 원하는 방식으로 꾸미고 싶어도 어디서부터 시작해야 하는지, 그리고 무엇을 해야 할지 막막한 것이 현실이다. 그런 의미에서 이 책은 리눅스라는 운영체제를 이해하는데 더없이 좋다고 할 수 있다.
메모리와 프로세서, 파일 시스템과 입출력 등 운영체제의 가장 기본이 되는 내용들을 함수 단위까지 세부적으로 자세히 설명하고 있지만 네트워크 분야는 그 내용의 방대함으로 인해 이 책에서는 다루고 있지 않다.
하드웨어적인 내용들이 많이 포함되어 있기 때문에 리눅스라는 운영체제의 특징뿐만 아니라 자료구조, 알고리즘, 각종 프로그래밍 기법 등을 어느 정도 알고 있어야 책의 내용을 이해하는데 무리가 없을 것이다. 그만큼 시스템의 최하부 구조까지 자세하게 설명을 하고 있다는 얘기이다. 주로 i386 계통의 하드웨어에서 동작하는 리눅스의 특징을 다루고 있어 인텔 계열의 CPU 특징과 어셈블리 언어에 대하여 사전 지식이 있어야 내용을 소화해 낼 수 있을 것이다.
매 장에서 다룰 내용을 간략하게 설명하고 그와 관련된 용어나 이론 등을 보충한다. 그런 후 각각의 이론이나 기술들이 실제 소스 코드 수준에서 어떤 식으로 구현되어 있는지 함수를 하나씩 보면서 설명한다. 함수를 설명할 때도 함수의 역할과 의미를 번호로 매겨가며 순차적으로 자세히 설명하는 방식을 많이 사용하고 있다. 이런 방식은 단순한 함수의 기능을 알고 가는 것을 넘어서 내부적으로 어떤 방식으로 시스템이 돌아가고 있는지 이해를 하는 데 큰 도움이 된다.
함수의 설명이 끝나면 매 장의 마지막 부분에는 리눅스의 차기 버전에서 그 내용이 어떤 식으로 변할 것인지 간략하게 얘기하고 있다. ‘리눅스 2.4 예상’이라는 소제목으로 다음 버전의 리눅스의 모습을 다루고 있는데, 사실 이 책이 출판된 시기가 리눅스 2.4가 나오기 바로 전이고, 출간 후 시간도 오래 지났기에 ‘예상’이라는 단어가 지금 보기에는 적절하지 않아 보인다. 하지만 리눅스 2.4의 내용이 과거의 리눅스에서 어떻게 달라졌는지 정리해준 부분은 리눅스가 어떻게 변했는지를 알려주는 중요한 힌트가 된다는 점에서 적은 내용이지만 꼭 필요한 부분이라 하겠다.
리눅스의 커널을 다룬 서적들이 많이 있지만 이 책 만큼 자세하게 다룬 것은 그리 많지 않다. 내용이 어려운 만큼 책의 내용을 자신의 것으로 소화한다면 리눅스라는 운영체제가 더 이상 해커들의 전유물은 아닐 것이다. 전체적으로 깔끔한 번역과 많은 양의 주석은 책의 내용을 좀더 쉽게 이해할 수 있도록 도와준다.
IT EXPERT 임베디드 리눅스
박재호/한빛미디어/2002년 7월 발행 /3만7000원
저자가 국내 유수 보드 공급업체의 보드를 사용해 개발의 전 단계를 각 플랫폼에서 테스트하면서 집필하여 축적해놓은 각종 노하우를 바탕으로 이론으로만 끝나지 않는 실질적인 방법론과 각종 간단 프로젝트 예시와 구현이 실려 있다.
일반적으로 임베디드 서적의 영문 원서나 번역 서적의 경우 한국 실정에 맞지 않거나 사용하는 언어의 의미 차이로 인하여 애를 먹기 쉽다. 하지만 이 책은 국내 실정에 알맞으면서 자세한 예까지 들어 임베디드 리눅스를 처음 접하는 사람에게 적합하다. 또한 필자의 실무경험 및 임베디드 전반에 대해 자세한 정보를 수록하고 있어 학교나 기업에서 임베디드 관련 분야를 처음 접하는 사람에게 권하고 싶은 책이다. 특히 원서 또는 전공서적을 접하기 전에 먼저 이 책을 보고 원서를 접하는 것이 좋은 접근방법이라고 생각한다. 전공 원서나 두꺼운 책을 먼저 접근하는 것보다 이 책 저자의 두터운 노하우를 바탕으로 기본기를 다루면 좋을 것이다. 부팅부터 이식 그리고 응용 프로그램 작성 및 패키징이 모두 초보자 입장에서 설명하고 같이 따라하는 방식으로 접근하기 쉽게 구성해 놓았다. 마치 소설책을 읽듯이 재미있게 읽을 수 있을 것이다.
임베디드 분야의 책 중에서 국내에서 출판되기 힘든 서적이 나왔다고 평가하고 싶다. 하지만 이 책은 깊이 있는 부분을 다루지 않고 있다. 그리고 초보자의 입장에서 개념과 설명을 위주로 소설 쓰듯이 써졌기 때문에 약간 내용이 가볍다는 생각이 들 수 있다. 그러다 보니 방대한 내용을 대충 넘어가는 경향이 있다. 그 예로 EXT2 파일 시스템에 대해 리눅스에서는 미닉스 파일 시스템의 단점을 극복하기 위해 사용했다고 언급되어 있을 뿐 그 단점이 어떤 단점인지 자세한 설명은 없다. 또한 현재의 EXT에도 문제가 있다고 말하지만 그 문제에 관한 설명이 누락되어 있어 자세한 부분을 파악하기에는 내용이 너무 적다.
임베디드 리눅스
Craig Hollabaugh 지음 박재희 옮김/정보문화사/2002년 9월 발행/2만원
임베디드 리눅스를 독자들에게 설명해 주기 위해 설계된 실용적인 인터페이스 예제들을 담고 있다. 기본적으로 리눅스의 셸 프로그래밍과 C 그리고 Make와 같은 컴파일 유틸리티 사용 지식이 요구된다. 반갑게도 이 책은 어셈블리까지 요구하고 있지 않다. 덕분에 예제를 디버깅할 때 수고를 약간이나마 덜 수 있을 것이다. 그러나 이 책은 하드웨어 디자인 과정을 포함하고 있어 메모리나 CPU 등 전자회로 분야의 지식이 필요할 것이다.
우선 5장 ‘디버깅’에서는 이더넷 네트워크로 타겟 보드 디버깅을 위해 gdb와 gdbserver를 구성한다. 가령 HelloWorld의 크로스 컴파일이 된 버전은 원격으로 실행하고 디버깅한다. 7장 ‘병렬 포트 인터페이스’에서는 x86 타겟 보드의 병렬 프린터 포트를 위해 교류회로 인터페이스를 설명하고 있다. /proc 디렉토리 목록을 사용하는 hello world_proc_module이라고 불리는 사용자 디바이스 드라이버에 대해 소개한다.
총 13장으로 구성된 이 책에서 가장 흥미로운 장을 꼽는다면 9장과 11장이다. 9장은 메모리에 관련된 내용으로 하드웨어에서 메모리 입출력은 중요한 부분이다. 11장은 타이머를 설계하는 부분인데 타이머와 동기화같은 시간에 관련된 문제는 프로그램을 실세계에 시뮬레이션 하는 과정에서 매우 중요한 위치를 차지한다.
이 책은 높은 지식을 요구하며 하드웨어 엔지니어나 소프트웨어 개발자이거나 시스템 통합자 또는 애플리케이션 인터페이스를 위해 임베디드 리눅스를 시작한 제품 관리자를 위해 쓰여졌다. 책의 어느 페이지에도 이미지 설명이나 독자들이 부딪치게 될 사항들에 대한 언급이 없으므로 하드웨어적 지식이 전무한 사람이 보려면 머리가 꽤나 아플 것이다. 하지만 리눅스 애플리케이션 디버깅에 숙련된 사람이나 리눅스 모듈 프로그래밍이 가능한 사람 또는 커널을 직접 분석하고 탐험해 본 사람은 편하게 볼 수 있을 것이다. 기껏해야 모르던 몇 가지 API 함수나 구조체, 상수를 접해보는 것일테니 말이다. 특히 12장은 프로그래머보다 아파치 서버를 다루는 등의 관리자로서의 역할을 필요로 하는 부분이므로 관심있는 독자들은 참고하기 바란다.
리눅스 커널 분석 2.4
박장수/가메출판사/2003년 1월 발행/2만5000원
운영체제 공부에 있어 당연히 운영체제의 핵심인 커널에 대한 이해가 선행돼야 한다. 이 책은 이러한 커널에 대한 해석과 원리를 최신 리눅스 커널을 중심으로 풀어 쓰고 있다. 특히 저자는 이미 95년에 『LINUX hacker들을 위한 UNIX KERNEL 완전분석으로 가는 길』이라는 문서를 내놓았다. 따라서 이 책은 최신 리눅스 커널을 위한 그 개정판이라 할 수 있다.
저자는 책을 읽을 대상을 어느 정도 리눅스에 능숙하고 프로그래밍 문법에 대한 기초를 갖춘 중상급자로 한정하고 있다. 이는 머리글에서 저자가 밝히듯이 ‘C언어의 기본 문법을 이해하고 있을 것’, ‘리눅스 커널을 컴파일 및 설치 해봤을 것’, ‘어셈블리 언어의 기본 문법을 이해하고 있을 것’ 등으로 독자들이 선행해야 할 것들을 권고하는 부분에서 알 수 있다.
하지만 특별히 리눅스에서 디바이스 드라이버를 개발하거나 시스템 콜을 다루려는 사람이 아니라면 어셈블리 언어에 대한 기초가 없더라도 책을 보는 데 어려움이 없을 것이다. 리눅스나 유닉스 등 운영체제에 대한 기초적인 지식과 C 언어 문법을 해석할 수 있는 능력만 있더라도 이 책으로 리눅스 커널에 대해 공부하면서 다른 여타의 지식도 습득할 수 있을 것이다.
특히 운영체제를 만들어 보려는 이들에게 도움이 될 수 있는 것은 리눅스의 부팅과정부터 시스템 초기화 과정을 자세히 설명하고 있어서, 자작 운영체제의 가장 어려운 부분일 수 있는 첫 부팅까지의 단계에 훌륭한 참고서가 될 수 있겠고, 다른 운영체제들(윈도우 98, 윈도우 2000, 유닉스)의 커널과 비교해서 설명하는 것 등이 좋은 평가를 받았다.
요약해서 설명하자면 리눅스 커널 소스에 대한 저자의 주석집이라 할 수 있다. 커널에 대한 저자의 깊은 이해를 엿볼 수 있으며 리눅스를 공부하기 위해 커널을 분석하려는 사람들에게 권하고 싶다. 하지만 현재 버전 커널에 대한 분석과 설명은 알차지만 커널의 문제점을 지적한다거나, 이를 이용하여 여타 시스템과의 상호작용에 응용한다는 등의 뭔가 흥미를 줄만한 요소가 부족한 것이 아쉽다. 그 밖의 저자가 운영하고 있는 홈페이지(www.kernelman.com)에 내용 중 보충하거나 수정되어야 할 부분에 관한 글이 올라오고, 기타 궁금한 점을 묻고 답할 수 있다.
리눅스 매니아를 위한 커널 프로그래밍
조유근, 최종무, 홍지만/교학사/2002년 1월 발행/2만2000원
나름대로 다른 서적과의 차별화를 이루고자 한 흔적이 느껴지는 책이다. 대학교 학부 과정의 강의자료를 토대로 만들어졌다는 소개를 굳이 보지 않더라도 강의시간에 프로젝터를 통해 볼 수 있었던 여러 가지 도표들과 그림, 소스 코드들 등을 보여주고 그에 대한 부연설명을 하는 것으로 엮어진 방식은 강의를 듣는 당사자의 입장에서 그 흐름을 따라가며 다루는 내용을 이해시키려는 저자들의 노력이 엿보인다고 할 수 있다.
다만 역시 강의자료를 토대로 만들어졌다는 것의 한계일까? 실제 커널을 설명하고 있는 분량이 그다지 많은 부분을 차지하고 있지 않다. 기타 커널을 다루고 있는 기존의 서적들이 가질 수밖에 없었던 엄청난 부피와는 달리 약 250페이지 정도의 설명을 담고 있는 것을 제외하고는 이후 책의 거의 절반에 해당하는 페이지들이 모두 소스 코드로 채워져 있다는 점은 책의 표지에도 나와 있는 ‘백견불여일타’(百見不如一打, 백번 보는 것보다 한번 쳐보는 것이 낫다)를 뒷받침하려는 의도였겠지만 그와는 달리 소스 코드 프린팅의 수고를 덜어주는 정도의 효과밖에 주지 못하고 있다.
또한 독자들의 이해를 돕기 위해서 만들어 놓은 것이 분명한 연습문제는 앞에서 설명하지 않은 내용을 문제로 제공하고 있기도 해서 읽는 사람이 혼란을 일으킬 소지도 있다. 결과적으로 이런 점들 때문에 리눅스 마니아를 위한다기보다는 오히려 학부 운영체제 강의에 필요한 교재의 성격이 더 강하다고 할 수 있겠다.
유닉스 시스템 프로그래밍
정재은/한빛미디어/2002년 7월 발행/3만7000원
이 책의 머리말에는 ‘당신은 진정한 프로그래머인가 라는 명제를 두고 그것은 당신이 두 권의 컴퓨터 잡지를 구독하고 있는냐 있지 않느냐’라는 부분으로 시작한다. 단순하지 않은 질문을 단순한 대답으로 처리한 것을 보면 작가는 최적화나 짧고 강력한 코드를 예찬하는 유닉스 프로그래머임이 틀림없다.
총 4부로 이루어져 있다. 1부는 시스템 프로그래머가 꼭 알아야 할 사항들을 다루고 있다. 이를테면 vi 에디터(이 책은 리눅스 시스템을 다루고 있다)나 man 페이지 이용법 혹은 디버거나 make 같은 관리 툴을 다루고 있다. 그리고 셸 프로그래밍을 다뤄 유닉스 시스템에서 프로그래밍을 편리하게 한다. 2부는 유닉스 명령어 만들기 부분이다. 유닉스 시스템 프로그래밍을 공부한 독자들이라면 알만한 내용들이다. 명령어마다 옵션 기능을 구현해 놓았다. 구현해 놓은 명령어들은 ls, cat, cp, head, uniq, od, wc, du, finger, ps, df, find, grep이며 코드를 이해하기 쉽게 주석을 달아 놓았다.
3부는 실제 프로그램을 작성하는 것으로 실무 프로그래밍에 목말라하는 초보 프로그래머들에게 기분 좋은 실험장이다. 간단한 포트폴리오 작성과 실제 구현을 차례대로 설명해 놓았다. 예제는 서버에 시스템 정보를 요청해서 받아오는 것으로 시스템 로그와 소켓 프로그래밍이 관련되어 있다. 리눅스에서 로그 서버 작성에 관심있는 독자라면 눈요기로 볼 만한 예제이다.
4부는 부록으로 이 책의 절반을 할당해 놓았다. 내용인즉슨 시스템 함수와 중요 헤더 파일의 정리, 포인터와 시그널의 사용을 제대로 이해해야 진정한 시스템 프로그래머가 된다는 것이다. 시스템 함수는 I/O 함수와 소켓 함수, 더 나아가 세마포어와 같은 멀티 프로세싱과 관련된 함수들로, 적당한 예제들과 함께 소개한다.
유닉스 프로그래밍 책을 보면 항상 느끼는 점이 있는데, 모두 C로 작성되어있다는 것이다. 유닉스 자체가 거의 C로 만들어져 있고, C로 작성하면 코드가 이해하기 쉽다는 것이 변명이 되겠지만 C++로 클래스를 이용한 예제는 한번도 본 적이 없다. 이는 예제들이 모두 평범하고 작은 것들로만 이루어져 있음을 보여준다.
리눅스 클러스터로 만드는 슈퍼 컴퓨터
이정훈,오영은,김정석 공저?영진.COM/2003년 5월 발행/2만1000원
리눅스의 활용 방향은 무궁무진하지만 임베디드 시스템과 더불어 근래에 두각을 보이는 분야가 바로 리눅스 클러스터링을 이용한 분산 환경의 컴퓨팅 시스템이다. 물론 이러한 시스템을 구축하고 관리하는 일은 같은 성능의 단일 컴퓨터를 사용하는 것보다 훨씬 까다롭다. 하지만 하나의 초고성능 컴퓨터를 사용하기 위한 비용이 천문학적 수치인 것을 감안하면, 컴퓨터 클러스터링으로 만들어낸 슈퍼 컴퓨터는 그 구축과 관리에 들어가는 수고 이상의 것들을 사용자에게 돌려줄 것이다. 그렇기에 현재 많은 곳에서 이러한 형태의 시스템을 운영하고 있으며, 독자 또한 이 책을 읽음으로써 그러한 시스템을 어렵지 않게 구축할 수 있을 것이다.
클러스터링 시스템의 개요와 역사 그리고 구축과 관리를 하드웨어의 선택부터 시작해서 운영체제를 설치하고 커널을 재컴파일하며 필요한 애플리케이션을 클러스터링 시스템에 맞게 재설계하는 부분까지 세세하고 친절하게 설명해주고 있다. 운영체제는 데비안과 래드햇 리눅스를 사용하고 있으며, 이를 기반으로 베어울프 형태의 소규모 클러스터링 시스템을 만드는 과정을 보여주고 있다.
주제부터가 지극히 실무적인 것이기에 이 책을 찾는 사람들은 대부분 이 분야에 종사하는 사람들이 될 것이다. 클러스터링 시스템을 구축하고 관리하는 사람들뿐만 아니라, 그런 시스템에서 동작할 애플리케이션을 만드는 사람들에게도 굉장히 유용한 책이다. 하지만 저비용 고효율의 커다란 이점에 힘입어 대부분의 슈퍼 컴퓨팅 환경이 이 책에서 말하는 클러스터링 시스템으로 전환되고 있는 점을 감안한다면, 자신과 직접적인 관련이 없더라도 교양서적으로서 한번쯤 읽어두는 것도 나쁘지 않을 듯싶다. 이 분야의 내용을 정리한 국내 서적이 거의 없다는 사실 또한 이 책의 가치를 높여주고 있다.
임베디드 시스템 & 임베디드 리눅스
박영환/사이텍미디어(회중당)2002년 6월 발행/2만원
이 책은 크게 두 부분으로 나누어져 있다. 전반부는 임베디드 시스템에 대해 알고자 하는 사람들에게 필요한 내용이고 후반부는 임베디드 시스템을 위한 대표적 운영체제인 임베디드 리눅스에 대한 학습 부분이다.
일반적으로 큰 시스템이나 독립된 시스템으로서 특별한 업무를 수행하거나 사용자가 임의로 정한 업무를 수행하기 위한 하드웨어와 소프트웨어를 포함하는 특정 응용 시스템으로서 하드웨어와 소프트웨어의 구성 변경이 어려운 시스템을 임베디드 시스템이라 한다는 정의 하에 내용을 전개하고 있다.
1장에서는 임베디드 시스템의 정의와 역사, 사용 예 등에 대해 기술되어 있고, 2장에서는 리눅스의 역사와 장단점 및 구하는 방법에 대해 논하고 있다. 3장에서는 임베디드 리눅스에 대해 그리고 국내외에서 개발된 임베디드 리눅스에 대해 언급하고 있다.
후반부인 4장에서는 임베디드 리눅스를 개발하고자 할 때 고려사항에 대해 언급하며, 5장에서는 시스템 개발을 위한 리눅스 환경 설정법에 대해 기술하고 있다. 또한 6장에서는 리눅스의 모듈 개념에 대해서도 다룬다. 디바이스 드라이버를 개발하고자 하는 독자는 반드시 정독해야 할 부분이다. 책의 절반 이상을 차지하고 있는 7장에서는 모듈 개념을 통한 디바이스 드라이버 개발과 사용 예시도 기술되어 있다.
마소베스트
꼼꼼한 분석과 쉽고 충실한 내용!
IT EXPERT 임베디드 리눅스
앞서 언급했지만 임베디드 리눅스 서적 가운데 초중급자 수준의 독자에게 권할만한 책이다. 임베디드 관련 서적 가운데 깊지 않은 내용과 꼼꼼하지만 부담 없는 구성으로 리눅스는 간혹 접했으나 임베디드는 처음 접하는 독자에게 유용할 것이다. 특히 이 책은 저자의 실무 경험과 탄탄한 개념을 바탕으로 이뤄져 있다. 임베디드 시스템의 개념 설명으로부터 시작해서 리눅스, 윈도우 등의 운영체제, 임베디드 리눅스 개발 방법을 차근차근 초보자 입장에서 설명하고 보드에 관한 설명도 빼놓치 않았다. 이외에도 드라이버를 보드에 로딩하는 방법, 임베디드 리눅스 환경에서 리눅스 응용 프로그램을 개발하는 방법, 상용 프로그램으로의 패키지화 등도 설명하고 있다. 무엇보다 책의 곳곳에 저자의 트릭과 응용될 수 있는 조그마한 알찬 팁 등이 담겨져 있고, 플랫폼별 개발 방법과 부트스트랩 로더 이식을 비롯한 리눅스 컴파일 등을 다룬 것이 눈에 띈다.
그러나 깊은 수준까지 강조하지 않기 때문에 이 책을 먼저 습득한다면 전공 서적 등 다수의 전문서를 참고해야 할 것이다. 그 외에도 임베디드 리눅스의 특성상 기본적으로 인터넷 등을 통해 임베디드에 관한 최신의 소식, 그리고 실무 경험 등이 중요할 것이다. 앞서 이야기한 시스템 프로그래밍 차원의 커널 분석도 필수적일 것이다. 또한 임베디드 운영체제의 공통적 특성은 범용적인 인터페이스에 국한된다는 것이 아니라는 것이다. 임베디드 시스템에 있어서 넓게는 하드웨어적인 부분까지 노하우까지도 있어야 한다. 이를 정진하기 위한 초석으로 이 책을 선택한다면 분명 좋은 선택이라 생각한다.
벤치마크+뒷마당
임베디드 리눅스가 제 모습을 찾는 날
무선통신 기술의 발달로 크기가 작은 휴대 전화기의 등장과 가전제품의 디지털화, 정보화, 네트워크화에 따라 임베디드 시스템에 관한 관심이 증대되고 있다. 임베디드 시스템의 구성 요소는 일반적인 PC와 비슷하여 하드웨어적으로는 마이크로프로세서, 메모리, I/O 포트 등을 포함하고 있으며, 소프트웨어적으로는 작은 운영체제와 그 위에서 실행되는 응용 프로그램들이 존재한다. 이미 범용 PC에 사용되는 운영체제는 윈도우에 점령되었지만 아직까지 임베디드 시스템용 운영체제에는 윈도우와 같은 절대적인 입지를 갖춘 운영체제가 존재하지 않는다. 그러므로 계속 확대될 임베디드 시스템 시장 상황에 적극적인 대처가 필요한 것이다.
대표적인 임베디드 운영체제로 윈도우 CE나 uC/OS2, Palm 등이 있지만 OS의 비용 문제, 이식성이 높을 것, 재구성이 가능할 것, 교육과 보급이 용이할 것 등의 특성을 모두 만족하는 임베디드 운영체제로서 리눅스는 최선의 선택이라 할 수 있다. 공개되어 있는 소스 코드, 초대형 컴퓨터부터 가장 널리 알려진 임베디드 시스템인 PDA까지 사용 가능한 이식성, 평상시 커널 크기의 최소화 유지, PC용 리눅스로 교육 등을 위한 임베디드 운영체제로 리눅스를 사용할 수 있다.
임베디드 분야에 있어 리눅스가 가지는 발전 가능성은 엄청나다. Palm, 윈도우 CE 등이 임베디드 운영체제의 표준의 근간을 이뤄온 중년의 아저씨라고 한다면 임베디드 리눅스는 이제 막 자신의 모습을 찾고 있는 청소년이라 할 수 있겠다. 그러나 이제까지의 리눅스 역사가 그래왔듯이 임베디드에서 리눅스 또한 오픈소스와 무료 라이선스(또는 저비용)라는 장점으로 자신의 모습을 찾고 있다. 그러나 그 모습을 찾는 것은 그다지 쉬운 일이 아니다. 범용적인 인터페이스에서 리눅스는 프로세서나 주변장치 등의 인터페이스가 어느 정도 정립되어 있는 상태에서 발을 디딜 수 있는 지면이 있던 반면, 인터페이스의 변화가 무궁무진한 임베디드에서는 당장 발 디딜 곳이 없는 허공과도 같은 모습이다.
참고로 벤치마크 최종 후보 서적 중에서 안타깝게 탈락한 서적이 있었다. ‘분량 부족’이 그 이유였는데 책의 뒷부분에는 실제로 성공한 임베디드 리눅스를 사용한 제품들의 소개가 있었다. 비록 간단한 제품들이고 우리나라 사람들이라면 과연 살 것인가 하고 의문이 들 만한 제품들이었지만, 임베디드 분야에서 리눅스의 가능성을 보여주는 제품들이었다. 이를 보면서 리눅스가 이제껏 그래왔던 것처럼 끝도 없는 허공에서 떨어지기보다는 하늘로 날아갈 방법을 찾아낼 수 있다는 상상 아닌 상상을 해본다.