300x250


07. 디바이스드라이버의 초기화와 종료.pptx


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()





반응형

+ Recent posts