08. 디바이스 드라이버의 읽기와 쓰기 김진홍 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 과제
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
제14장 동적 메모리.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
연결리스트(linked list).
제 9 장 구조체와 공용체.
디바이스 드라이버 기초 디바이스 드라이버의 개요 파일 연산 디바이스 드라이버 등록 디바이스 드라이버 구성
디바이스 드라이버.
PCI가 어렵울 거라는 생각을 지금부터 버리도록 합시다.
디바이스 드라이버 개요 가상 디바이스드라이버 실습
Department of Computer Science and Engineering
조 병 규 Software Quality Lab. 한국교통대학교
Unix Project2 <test character device 생성>
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
07. 디바이스 드라이버의 초기화와 종료 김진홍
목 차 물리주소와 가상주소 mmap() 함수를 이용한 I/O 제어 커널 프로그래밍 리눅스 디바이스 드라이버
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
DSP Lab. Week 3 My image Doug Young Suh Media Lab. Rm401
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Linux/UNIX Programming
파이프와 exec 시스템 호출 (ls | wc)
DK-128 ADC 실습 아이티즌 기술연구소
부트로더와 Self Programming
파일 기술자 파일 기술자 현재 열려있는 파일을 구분하는 정수값 저수준 파일 입출력에서 열린 파일을 참조하는데 사용
(ioctl, mmap, fsync&flush)
4장 파일.
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
타이머카운터 사용법 휴먼네트웍스 기술연구소
Sungkyunkwan University OS Project Dongkun Shin
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
문자 디바이스 드라이버 임베디드 시스템.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
리눅스 시스템 & 커널 기초 P.46 – P.53 이름: nsh009 학번: 112 1/20.
Device Driver 임베디드 시스템 I.
24장. 파일 입출력.
네트워크 프로그래밍의 이해 School of Electronics and Information.
리눅스 디바이스 드라이버 (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 : 함수와 변수 / 배열 -
Linux/UNIX Programming
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
구조체 (Structure).
AT MEGA 128 기초와 응용 I 기본적인 구조.
3. 모듈 (5장. 모듈).
구조체(struct)와 공용체(union)
Chapter 12 파일 입출력.
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
박상원 한국외국어대학교 정보통신공학과 데이터베이스 응용 특강 박상원 한국외국어대학교 정보통신공학과.
Department of Computer Engineering
27. DMA와 PCI 디바이스 김진홍
06. 디바이스의 등록과 해제 김진홍
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
08. 블록 디바이스 드라이버 김진홍
3장 파일 다루기 한빛미디어(주).
22. 블록 디바이스 드라이버 김진홍
Presentation transcript:

08. 디바이스 드라이버의 읽기와 쓰기 김진홍 jhkim3624@etri.re.kr 2015.10.11.

목차 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 4. 디바이스 드라이버의 읽기 쓰기 구현 예제

개요 개요 하드웨어의 동작 동작을 위한 의미있는 데이터를 써야함 상태를 알기 위해 하드웨어 데이터를 읽어야함 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 개요 하드웨어의 동작 동작을 위한 의미있는 데이터를 써야함 상태를 알기 위해 하드웨어 데이터를 읽어야함 read, write, inb, outb, readb, writeb, get_user, put_user 사용법

요구사항 구현 요구사항 사용자 메모리 공간과 커널 메모리 공간 사이의 데이터 이동 처리 조건이 되지 않을 때의 블록 처리 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 구현 요구사항 사용자 메모리 공간과 커널 메모리 공간 사이의 데이터 이동 처리 조건이 되지 않을 때의 블록 처리 하드웨어 제어 함수 여러 프로세스가 동시 접근 했을 때의 경쟁 처리 인터럽트 서비스 함수와의 경쟁 처리

구현 read() 목적 처리 디바이스에서 발생한 데이터나 상태 정보를 응용에서 읽어가도록 하는 것 응용 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 read() 목적 디바이스에서 발생한 데이터나 상태 정보를 응용에서 읽어가도록 하는 것 처리 응용 read() 함수를 이용해 디바이스 파일에 데이터 읽기를 시도 커널 file_operations 구조체의 read필드에 저장된 xxx_read()수행

구현 read() 응용계층에서의 open() 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 read() 응용계층에서의 open() fd = open(const char *pathname, int flags); ret = read(int fd, void *buf1, size_t count); ssize_t xxx_read(struct file *filp, char *buf2, size_t count, loff_t *f_pos) { return ret; }

구현 read() 디바이스 드라이버의 open() *buf1 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 read() 디바이스 드라이버의 open() ssize_t xxx_read(struct file *filp, const char *buf, size_t count, loff_t *f_pos) { if(!(준비된 데이터가 있는가?)) { if(!(filp -> f_flags & O_NONBLOCK)) { //블록 모드로 열렸다면 프로세스를 재운다 } } //하드웨어에서 데이터를 읽는다. //inb(), out(), … , readb(), writeb() 이용 //사용자 공간에 데이터를 전달한다. //copy_to_user, put_user return 처리된 데이터 개수; } *buf1 *buf2 copy_to_user() inb(), readb()… 디바이스 메모리 유저 메모리 사용자영역 커널영역

file 구조체 struct file *filp 내용 핵심 필드 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 struct file *filp 내용 디바이스 파일이 어떤 형식으로 열렸는가에 대한 정보 핵심 필드 unsigned int f_flags 응용에서 open(const char *pathname, int flags)했을때 flags에 설정된 값 디바이스 파일을 열었을 때 처리하는 방식을 결정 O_RDONLY : 읽기전용 처리 O_NONBLOCK, O_NDELAY : 블록처리를 하지 않음 O_SYNC : 써넣는 데이터를 반드시 디바이스에 적용함 loff_t f_pos f_pos 필드 변수에 현재 읽기/쓰기 위치를 담음 read()write()llseek()과 같이 파일 포인터를 다루는 디바이스 드라이버에 쓰임 void *private_data 프로세스가 함수간에 메모리를 공유할때 사용.(전역변수 처럼) struct file_operations *f_op; 부 번호 처리시 사용

개요 메모리와 I/O처리의 구분 CPU는 하드웨어를 처리하기 위해 I/O 명령을 내림 I/O명령은 CPU의 종류에 따라 나뉨 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 메모리와 I/O처리의 구분 CPU는 하드웨어를 처리하기 위해 I/O 명령을 내림 I/O명령은 CPU의 종류에 따라 나뉨 메모리를 처리하는 명령과 다르게 다루는 경우 I/O Mapped I/O 인텔 계열 프로세서 in/out이라는 명령이 별도로 존재 동일하게 처리하는 경우 Memory Mapped I/O Arm 계열 프로세서

I/O Mapped 입출력 처리 함수 인텔 계열 처리하고자 하는 시스템의 I/O 버스폭에 따라 사용 함수가 나뉨 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 인텔 계열 처리하고자 하는 시스템의 I/O 버스폭에 따라 사용 함수가 나뉨 b = byte(8 bit) w= word(16 bit) l = long(32 bit) 하드웨어에서 데이터 읽기 inb(), inw(), inl(), insb(), insw(), insl() 하드웨어에 데이터 쓰기 outb(), outw(), outl(), outsb(), outsw(), outsl()

Memory Mapped 입출력 처리 함수 PCI디바이스나 ARM 계열 프로세서 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 PCI디바이스나 ARM 계열 프로세서 하드웨어가 I/O 포트에 연결되어 있지 않고 메모리 공간에 연결되어 있음 읽기 readb(), readw(), readl(), memcpy_fromio() 쓰기 writeb(), writew() writel(), memcpy_toio()

개요 사용자와 커널의 메모리 매핑 커널에서 제공하는 함수를 통해 메모리의 데이터를 주고 받음 1. 읽기와 쓰기의 구현 2. I/O처리 3. 사용자 프로세스 공간과 커널 프로세스 공간 사용자와 커널의 메모리 매핑 커널에서 제공하는 함수를 통해 메모리의 데이터를 주고 받음 verify_area(type, addr, size) copy_to_user(to, from, n) copy_from_user(to, from, n) get_user(x, ptr) put_user(x, ptr)

Qna