07. 디바이스 드라이버의 초기화와 종료 김진홍 jhkim3624@etri.re.kr 2015.10.11.

Slides:



Advertisements
Similar presentations
Chapter 2. Building and Running Modules
Advertisements


패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
TextLCD 디바이스.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
김태원 심재일 김상래 강신택. 김태원 심재일 김상래 강신택 인터넷 통신망의 정보를 제공하는 서비스 인터넷의 자원 및 정보는 NIC가 관리 IP주소 또는 도메인으로 정보 검색 이용자 및 통신망 관한 정보를 제공.
<<< 시스템등록정보 “하드웨어-장치관리자” 설정 >>>
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
공유메모리 int shmget(key_t key, size_t size, int permflags);
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
이식성과 데이터형 서로 다른 프로세서 상에서의 이식성을 위해 가급적 리눅스 커널이 제공하는 데이터형을 사용하는 것이 좋다.
Linux System Programming
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
Unix Project2 <test character device 생성>
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
제 3장. C보다 나은 C++ II.
리눅스 커널과 디바이스드라이버.
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
목 차 물리주소와 가상주소 mmap() 함수를 이용한 I/O 제어 커널 프로그래밍 리눅스 디바이스 드라이버
Embedded Linux와 device driver
C 프로그래밍.
DK-128 ADC 실습 아이티즌 기술연구소
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
타이머카운터 사용법 휴먼네트웍스 기술연구소
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
Sungkyunkwan University OS Project Dongkun Shin
MicroC/OS-II 3. Memory Management ITISN Technical Lab.
TCP/IP Socket Programming…
10장. 예외처리.
2주차 운영체제-프로세스 2-B 장정훈.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
리눅스 시스템 & 커널 기초 P.46 – P.53 이름: nsh009 학번: 112 1/20.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
Device Driver 임베디드 시스템 I.
메모리 관리 & 동적 할당.
24장. 파일 입출력.
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
리눅스 디바이스 드라이버 (Linux Device Driver)
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
School of Electronics and Information. Kyung Hee University.
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
ARM Development Suite v1.2
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Signal & Inter-Process Communication
01. 개요 네트워크에 있는 컴퓨터와 그룹에 대한 NetBIOS 이름에 대응되는 IP 주소를 찾아주는 서비스
AT MEGA 128 기초와 응용 I 기본적인 구조.
3. 모듈 (5장. 모듈).
발표자 : 이지연 Programming Systems Lab.
구조체(struct)와 공용체(union)
Chapter 12 파일 입출력.
Chapter 11 구조체.
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
박상원 한국외국어대학교 정보통신공학과 데이터베이스 응용 특강 박상원 한국외국어대학교 정보통신공학과.
27. DMA와 PCI 디바이스 김진홍
06. 디바이스의 등록과 해제 김진홍
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
08. 블록 디바이스 드라이버 김진홍
2. 프로세스 B 안우진 - 운영체제 -.
22. 블록 디바이스 드라이버 김진홍
Presentation transcript:

07. 디바이스 드라이버의 초기화와 종료 김진홍 jhkim3624@etri.re.kr 2015.10.11.

1. 초기화와 종료 처리 2. 모듈 사용 횟수 관리 3. I/O 영역의 경쟁 처리 함수 목차

개요 개요 하드웨어의 동작 모듈과 하드웨어 사용 1. 초기화와 종료 처리 2. 모듈 사용 횟수 관리 3. I/O 영역의 경쟁 처리 함수 개요 하드웨어의 동작 시스템의 시작과 함께 동작 응용 프로그램이 디바이스 파일을 열었을 때 동작 모듈과 하드웨어 사용 모듈 초기화 시점에 하드웨어를 초기화 모듈 제거 시점에 하드웨어 사용 중지

초기화와 종료 모듈 적재와 제거 과정 insmod : module_init – 모듈 적재 1. 초기화와 종료 처리 2. 모듈 사용 횟수 관리 3. I/O 영역의 경쟁 처리 함수 모듈 적재와 제거 과정 insmod : module_init – 모듈 적재 rmmod : module_exit – 모듈 제거

