도전2022

코드로 읽는 리눅스 디바이스 드라이버 본문

코드로 읽는 리눅스 디바이스 드라이버

hotdigi 2010. 9. 14. 11:15
gui 문제 해결을 위해서는 조금 살펴보아야 할듯 한 책

http://www.yes24.com/24/goods/4090227?scode=032&srank=1

저자의 홈페이지
http://www.elinuxdd.com/

소스코드(html, syntax highlighted by Code2HTML, v. 0.9.1 )
http://www.elinuxdd.com/~elinuxdd/elinuxdd.docs/listings/


책소개

x86과 임베디드 CPU를 모두 아우르며, 리눅스에서 지원하는 거의 모든 디바이스 유형을 설명하고, 원시 코드 수준에서 실제 예제를 보여준다. 또한 디바이스 드라이버 개발 절차와 방법을 자세히 설명하며 커널 내부 동작 방식과 구성을 디바이스 드라이버 개발자 관점으로 바라보게 만드는 리눅스 디바이스 드라이버 개발자를 위한 책이다.

책은 실전에서 운영체제와 C 지식을 쌓은 개발자에게 적합하다. 물론 전에 드라이버를 한 번도 작성해 본 적이 없더라도 무방하다. 스리크슈난은 아주 특수한 상황에만 적합한 주제는 피하고 핵심에 초점을 맞춰 필요한 모든 개념과 기법을 하나로 엮었다.

기존 책에서 다루지 않는 I2C, 비디오, 사운드, PCMCIA, 다양한 플래시 메모리 같은 드라이버, 리눅스 커널 스레드와 도우미 인터페이스를 비롯한 핵심 커널 서비스와 기능, 폴링, 비동기식 통지, 입출력 제어 설명, 임베디드 리눅스 드라이버용 I2C 프로토콜 등을 다룬다.


저자 소개

저자 : 스리크슈난 벤카테스와란 (Sreekrishnan Venkateswaran)

인도 칸푸르에 있는 인도 공과 대학에서 전산 석사를 받았다. 지난 12년 동안 IBM에서 근무하면서 리눅스를 손목시계, 핸드헬드 장치, 음악 재생기, VoIP 전화기, 심장 박동기, 원격 환자 감시 시스템 같은 다양한 임베디드 장치에 이식했다. 스리크슈난은 2년 넘게 리눅스 매거진 객원 편집자이자 커널 컬럼니스트로 활동했다. 현재 IBM 인도에서 임베디드 솔루션 그룹을 관리하고 있다.

역자 : 박재호

포항공과대학교 컴퓨터공학과 학부와 컴퓨터공학과 대학원을 졸업했다. 블로그 '컴퓨터 vs 책(http://jhrogue.blogspot.com)'을 운영 중이다. 리눅스와 관련해 지은 책으로는 『IT EXPERT, 임베디드 리눅스』, 『열씨미와 게을러의 리눅스 개발 노하우 탐험기』, 옮긴 책으로는 『리눅스 디바이스 드라이버』, 『리눅스 문제 분석과 해결』, 『리눅스 디버깅과 성능 튜닝』, 『리눅스 시스템 프로그래밍』 등이 있다.

목차

1장 소개
진화
GNU 카피레프트
kernel.org
메일링 리스트와 포럼
리눅스 배포판
원시 코드 살펴보기
커널 빌드하기
적재 가능한 모듈
시작하기 전에

2장 커널 내부 탐험
시동
BIOS-Provided Physical RAM Map
758MB LOWMEM Available
Kernel Command Line: ro root=/dev/hda1
Calibrating Delay...1197.46 BogoMIPS(lpj=2394935)
Checking HLT Instruction
NET: Registered Protocol Family 2
Freeing Initrd Memory: 387k Freed
IO Scheduler Anticipatory Registered(Default)
Setting Up Standard PCI Resources
EXT3-fs: Mounted Filesystem
INIT: Version 2.85 Booting
Adding 1552384k swap on /dev/hda6
커널모드와 유저모드
프로세스 문맥과 인터럽트 문맥
커널 타이머
HZ와 jiffies
긴 지연
짧은 지연
펜티엄 TSC
RTC(Real Time Clock)
커널 동시성
스핀락과 뮤텍스
원자적인 연산
읽기-쓰기 잠금
디버깅
프로세스 파일 시스템
메모리 할당하기
원시 코드 살펴보기

