책소개
리눅스 시스템에서 디바이스 드라이버 작성법을 논하는 이론서. 리눅스 커널 버전 2.6.10을 위해 완벽히 개정한 개정 3판으로 해독 불가능한 소스 코드 주석으로만 전해오던 광범위한 디바이스 드라이버 작성 비밀을 공개한다. 이 책에서 독자는 문자 디바이스, 블록 디바이스, 네트워크 인터페이스를 작성하는 방법을 배울 수 있다. 별도 하드웨어 없이도 컴파일하고 실행할 수 있는 완전한 예제를 제공한다.
저자소개
저자 : 조나단 코벳
[저자소개]

조나단 코벳(Jonathan Corbet)

콜로라도 대학의 교수님이 페이징 알고리듬을 “고쳐라”고 시켰던 1981년에 BSD 리눅스 소스를 처음 접했다. 이후로 그는 VAX, Sun, Ardent, x86 시스템 드라이버를 작성하는 등 손에 닿는 모든 시스템 내부를 파헤쳤다. 1993년 리눅스 시스템을 처음 접한 이래 지금껏 리눅스에만 빠져 있다. 조나단은 현재Linux Weekly News (http://www.LWN.net)의 공동 창립자이자 편집장이다. 아내, 두 아이와 함께 콜로라도 주 볼더 시에 살고 있다.



알레산드로 루비니(Alessandro Rubini)

전기 공학도로 학위를 받은 직후 리눅스 0.99.14를 설치했다. 그 후, 현대 기술을 혐오함에도 불구하고 파비아 대학 에서 전산 박사 학위를 받았다. 박사 학위를 받은 후 논문이 쓰기 싫어서 대학을 떠났다. 현재는 디바이스 드라이버를 작성하고 글을 기고하는 프리랜서로 일하고 있다. 아버지가 되기 전까지는 젊은 해커였으나, 이제는 비-PC 컴퓨터 플랫폼을 선호하는, 늙은 자유 소프트웨어 주창자이다.



그렉 크로아-하트만(Greg Kroah-Hartman)

1999년 이래 리눅스 커널 드라이버를 작성해 왔으며, 현재는USB, PCI, I2C, 드라이버 코어, sysfs 커널 하위시스템의 관리자이다. 또한 udev와 hotplug 사용자영역 프로그램의 관리자이며 젠투 커널 관리자이기도 하다. 그래서 그의 편지함은 빌 날이 없다. 현재 Linux Journal 의 객원 편집자이다.



 [역자소개]

박재호(jhrogue@yahoo.co.kr)
&#13;&#10;포항공과대학교 컴퓨터공학과 학부와 대학원(소프트웨어 공학 전공)을 나왔다. 요즘은 여러 가지 다양한 임베디드 장치를 개발하고 있으며, 제작년 말부터 '컴퓨터 vs. 책'으로 제목붙인 블로그(http://blog.yahoo.co.kr/jhrogue)를 운영하면서 틈틈히 소프트웨어와 책과 관련한 여러 가지 흥미로운 이야기거리를 올리고 있다. 옮긴 책으로 , , <조엘 온 소프트웨어: 유쾌한 오프라인 블로그>가 있으며, 지은 책으로 가 있다.
&#13;&#10;
&#13;&#10;이해영
&#13;&#10;포항공과대학교 컴퓨터공학과 학부와 퍼듀대학교 전자계산학과를 졸업했다. 전문 소프트웨어 회사 개발자로 출발해 벤처기업과 대기업을 두루 거친 후, 2005년 현재 미국에서 전문 기술 번역가/프리랜서로 활동 중이다. 옮긴 책으로
목차
1장 디바이스 드라이버 소개
디바이스 드라이버 임무
커널 구분
디바이스와 모듈 클래스
보안 문제
버전 번호
라이선스 조건
커널 개발 커뮤니티에 동참하기
이 책의 전반적인 흐름
2장 모듈 빌드와 실행
테스트 시스템 설정
Hello World 모듈
커널 모듈 대 응용 프로그램
컴파일과 적재
커널 심벌 테이블
사전 지식
초기화와 종료
모듈 매개 변수
사용자 영역에서 작업하기
빠른 참조
3장 문자 드라이버
scull 설계
주 번호와 부 번호
몇몇 중요한 자료 구조체
문자 디바이스 등록
open과 release
scull의 메모리 사용법
read와 write
새 디바이스 다루기
빠른 참조
4장 디버깅 기술
커널이 지원하는 디버깅 옵션
출력을 통한 디버깅
질의를 통한 디버깅
관찰을 통한 디버깅
시스템 폴트 디버깅
디버거와 관련 도구
5장 동시성과 경쟁 상태
scull에 존재하는 함정
동시성과 동시성 관리
세마포어와 뮤텍스
완료
스핀락(spinlocks)
잠금 시 피해야 할 함정
잠금 대안
빠른 참조
6장 고급 문자 디바이스 연산
ioctl
차단 I/O
poll과 select
비동기식 통지
디바이스 탐색
디바이스 파일 접근 제어
빠른 참조
7장 시간, 지연, 작업 연기
시간 경과 측정하기
현재 시각 알기
실행 지연하기
커널 타이머
태스크릿
작업 큐
빠른 참조
8장 메모리 할당
kmalloc에 얽힌 진짜 이야기
색인 캐시(Lookside Cache)
get_free_page와 관련 함수
vmalloc과 관련 함수
CPU별 변수
대형 버퍼 얻기
빠른 참조
9장 하드웨어와 통신하기
I/O 포트와 I/O 메모리
I/O 포트 사용하기
I/O 포트 예제
I/O 메모리 사용하기
빠른 참조
10장 인터럽트 처리하기
병렬 포트 준비하기
인터럽트 처리기 설치하기
처리기 구현하기
상반부와 하반부
인터럽트 공유하기
인터럽트 구동 I/O
빠른 참조
11장 커널 자료형
표준 C 타입 활용
자료 항목 크기를 명시적으로 할당하기
인터페이스에 종속적인 타입
기타 이식성 문제
연결 리스트
빠른 참조
12장 PCI 드라이버
PCI 인터페이스
돌아온 탕아: ISA
PC/104와 PC/104+
다른 PC 버스
S버스(SBus)
누버스(NuBus)
외부 버스
빠른 참조
13장 USB 드라이버
USB 디바이스 기본
USB와 Sysfs
USB urb(USB 요청 블록)
USB 드라이버 작성하기
urb 없는 USB 전송하기
빠른 참조
14장 리눅스 디바이스 모델
Kobject, Kset, 하위시스템
저수준 sysfs 연산
핫플러그 사건 생성
버스, 디바이스, 드라이버
클래스
하나로 합치기
핫플러그
펌웨어 다루기
빠른 참조
15장 메모리 사상과 DMA
리눅스에서 메모리 관리
mmap 디바이스 연산
직접 I/O 수행하기
직접 메모리 접근(DMA)
빠른 참조
16장 블록 드라이버
등록
블록 디바이스 연산
요청 처리하기
다른 몇몇 세부 사항
빠른 참조
17장 네트워크 드라이버
snull 설계 방법
커널에 접속하기
net_device 구조체 세부 내역
열고 닫기
패킷 전송
패킷 수신
인터럽트 처리기
수신 인터럽트 완화
연결 상태 변경
소켓 버퍼
맥 주소 결정
전용 ioctl 명령
통계 정보
멀티캐스트
기타 사항
빠른 참조
18장 TTY 드라이버
자그마한 TTY 드라이버
tty_driver 함수 포인터
TTY 터미널 전송 제어 규칙
ioctls
tty 디바이스를 다루는 proc과 sysfs
tty_driver 구조체 자세히 살펴보기
tty_operations 구조체 자세히 살펴보기
tty_struct 구조체 자세히 살펴보기
빠른 참조
참고문헌
찾아보기