300x250


08. 디바이스 드라이버의 읽기와 쓰기.pptx


08. 디바이스 드라이버의

읽기와 쓰기

0. 개요

개요
하드웨어의 동작
동작을 위한 의미있는 데이터를 써야함
상태를 알기 위해 하드웨어 데이터를 읽어야함

read, write, inb, outb, readb, writeb, get_user, put_user 사용법



1. 요구사

구현 요구사항
사용자 메모리 공간과 커널 메모리 공간 사이의 데이터 이동
처리 조건이 되지 않을 때의 블록 처리
하드웨어 제어 함수
여러 프로세스가 동시 접근 했을 때의 경쟁 처리

인터럽트 서비스 함수와의 경쟁 처리

2. 구현
read()
목적
디바이스에서 발생한 데이터나 상태 정보를 응용에서 읽어가도록 하는 것
처리
응용
read() 함수를 이용해 디바이스 파일에 데이터 읽기를 시도
커널
file_operations 구조체의 read필드에 저장된 xxx_read()수행


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
처리된 데이터 개수;
}



3. file 구조체

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;

부 번호 처리시 사용


4. I/O 처리 

개요

메모리와 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 버스폭에 따라 사용 함수가 나뉨
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 계열 프로세서
하드웨어가 I/O 포트에 연결되어 있지 않고 메모리 공간에 연결되어 있음
읽기
readb(), readw(), readl(), memcpy_fromio()
쓰기
writeb(), writew() writel(), memcpy_toio()


사용자와 커널의 메모리 매핑
커널에서 제공하는 함수를 통해 메모리의 데이터를 주고 받음
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)


반응형

+ Recent posts