3장 커널 기능
커널 스레드
커널 스레드 생성
프로세스 상태와 대기 큐
사용자 영역 도우미
도우미 인터페이스
연결 리스트
해시 리스트
작업 큐
통지 연쇄
완료 인터페이스
kthread 도우미
오류 처리 지원
원시 코드 살펴보기

4장 기반 다지기
디바이스와 드라이버 소개
인터럽트 처리
인터럽트 문맥
IRQ 할당
디바이스 예제: 회전 휠
softirq와 tasklet
리눅스 디바이스 모델
udev
sysfs, kobject, 디바이스 클래스
핫플러그와 콜드플러그
마이크로코드 내려 받기
모듈 자동 적재
메모리 장벽
전원 관리
원시 코드 살펴보기

5장 문자 드라이버
문자 드라이버 기초
디바이스 예제: 시스템 CMOS
드라이버 초기화
open과 release
자료 교환하기
seek
ioctl
자료 가용성 감지
poll
fasync
병렬 포트와 통신하기
디바이스 예제: 병렬 포트 LED 보드
RTC 하위시스템
의사 문자 드라이버
기타 드라이버
디바이스 예제: 워치독 타이머
문자 드라이버 주의 사항
원시 코드 살펴보기

6장 직렬 드라이버
계층 아키텍처
UART 드라이버
디바이스 예제: 휴대전화
RS-485
TTY 드라이버
회선 규범
디바이스 예제: 터치 컨트롤러
원시 코드 살펴보기

7장 입력 드라이버
입력 이벤트 드라이버
evdev 인터페이스
입력 장치 드라이버
serio
키보드
마우스
터치 컨트롤러
가속도계
출력 이벤트
디버깅
원시 코드 살펴보기

8장 I2C 프로토콜
I2C/SMBus란?
I2C 코어
버스 트랜잭션
디바이스 예제: EEPROM
초기화
디바이스 탐색하기
어댑터 능력 점검하기
디바이스에 접근하기
더 많은 메소드
디바이스 예제: RTC
I2C-dev
LM 센서를 사용한 하드웨어 감시
SPI 버스
1 와이어 버스
디버깅
원시 코드 살펴보기

9장 PCMCIA와 CF
PCMCIA/CF란?
리눅스-PCMCIA 하위시스템
호스트 컨트롤러 드라이버
PCMCIA 코어
드라이버 서비스
클라이언트 드라이버
자료 구조
디바이스 예제: PCMCIA 카드
하나로 모으기
PCMCIA 저장소
직렬 PCMCIA
디버깅
원시 코드 살펴보기

10장 PCI
PCI 패밀리
주소 지정과 식별
PCI 영역에 접근하기
구성 영역
입출력과 메모리
DMA
디바이스 예제: 이더넷 모뎀 카드
초기화와 탐색
자료 전송
디버깅
원시 코드 살펴보기

11장 USB
USB 아키텍처
버스 속도
호스트 컨트롤러
전송 유형
주소 지정
리눅스 USB 하위시스템
드라이버 자료 구조
usbdevice 구조체
URB
파이프
기술자 구조체
열거
디바이스 예제: 원격 측정 카드
초기화와 탐색
레지스터 접근
자료 전송
클래스 드라이버
대용량 저장소
USB 직렬 변환기
HID
블루투스
가젯 드라이버
디버깅
원시 코드 살펴보기

12장 비디오 드라이버
디스플레이 아키텍처
리눅스 비디오 하위시스템
디스플레이 매개변수
프레임 버퍼 API
프레임 버퍼 드라이버
디바이스 예제: 네비게이션 시스템
콘솔 드라이버
디바이스 예제: 휴대폰 다시 살펴보기
시작 로고
디버깅
원시 코드 살펴보기

13장 오디오 드라이버
오디오 아키텍처
리눅스 사운드 하위시스템
디바이스 예제: MP3 재생기
드라이버 메소드와 구조체
ALSA 프로그래밍
디버깅
원시 코드 살펴보기

14장 블록 드라이버
저장소 기술
리눅스 블록 입출력 계층
입출력 스케줄러
블록 드라이버 자료 구조와 메소드
디바이스 예제: 단순한 저장소 컨트롤러
초기화
블록 디바이스 연산
디스크 접근
고급 주제
디버깅
원시 코드 살펴보기

