300x250


06. 디바이스의 등록과 해제.pptx


06. 디바이스의 등록과 해제


개요

개요
응용프로그램에서 하드웨어를 제어할 때는 디바이스 파일을 이용
응용프로그램
사용자 공간에서 프로세스 형식으로 동작
하드웨어에 직접 접근할 수 없어 디바이스 파일을 이용
디바이스 파일
커널 내의 파일 시스템 구조에 의해 디바이스 드라이버 함수와 연결 됨
응용이 디바이스 파일에 입출력 함수로  데이터를 쓰면 디바이스 드라이버 함수가 호출 됨
디바이스 드라이버
하드웨어 제어를 위해 커널 내에 디바이스를 제어하는 함수집합인 디바이스 드라이버가 있어야 함
모듈 형태로 커널에 적재될 수도 있고, 처음부터 커널 내부에 구현되어 있을 수 있음
문자 디바이스 드라이버는 응용프로그램에서 디바이스 파일을 통해 호출

블록 & 네트워크 디바이스 드라이버는 커널에서 직접 호출

1. 문자 디바이스 드라이버 동작

개념
블록 디바이스 드라이버의 상대적인 개념
저장할 용량이 정해진 하드디스크

반면 키보드나 시리얼 입출력은 파일의 끝이란 개념이 없음
사용
1.응용 프로그램에서 저수준 파일 함수를 이용
2.디바이스 파일에 데이터를 읽고 씀
3.대응되는 디바이스 드라이버 내의 함수가 호출 됨




디바이스 파일과 드라이버 함수를 연결하는 방법


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

구조체 필드

*owner

오퍼레이션의 소유자

*llseek

파일 포인터 위치를 강제로 이동

*read

드라이버 읽기

*aio_read

비동기 읽기

*write

드라이버 쓰기

*aio_write

비동기 쓰기

*poll

다중 입출력 처리

*ioctl

Read write 이외의 입출력 처리

*mmap

하드웨어의 메모리를 프로세스에 매핑

*open

열기

*release

닫기

저수준 입출력 함수와 file_operations 필드

3. 문자 디바이스 드라이버의 등록과 해제

등록과 제거
등록
register_chrdev
(unsigned int major, const char *name, struct file_operations *fops)
제거

unregister_chrdev(unsigned int major, const char *name)

struct file_operations 변수

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,
};



참고 IT EXPERT 리눅스 디바이스 드라이버

반응형

+ Recent posts