300x250
07. 디바이스 드라이버의
초기화와 종료
개요
•개요
•하드웨어의
동작
•시스템의
시작과 함께 동작
•응용
프로그램이 디바이스 파일을 열었을 때 동작
•
•모듈과
하드웨어 사용
•모듈
초기화 시점에 하드웨어를 초기화
•모듈
제거 시점에 하드웨어 사용 중지
1. 초기화와 종료
•모듈
적재와 제거 과정
•insmod
: module_init – 모듈
적재
•rmmod
: module_exit – 모듈
제거
2. 모듈 초기화와 종료
•module_init의
초기화 처리
•디바이스
드라이버 등록
•주번호, 디바이스
이름, 파일
조작에 필요한 함수 테이블의 위치 값
•디바이스
드라이버에 내부 구조체 메모리 할당
•e.g.
컨텍스트
동작과 인터럽트 처리를 위한 lock
관련 변수
•여러
프로세스가 하나의 디바이스에 접근할 경우 사전 처리(20장)
•하드웨어
초기화
•module_exit의
종료 처리
•디바이스
드라이버의 해제
•디바이스
드라이버에 할당된 모든 메모리의 해제
•하드웨어
제거에 따른 처리
3. open() 함수와 release() 함수의 처리
•open()/close()
함수
4. 초기화와 종료 정리
•처리
항목과 처리 시점
항목 |
초기화 |
종료 |
열기 |
닫기 |
디바이스 드라이버의 등록 |
● |
|||
디바이스 드라이버의 해제 |
● |
|||
동작에 필요한 내부 구조체의 메모리 할당 |
● |
|||
동작에 필요한 내부 구조체의 메모리 해제 |
● |
|||
여러 프로세스가 접근할 경우 사전 처리 |
● |
● |
||
여러 프로세스가 접근할 경우 종료 처리 |
● |
● |
||
주 번호에 종속된 부 번호를 관리하는 처리 |
● |
|||
하드웨어 검출 처리 및 에러 처리 |
● |
● |
||
하드웨어 초기화 |
● |
● |
||
제거 가능한 하드웨어 제거 처리 |
● |
● |
||
응용에서 드라이버를 사용하는 경우 초기 처리 |
● |
|||
응용에서 드라이버를 사용하지 않는 경우 처리 |
● |
|||
부 번호에 관련된 프로세스별 처리 |
● |
|||
프로세스별 메모리 할당 |
● |
|||
프로세스별 메모리 해제 |
● |
|||
모듈 사용 횟수 증가 |
● |
|||
모듈 사용 횟수 감소 |
● |
|||
사용 자원 등록 |
● |
● |
||
사용 자원 해제 |
● |
● |
||
인터럽트 서비스 함수 등록 |
● |
● |
||
인터럽트 서비스 함수 해제 |
● |
● |
•디바이스
드라이버의 사용 횟수
•커널에서
관리
•핫플로그인
처리가 필요할 땐 open()시 직접
호출
•증가
•try_module_get(THIS_MODULE)
•0일경우
실패(적재되지
않은 상태)
•감소
•module_put(THIS_MODULE)
•메모리영역
경쟁 처리
•PCI나 기타
내부적으로 I/O 제어를
위해 메모리 영역을 사용하는 경우
•등록된
자원인가 확인
•check_mem_region()
•자원
등록
•request_mem_region()
•등록된
자원 제거
•release_mem_region()
반응형
'IT > 디바이스드라이버' 카테고리의 다른 글
20. 다중 프로세스 환경의 디바이스 드라이버 (0) | 2015.11.10 |
---|---|
08. 디바이스 드라이버의 읽기와 쓰기 (0) | 2015.10.15 |
06. 디바이스의 등록과 해제 (0) | 2015.10.15 |
내용 보충(ioctl, mmap, fsync&flush) (0) | 2015.10.15 |
08. 블록 디바이스 드라이버 (0) | 2015.10.12 |