15장 네트워크 인터페이스 카드
드라이버 자료 구조
소켓 버퍼
Net 디바이스 인터페이스
활성화
자? 전달
워치독
통계
구성
버스별 세부 사항
프로토콜 계층 살펴보기
수신 경로
전송 경로
흐름 제어
버퍼 관리와 동시성 제어
디바이스 예제: 이더넷 NIC
ISA 네트워크 드라이버
비동기 전송 모드(ATM)
네트워크 처리량
드라이버 성능
프로토콜 성능
원시 코드 살펴보기

16장 무선 리눅스
무선의 장단점
블루투스
BlueZ
디바이스 예제: CF 카드
디바이스 예제: USB 어댑터
RFCOMM
네트워크
사용자 인터페이스 디바이스
오디오
디버깅
원시 코드 살펴보기
적외선
리눅스 IrDA
디바이스 예제: 슈퍼 I/O 칩
디바이스 예제: IR 동글
IrComm
네트워크
IrDA 소켓
리눅스 적외선 리모콘
원시 코드 살펴보기
와이파이
구성
디바이스 드라이버
원시 코드 살펴보기
이동 통신 네트워크
GPRS
CDMA
최신 유행

17장 MTD
플래시 메모리란?
리눅스 MTD 하위시스템
맵 드라이버
디바이스 예제: 핸드핼드
NOR 칩 드라이버
NAND 칩 드라이버
사용자 모듈
블록 디바이스 흉내 내기
문자 디바이스 흉내 내기
JFFS2
YAFFS2
MTD-Utils
MTD 구성
XIP
펌웨어 허브
디버깅
원시 코드 살펴보기

18장 임베디드 리눅스
도전
구성 요소 선택
툴 체인
임베디드 부트로더
메모리 배치
커널 이식
임베디드 드라이버
플래시 메모리
UART
버튼과 휠
PCMCIA/CF
SD/MMC
USB
RTC
오디오
터치스크린
비디오
CPLD/FPGA
네트워크 접속 기능
산업계에서 요구하는 전자장비
기타 드라이버
루트 파일 시스템
NFS로 마운트된 루트
작고 간결한 미들웨어
테스트 기반 구조
디버깅
보드 재작업
디버거

19장 사용자 영역 드라이버
프로세스 스케줄링과 반응 시간
기존 스케줄러
O(1) 스케줄러
CFS 스케줄러
반응 시간
입출력 영역에 접근하기
메모리 영역에 접근하기
사용자 모드 SCSI
사용자 모드 USB
사용자 모드 I2C
UIO
원시 코드 살펴보기

20장 기타 디바이스와 드라이버
ECC 보고
디바이스 예제: ECC를 탑재한 메모리 컨트롤러
주파수 조정
임베디드 컨트롤러
ACPI
ISA와 MCA
파이어와이어
I2O
아마추어 라디오
VoIP
고속 연결
InfiniBand
RapidIO
광 채널
iSCSI

21장 디바이스 드라이버 디버깅
커널 디버거
디버거로 들어가기
커널 디버거(kdb)
커널 GNU 디버거(kgdb)
GNU 디버거(gdb)
JTAG 디버거
내려 받기
커널 프로브
kprobe
jprobe
반환 프로브
제약
원시 코드 살펴보기
kexec와 kdump
kexec
kdump로 kexec하기
kdump
원시 코드 살펴보기
프로파일링
OProfile을 사용한 커널 프로파일링
gprof를 사용한 애플리케이션 프로파일링
추적
리눅스 추적 툴킷
리눅스 테스트 프로젝트
사용자 모드 리눅스
진단 도구
커널 해킹 구성 옵션
테스트 장비

22장 유지 보수와 배포
코딩 스타일
변경 표식
버전 관리
체크섬 일치
빌드 스크립트
이식성 높은 코드

23장 시스템 종료
점검 리스트
이제 뭘 하지?

부록 A 리눅스 어셈블리어
디버깅

부록 B 리눅스와 바이오스
실제 모드 호출
보호 모드 호출
바이오스와 기존 드라이버

부록 C seq 파일
seq 파일 장점
NVRAM 드라이버 개선하기
원시 코드 살펴보기
닫기

'' 카테고리의 다른 글

경영과학 학습  (0) 2010.09.14
소중한 것을 먼저하자.  (0) 2010.05.11
UNIX 고급 프로그래밍 제2판  (0) 2010.03.30
Application Hacking  (0) 2010.03.10
pro Linux Embedded system  (0) 2010.02.22