임베디드 개발자를 위한 코드로 읽는 리눅스 디바이스 드라이버
도서명:임베디드 개발자를 위한 코드로 읽는 리눅스 디바이스 드라이버
저자/출판사:스리크슈난,벤카테스와란/에이콘출판
쪽수:804쪽
출판일:2010-08-23
ISBN:9788960771499
목차
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장 PCIv
-PCI 패밀리
-주소 지정과 식별
-PCI 영역에 접근하기
--구성 영역
--입출력과 메모리
-DMA
-디바이스 예제: 이더넷 모뎀 카드
--초기화와 탐색
--자료 전송
-디버깅
-원시 코드 살펴보기
11장 USB
-USB 아키텍처
--버스 속도
--호스트 컨트롤러
--전송 유형
--주소 지정
-리눅스 USB 하위시스템
-드라이버 자료 구조
--usb_device 구조체
--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 드라이버 개선하기
-원시 코드 살펴보기