목차
감수자 서문 = 4
저자 서문 = 6
이 책의 주요 내용 = 8
한빛이 제시하는 리눅스 디바이스 드라이버 학습 로드맵 = 12
이 책에서 다루는 예제 = 14
이 책의 실습 환경 및 주요 독자층 = 17
차례 = 18
1 실습 환경 설정 및 준비 = 27
01 시스템과 리눅스 운영체제의 준비 = 28
02 커널 소스 준비 = 32
03 실습 기자재 준비 = 39
04 준비된 실습 환경 점검 = 45
2 리눅스 커널과 디바이스 드라이버 = 47
01 운영체제로서의 리눅스 = 48
02 리눅스 커널 = 49
03 디바이스 드라이버 = 59
3 디바이스 파일과 저수준 파일 입출력 = 75
01 디바이스 파일과 파일 입출력 함수 = 76
02 저수준 파일 입출력 함수 = 82
03 디바이스 파일 관련 함수 = 87
04 저수준 파일 입출력 함수의 사용 예제 = 89
mknod 명령과 저수준 파일 입출력 함수 정리 = 97
4 간단한 모듈 데스트 = 103
01 모듈 프로그램 맛보기 = 104
02 모듈 소스 준비 = 109
03 모듈 소스 형식 = 114
04 모듈 컴파일용 Makefile = 116
05 모듈 매개변수 지정 = 119
06 커널 메시지 출력 = 124
07 커널과 모듈 = 128
5 메모리 할당과 해제 = 133
01 변수 = 134
02 동적 메모리 = 139
03 동적 메모리 예제 = 145
04 메모리 풀 = 151
05 메모리 풀 예제 = 153
메모리 할당과 해제 함수 정리 = 157
6 디바이스의 등록과 해제 = 161
01 디바이스 드라이버 제어 방식 = 162
02 struct file_operations = 167
03 문자 디바이스 드라이버의 등록과 해제 및 구성 = 175
04 문자 디바이스 드라이버 작성 예제 = 181
디바이스 드라이버 등록과 해제 함수 정리 = 192
7 디바이스 드라이버의 초기화와 등록 = 193
01 초기화와 종료 처리 = 194
02 모듈 사용 횟수 관리 = 206
03 I/O 영역의 경쟁 처리 함수 = 209
디바이스 드라이버 초기화와 종료 함수 정리 = 214
8 디바이스 드라이버의 읽기와 쓰기 = 217
01 읽기와 쓰기의 구현 = 218
02 I/O 처리 = 229
03 사용자 프로세스 공간과 커널 프로세스 공간 = 232
04 디바이스 드라이버의 읽기/쓰기 구현 예제 = 236
디바이스 드라이버 읽기/쓰기 함수 정리 = 245
9 주 번호와 부 번호의 처리 = 253
01 주 번호, 부 번호, 디바이스 타입 = 254
02 부 번호에 의한 파일 처리 방법 = 263
03 부 번호에 의한 파일 처리 예제 = 266
04 예약된 주 번호 = 279
10 디바이스의 제어 = 293
01 디바이스 제어 = 294
02 ioctl() 함수를 이용한 입출력 구현 예제 = 302
디바이스 제어 함수 정리 = 317
11 시간 처리와 커널 타이머 = 319
01 시간 처리 = 320
02 커널 타이머 = 328
03 커널 타이머를 이용한 LED 점멸 예제 = 333
시간 처리와 커널 타이머 함수 정리 = 340
12 인터럽트 처리 = 343
01 인터럽트 = 344
02 인터럽트 발생 시간 체크 예제 = 365
인터럽트 처리 함수 정리 = 380
13 블록킹 I/O = 383
01 프로세스의 사용 효율성과 잠들기 구조 = 384
02 블록킹 I/O 의 구현 = 387
03 인터럽트 발생 시간 체크 예제 = 394
04 wait_event_interruptible 매크로 = 408
블록킹 I/O 함수 정리 = 410
14 입출력 다중화 = 413
01 입출력 다중화 = 414
02 다중 입출력의 구현 = 424
03 프린터 포트 예제 = 427
입출력 다중화 함수 정리 = 443
15 태스크 큐와 워크 큐 = 447
01 태스크 큐와 워크 큐의 필요성 = 448
02 태스크 큐 = 452
03 워크 큐 = 458
04 태스크 큐 예 = 468
05 워크 큐 예 = 476
06 태스크 큐를 이용한 LED 점멸 = 483
07 워크 큐를 이용한 키 입력 채터링 방지 = 488
태스크 큐 함수 정리 = 494
워크 큐 함수 정리 = 496
16 Bottomhalf = 503
01 Tophalf와 Bottomhalf = 504
02 태스크 큐와 mark_bh() 함수 = 507
03 태스크 큐 처리 수정(2.4→2.6) = 509
04 인터럽트 발생 시간 체크 예제 = 510
인터럽트 함수 정리 = 515
17 proc 파일 시스템 = 517
01 시스템 정보의 확인 = 518
02 proc 파일 시스템 = 521
03 proc 파일 시스템 동작 방식 = 524
04 가산기 예제 = 527
proc 파일 시스템 함수 정리 = 539
18 메모리 매핑 = 543
01 물리 주소와 가상 주소 = 544
02 주소 변환 함수 = 549
03 프로세스 메모리 매핑 = 552
04 매개변수 전달값을 보여주는 예제 = 566
05 VIDEO I/O 영역 메모리 mmap 구현 예제 = 573
06 nopage를 이용한 mmap 구현 예제 = 581
메모리 매핑 함수 정리 = 590
19 모듈간의 상호 참조 = 595
01 모듈간 참조와 EXPORT_SYMBOL 매크로 = 596
02 커널 버전별 심볼릭 등록 방법 = 598
03 모듈간의 심볼 참조 예제 = 600
20 다중 프로세스 환경의 디바이스 드라이버 = 609
01 단일 프로세스를 위한 디바이스 드라이버 = 610
02 프로세스별 관련 처리 = 612
03 비선점형 커널의 디바이스 드라이버 = 616
04 선점형 커널의 디바이스 드라이버 = 617
21 디바이스 드라이버를 커널 소스에 포함시키는 방법 = 621
01 사전 고려 사항 = 622
02 커널에서의 커널 컴파일 옵션 파일 = 630
03 Makefile 문법 규칙 = 646
04 디바이스 드라이버를 커널에 포함시키는 예 = 649
22 블록 디바이스 드라이버 = 659
01 리눅스와 블록 디바이스 = 660
02 하드디스크의 특성 = 664
03 블록 디바이스 드라이버와 요구 큐 = 667
04 버전별 블록 디바이스 처리 = 671
05 커널 2.4의 블록 디바이스 드라이버 = 674
06 make_request 방식의 램디스크 예제 = 694
07 request 방식의 가상의 하드디스크 예제 = 702
08 커널 2.6의 블록 디바이스 드라이버 = 719
09 make_request 방식의 램디스크 예제 = 733
10 request 방식의 가상의 하드디스크 예제 = 741
블록 디바이스 함수 정리(2.4) = 754
블록 디바이스 함수 정리(2.6) = 756
23 네트워크 디바이스 드라이브 = 759
01 리눅스와 네트워크 디바이스 드라이버 = 760
02 네트워크 디바이스 드라이버 등록과 제거 = 767
03 보편적인 초기화 및 등록 처리 절차 = 776
04 struct net_device의 이해 = 784
05 네트워크 디바이스의 열기와 닫기 = 794
06 전송과 수신 = 798
07 통계 처리 = 822
08 네트워크 디바이스의 제어 ioctl = 825
09 멀티 캐스트 처리 = 827
네트워크 디바이스 드라이버 함수 정리 = 829
24 디바이스 드라이버 파일 시스템 = 831
01 devfs 파일 시스템 = 832
02 디바이스 파일 생성 예제 = 839
devfs 파일 시스템 함수 정리 = 844
25 시스템 파일 시스템 = 847
01 sysfs 파일 시스템 = 848
02 sysfs 파일 시스템의 이용 = 852
26 이기종 시스템으로의 이식, 시그널, 헬퍼 = 863
01 이기종 시스템으로의 이식 = 864
02 ARM용 DIO 디바이스 드라이버 예제 = 868
03 시그널과 SIGIO = 892
04 SIGIO 시그널 처리 예제 = 897
05 call_usermodehelper 사용 예제 = 904
06 modprobe와 모듈 적재 요청 처리 = 908
27 DMA와 PCI 디바이스 = 911
01 DMA = 912
02 PCI = 922
참고 문헌/참고 사이트 = 947
찾아보기 = 951