300x250
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)
(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,
};
{
.owner = THIS_MODULE,
.llseek = xxx_llseek,
.read = xxx_read,
.write = xxx_write,
.ioctl = xxx_ioctl,
.open = xxx_open,
.release = xxx_release,
};
참고 IT EXPERT 리눅스 디바이스 드라이버
반응형
'IT > 디바이스드라이버' 카테고리의 다른 글
20. 다중 프로세스 환경의 디바이스 드라이버 (0) | 2015.11.10 |
---|---|
08. 디바이스 드라이버의 읽기와 쓰기 (0) | 2015.10.15 |
07. 디바이스 드라이버의 초기화와 종료 (0) | 2015.10.15 |
내용 보충(ioctl, mmap, fsync&flush) (0) | 2015.10.15 |
08. 블록 디바이스 드라이버 (0) | 2015.10.12 |