리눅스 디바이스 드라이버
리눅스 시스템 환경에서 컴퓨터 주변장치를 사용하려는 사람이나 리눅스용 하드웨어를 새로 개발하려는 사람을 위한 실용 가이드. 문자 디바이스와 블록 디바이스를 단계적으로 설명하고 있으며, 네트워크 인터페이스용 드라이버 작성 방법을 예제를 컴파일하면서 익힐 수 있다.
- 저자 : 알레산드로 루비니(Alessandro Rubini)
- 번역 : 김인성 , 류태중
- 출간 : 2000-02-28
1. 대상 독자층
"리눅스 디바이스 드라이버"는 리눅스에서 동작하는 주변기기를 위한 디바이스 드라이버를 작성하는 개발자, 리눅스를 사용하여 임베디드 장치를 만드는 개발자, 리눅스 커널에 관심이 많은 호사가에게 적합한 개발서이다.
이 책은 심심풀이나 재미로 보기에는 너무 많은 사항을 알고 있어야 하므로 초보자에게는 결코 적합하지 않다. 최소한 x86 하드웨어와 커널과 관련한 기본 지식으로 무장한 상태에서 읽어야 함에 유의하기 바란다. 또한 책 자체만으로 모든 문제를 해결할 수 없는 경우도 있으므로 필요할 때마다 커널 소스 트리를 뒤질 수 있도록 준비해야 한다. 한마디로 중/고급 사용자에게 어울리는 책이다.
2. 주요 내용
"리눅스 디바이스" 드라이버는 제목이 암시하는 바와 같이 리눅스 환경에서 어떻게 디바이스 드라이버를 작성할 수 있는지에 관한 각종 내용을 담고 있다. 하지만 리눅스 커널 컴파일 방법부터 차근차근 나온다고 생각하면 큰 오산이다. 목차를 보면 알겠지만 리눅스 커널을 잠깐 소개하는 듯 하다가 바로 구체적인 디바이스 드라이버 작성법으로 들어가버리므로, 이 책 한 권으로 커널 컴파일에서 세부적인 커널 내부 구조 설명과 디바이스 드라이버 작성에 이르기까지 모든 사항을 해결하려는 욕심은 버려야 한다. 다행히도 커널 내부 구조 설명은 이번에 한빛미디어에서 새로 나온 "리눅스 커널의 이해(Understainding the Linux Kernel 번역판)"을 참조하면 큰 도움을 얻을 수 있을 것이다. 이 책을 읽기 위해 꼭 필요한 리눅스 커널 컴파일 방법은 LDP나 KLDP등에 나와있는 온라인 문서를 참조하기 바란다.
1장. 리눅스 커널 소개
2장. 모듈의 빌드와 실행
3장. 문자 드라이버
4장. 디버깅 기법
5장. 향상된 문자 드라이버 연산
6장. 시간의 흐름
7장. 메모리 획득
8장. 하드웨어 관리
9장. 인터럽트 처리
10장. 데이터 타입의 현명한 사용
11장. Kerneld와 고급 모듈화
12장. 블록 드라이버 적재
13장. Mmap과 DMA
14장. 네트워크 드라이버
15장. 주변 장치 버스의 개요
16장. 커널 소스의 실제 배치
또한 "리눅스 디바이스 드라이버"는 커널 2.2를 다루고 있다는 사실에 주목해야 한다. 하지만 최근 2.4 계열이 급속도로 퍼지기 시작하면서, 2.4와 어울리는 방식으로 디바이스 드라이버를 만들어야 할 필요성이 생기는데, 이럴 경우 유용하게 적용할 수 있는 힌트를 제시하겠다. 바로 오라일리에서 제공하는 온라인 Linux Device Drivers 2nd Edition 페이지(http://www.xml.com/ldd/chapter/book/index.html)를 활용하는 방법이다. 목차를 읽어보고 필요한 부분만 추출해서 참고하는 방식으로 책을 읽으면 별도 돈을 들이지 않고 2.4와 관련한 디바이스 드라이버 작성 기법을 익힐 수 있다. 영어라는 사실에 실망하는 독자들도 많겠지만, 최신의 지식을 익히려면 어쩔 수 없는 상황이라 생각하기 바란다.
3. 내용 평가
이 책의 특징을 한 가지만 제시하라고 하면 "뭔가 자기 힘으로 만들어보려는 성향이 있는 사람만이 재미있게 읽을 수 있다"는 점을 들고 싶다. 일반 리눅스 배포판으로 설치한 환경에서는 심지어 이 책 37페이지네 나오는 예제인 "Hello, world"를 컴파일할 수 조차 없는 자신을 발견할 수 있기 때문이다. 용케 커널을 다시 컴파일해서 버전 체크를 피하는 방법으로 "Hello, world"를 컴파일한 다음에는 출력 결과를 어디서 찾아야할지 막막해진다. 책을 읽어보신 독자들은 동의하겠지만 처음부터 끝까지 이런 황당한 방식으로 내용이 이어진다.
우리나라 사람들은 성질이 너무 급하다. 이러한 추세를 맞추려고 시중에 나와있는 책은 대부분 머리에 생각할 기회를 주는 대신 손이 끊임없이 타이핑하고 마우스를 누르면서 필요한 작업만 열심히 하도록 유도하는 내용으로 가득 차 있다. 결과로 글자 한자도 안 틀리고 어떤 작업을 수행해서 결과를 보면 지식을 습득했다고 착각을 하게 된다. 하지만 디바이스 드라이버 종류가 천차만별이며 새롭게 생겨나는 복잡한 상황에서 과연 이러한 "xyz 따라하기" 입문서 시리이즈가 개발자에게 도움을 줄 수 있을까?
이 책을 지은 필자는 커널 컴파일도 제대로 할 수 없고, /var/log/messages를 살펴서 디바이스 드라이버가 출력한 printk 메시지를 읽을 줄 모르는 개발자들에 초점을 맞추는 대신 진짜로 디바이스 드라이버를 만들고자 하거나 아니면 커널 내부 구조를 파악하기를 원하는 독자를 대상으로 집필한 흔적이 곳곳에 베여있다. 심지어 예제 코드 자체도 모두 조각이 나있어서, 오라일리 ftp 사이트(http://examples.oreilly.com/linuxdrive2/)에서 직접 받아와서 풀어보지 않는 이상 실체를 파악하기 어렵다. 그 대신 이렇게 아낀 지면을 각종 생각할 거리와 경험에서 우러나오는 팁들로 채워놓았다. 이 책을 읽으면 읽을수록 노력하는 자만이 얻을 수 있다는 사실을 깨닫게 된다. 정말 "리눅스 디바이스 드라이버"를 개발하고 싶은가? 그렇다면 이 책과 "리눅스 커널의 이해" 책을 읽고 난 다음 차근차근 리눅스 소스 코드 트리 내부에 존재하는 각종 디바이스 드라이버를 실제로 분석해보기 바란다.
4. 번역 상태
"리눅스 디바이스 드라이버"가 어렵다는 이야기를 주변에서 하도 많이 들어왔기에 도대체 무슨 이유인지를 파악할 필요가 있었다. 크게 두 가지로 나누어서 생각할 수 있다. 하나는 매끈하지 못한 번역이고 나머지 하나는 내용 평가에서 이미 언급했듯이 성질 급한 한국인의 정서에 맞지 않는다는 사실이다. 한글판을 읽을 때 무슨 소리인지 모르는 부분이 여기저기 속출해서 읽는 작업이 아주 괴로웠다고 솔직히 고백하겠다. 불행 중 다행으로 온라인 영문판이 구세주였다고 할까?
지면 낭비할 필요 없이 단도직입적으로 말해서 "Linux Device Drivers 2nd Edition" 영문판을 추천하고 싶다. 책을 구입하거나 앞서 알려준 온라인 책을 인쇄(PDF 포맷도 있으므로)해서 읽기 바란다.
5. 기술적 정확성, 가독성, 편집 상태
솔직히 번역상에 문제가 있어 전반적인 정확성, 가독성이 많이 떨어진다. 똑 같은 문장을 여러 번 읽어서 추측해야 하므로 읽는 독자를 괴롭힐 가능성이 높다. 그나마 편집 상태는 양호하다고 평가한다.
6. 최종 검토 의견
"리눅스 디바이스 드라이버"는 리눅스 상에서 실제로 디바이스 드라이버를 작성하는 진짜 개발자에게 적합한 책이다. 번역상에 문제가 있고, 커널 2.2를 다룬다는 점이 마음에 걸리기는 하지만, 원서 자체만 놓고서는 아주 훌륭하다는 평가를 내리고 싶다. 자매서인 "리눅스 커널의 이해"와 함께 손이 잘 닫는 위치에 놓아두면 개발 시 큰 위안이 될 것이다.