모듈 초기화와 종료 module_init의 초기화 처리 디바이스 드라이버 등록 디바이스 드라이버에 내부 구조체 메모리 할당 1. 초기화와 종료 처리 2. 모듈 사용 횟수 관리 3. I/O 영역의 경쟁 처리 함수 module_init의 초기화 처리 디바이스 드라이버 등록 주번호, 디바이스 이름, 파일 조작에 필요한 함수 테이블의 위치 값 디바이스 드라이버에 내부 구조체 메모리 할당 e.g. 컨텍스트 동작과 인터럽트 처리를 위한 lock 관련 변수 여러 프로세스가 하나의 디바이스에 접근할 경우 사전 처리(20장) 하드웨어 초기화

모듈 초기화와 종료 module_exit의 종료 처리 디바이스 드라이버의 해제 디바이스 드라이버에 할당된 모든 메모리의 해제 1. 초기화와 종료 처리 2. 모듈 사용 횟수 관리 3. I/O 영역의 경쟁 처리 함수 module_exit의 종료 처리 디바이스 드라이버의 해제 디바이스 드라이버에 할당된 모든 메모리의 해제 하드웨어 제거에 따른 처리

open() 함수와 release() 함수의 처리 1. 초기화와 종료 처리 2. 모듈 사용 횟수 관리 3. I/O 영역의 경쟁 처리 함수 open()/close() 함수 int fd; fd = open(DEVICE_FILENAME, O_RDWR|O_NDELAY); if(fd<0) { printf(“error number %d”, error); exit(1); } 응용프로그램 struct file_operations call_fops = { : .open = xxx_open, } 구조체 open에 해당하는 함수 호출 (드라이버가 등록된 상태) int xxx_open (struct inode *inode, struct file *filp) { int err = 0; // open 처리 내용들 : return err; } open에 대응되는 함수

초기화와 종료 정리 처리 항목과 처리 시점 1. 초기화와 종료 처리 2. 모듈 사용 횟수 관리 3. I/O 영역의 경쟁 처리 함수 처리 항목과 처리 시점 항목 초기화 종료 열기 닫기 디바이스 드라이버의 등록 ● 디바이스 드라이버의 해제 동작에 필요한 내부 구조체의 메모리 할당 동작에 필요한 내부 구조체의 메모리 해제 여러 프로세스가 접근할 경우 사전 처리 여러 프로세스가 접근할 경우 종료 처리 주 번호에 종속된 부 번호를 관리하는 처리 하드웨어 검출 처리 및 에러 처리 하드웨어 초기화 제거 가능한 하드웨어 제거 처리 응용에서 드라이버를 사용하는 경우 초기 처리 응용에서 드라이버를 사용하지 않는 경우 처리 부 번호에 관련된 프로세스별 처리 프로세스별 메모리 할당 프로세스별 메모리 해제 모듈 사용 횟수 증가 모듈 사용 횟수 감소 사용 자원 등록 사용 자원 해제 인터럽트 서비스 함수 등록 인터럽트 서비스 함수 해제

커널 2.6 디바이스 드라이버의 사용 횟수 커널에서 관리 핫플로그인 처리가 필요할 땐 open()시 직접 호출 증가 1. 초기화와 종료 처리 2. 모듈 사용 횟수 관리 3. I/O 영역의 경쟁 처리 함수 디바이스 드라이버의 사용 횟수 커널에서 관리 핫플로그인 처리가 필요할 땐 open()시 직접 호출 증가 try_module_get(THIS_MODULE) 0일경우 실패(적재되지 않은 상태) 감소 module_put(THIS_MODULE)

I/O 메모리 영역 메모리영역 경쟁 처리 PCI나 기타 내부적으로 I/O 제어를 위해 메모리 영역을 사용하는 경우 1. 초기화와 종료 처리 2. 모듈 사용 횟수 관리 3. I/O 영역의 경쟁 처리 함수 메모리영역 경쟁 처리 PCI나 기타 내부적으로 I/O 제어를 위해 메모리 영역을 사용하는 경우 등록된 자원인가 확인 check_mem_region() 자원 등록 request_mem_region() 등록된 자원 제거 release_mem_region() int xxx_open(struct inode *inode, struct file *filp) { int err; if(err = check_mem_region(0x3FF0400, 0x10)) return err; request_mem_region(0x3FF0400, 0x10, “TEST”); return 0; }

Qna