06. 디바이스의 등록과 해제 김진홍 jhkim3624@etri.re.kr 2015.10.11.

Slides:



Advertisements
Similar presentations
ADC 울산대 MCSL 김준수. 디바이스 드라이버란 ? 운영체제는 사용자모드와 커널모드로 나뉨. 사용자모드에서 필요시 System Call 을 이용해 커널모드 진입 가능. 디바이스 드라이버는 디바이스를 제어하는 함수들의 모음. 부팅이 된 후 에 모듈로 적재되는 경우도.
Advertisements

컴퓨터와 인터넷.
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
5장. Enhanced Char Driver Operations 과제
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
디바이스 드라이버 기초 디바이스 드라이버의 개요 파일 연산 디바이스 드라이버 등록 디바이스 드라이버 구성
디바이스 드라이버 응용 디바이스와 주소 디바이스 드라이버 구현 일반 LED 디바이스 드라이버 FND 디바이스 드라이버
디바이스 드라이버.
이식성과 데이터형 서로 다른 프로세서 상에서의 이식성을 위해 가급적 리눅스 커널이 제공하는 데이터형을 사용하는 것이 좋다.
디바이스 드라이버 개요 가상 디바이스드라이버 실습
Linux System Programming
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
Department of Computer Science and Engineering
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
Unix Project2 <test character device 생성>
FND (Flexible Numeric Display)
Step Motor Device Driver
강 명 수 LINUX 설치 강 명 수
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
리눅스 커널과 디바이스드라이버.
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
목 차 물리주소와 가상주소 mmap() 함수를 이용한 I/O 제어 커널 프로그래밍 리눅스 디바이스 드라이버
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Linux/UNIX Programming
파이프와 exec 시스템 호출 (ls | wc)
8 메모리 매핑.
파일 기술자 파일 기술자 현재 열려있는 파일을 구분하는 정수값 저수준 파일 입출력에서 열린 파일을 참조하는데 사용
(ioctl, mmap, fsync&flush)
4장 파일.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
WinCE Device Driver 실습 #2
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
13장 고급 입출력 함수 박사 4학기 최 성자.
파일 접근권한 제어 stat 구조체의 st_mode 항목에 파일의 종류와 접근권한 정보저장 st_mode 값의 구조.
TCP/IP Socket Programming…
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
문자 디바이스 드라이버 임베디드 시스템.
리눅스 시스템 & 커널 기초 P.46 – P.53 이름: nsh009 학번: 112 1/20.
Device Driver 임베디드 시스템 I.
24장. 파일 입출력.
네트워크 프로그래밍의 이해 School of Electronics and Information.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
리눅스 디바이스 드라이버 (Linux Device Driver)
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
Stepper Motor 디바이스 드라이버
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Linux/UNIX Programming
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
3. 모듈 (5장. 모듈).
구조체(struct)와 공용체(union)
Chapter 12 파일 입출력.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
박상원 한국외국어대학교 정보통신공학과 데이터베이스 응용 특강 박상원 한국외국어대학교 정보통신공학과.
Department of Computer Engineering
27. DMA와 PCI 디바이스 김진홍
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
08. 블록 디바이스 드라이버 김진홍
CHAP 15. 데이터 스토리지.
3장 파일 다루기 한빛미디어(주).
22. 블록 디바이스 드라이버 김진홍
Presentation transcript:

06. 디바이스의 등록과 해제 김진홍 jhkim3624@etri.re.kr 2015.10.11.

목차 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 목차

개요 개요 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 개요 응용프로그램에서 하드웨어를 제어할 때는 디바이스 파일을 이용 응용프로그램 사용자 공간에서 프로세스 형식으로 동작 하드웨어에 직접 접근할 수 없어 디바이스 파일을 이용 디바이스 파일 커널 내의 파일 시스템 구조에 의해 디바이스 드라이버 함수와 연결 됨 응용이 디바이스 파일에 입출력 함수로 데이터를 쓰면 디바이스 드라이버 함수가 호출 됨 디바이스 드라이버 하드웨어 제어를 위해 커널 내에 디바이스를 제어하는 함수집합인 디바이스 드라이버가 있어야 함 모듈 형태로 커널에 적재될 수도 있고, 처음부터 커널 내부에 구현되어 있을 수 있음 문자 디바이스 드라이버는 응용프로그램에서 디바이스 파일을 통해 호출 블록 & 네트워크 디바이스 드라이버는 커널에서 직접 호출 AP DF DD HW 응용 장치파일 디바이스 드라이버 저수준 파일 입출력 함수 파일 처리 시스템 콜 하드웨어 제어 함수 사용자 공간 커널 공간

문자 디바이스 드라이버 동작 개념 블록 디바이스 드라이버의 상대적인 개념 저장할 용량이 정해진 하드디스크 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 개념 블록 디바이스 드라이버의 상대적인 개념 저장할 용량이 정해진 하드디스크 반면 키보드나 시리얼 입출력은 파일의 끝이란 개념이 없음

문자 디바이스 드라이버 동작 사용 응용 프로그램에서 저수준 파일 함수를 이용 디바이스 파일에 데이터를 읽고 씀 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 사용 응용 프로그램에서 저수준 파일 함수를 이용 디바이스 파일에 데이터를 읽고 씀 대응되는 디바이스 드라이버 내의 함수가 호출 됨 응용 프로그램 장치 파일 문자 디바이스 드라이버 하드웨어 read dev_read 결과

struct file_operations 문자 디바이스 드라이버 동작 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 디바이스 파일과 드라이버 함수를 연결하는 방법 insmod rmmod open(…) read(…) write(…) ioctl(…) close(…) 응용 프로그램 디바이스 드라이버 { : } xxx_init(…) xxx_interrupt(…) xxx_open(…) xxx_read(…) xxx_write(…) xxx_ioctl(…) xxx_release(…) xxx_exit(…) xxx_fop = open : xxx_open, read : xxx_read, write : xxx_write, ioctl : xxx_ioctl, release : xxx_release }; struct file_operations HW 인터럽트

struct file_operations 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 개요 문자 디바이스 드라이버와 응용 프로그램을 연결하는 고리 응용프로그램 저수준 파일 입출력 함수 사용 디바이스 파일에 접근 등록된 드라이버의 파일 오퍼레이션 구조체 정보 참고 디바이스 파일에 접근한 함수에 대응하는 함수 호출 문자 디바이스 드라이버를 등록한다? 이 파일 오퍼레이션 구조체 변수를 커널에 등록한다.

struct file_operations 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 구조체 필드 *owner 오퍼레이션의 소유자 *llseek 파일 포인터 위치를 강제로 이동 *read 드라이버 읽기 *aio_read 비동기 읽기 *write 드라이버 쓰기 *aio_write 비동기 쓰기 *poll 다중 입출력 처리 *ioctl Read write 이외의 입출력 처리 *mmap 하드웨어의 메모리를 프로세스에 매핑 *open 열기 *release 닫기

저수준 입출력 함수와 file_operations 필드 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 open():xxx_open() fd = open(const char *pathname, int flags); int xxx_open(struct inode *inode, struct file *filp) { return ret; }

저수준 입출력 함수와 file_operations 필드 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 close():xxx_release() fd = close(int fd); int xxx_release(struct inode *inode, struct file *filp) { return ret; }

저수준 입출력 함수와 file_operations 필드 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 read():xxx_read() ret = read(int fd, void *buf, size_t count); ssize_t xxx_read(struct file *filp, char *buf, size_t count, loff_t *f_pos) { return ret; }

저수준 입출력 함수와 file_operations 필드 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 write():xxx_write() ret = write(int fd, void *buf, size_t count); ssize_t xxx_write(struct file *filp, char *buf, size_t count, loff_t *f_pos) { return ret; }

저수준 입출력 함수와 file_operations 필드 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 lseek():xxx_llseek() ret = write(int fd, off_t offset, int whence); ssize_t xxx_llseek(struct file *filp, loff_t off, int whence) { return ret; }

개요 등록과 제거 등록 제거 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 등록과 제거 등록 register_chrdev (unsigned int major, const char *name, struct file_operations *fops) 제거 unregister_chrdev(unsigned int major, const char *name)

struct file_operations 변수 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 Struct file_operations xxx_fops = { .owner = THIS_MODULE, .llseek = xxx_llseek, .read = xxx_read, .write = xxx_write, .ioctl = xxx_ioctl, .open = xxx_open, .release = xxx_release, };

문자 디바이스 드라이버의 등록과 해제 문자 드라이버의 동작 순서 1. 디바이스 드라이버 제어 방식 2. struct file_operations 3. 문자 디바이스 드라이버의 등록과 해제 및 구성 4. 문자 디바이스 드라이버 작성 예제 문자 드라이버의 동작 순서 사용자 공간 struct file_operations *fops; chrdevs[MAX_PROBE_HASH] /dev/calldev insmod rmmod open(…) read(…) write(…) ioctl(…) close(…) 응용 프로그램 디바이스 드라이버 xxx_init(…) { register_chdrv( ) } module_init(xxx_init) xxx_exit(…) unregister_chdrv(…) module_exit(xxx_exit); xxx_fop = open : xxx_open, read : xxx_read, write : xxx_write, ioctl : xxx_ioctl, release : xxx_release }; struct file_operations 장치파일 (1) (2) (3) (4) (5) (6) (7) 커널 공간

Qna