조회 수 5873 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

디바이스 파일(device file)은 장치 하드웨어 공간의 디바이스 드라이버에 대응하는 파일이다. 장치 파일의 inode는 장치 유형 (type), 주번호(major number), 부번호(minor number)로 구성된다.

 

디바이스 파일 생성은 mknod 명령어를 이용하여 수행한다.

 

mknod /dev/file_name [c|b] major_number minor_number

 

주번호는 커널이 디바이스와 연관된 드라이버를 구분하는 데 사용되고 부번호는 드라이버가 각 디바이스를 구분하는데 이용된다.

 

다음은 간단한 문자 디바이스 드라이버를 만들고, 이것을 커널에 설치하는 방법을 설명한다.

 

기본적인 문자 디바이스 드라이버의 형태

 

문자 디바이스 드라이버의 골격은 기본적으로 아래와 같은 단계로 구성된다.

 

▣Header Files : 첫 번째 단계로 디바이스 드라이버에서 사용할 헤더를 정의한다.

▣Funtion Prototypes : 두 번째 단계로 디바이스 드라이버에서 사용될 함수들을 작성한다. 기본적으로 사용자 공간의 응용 프로그램에서 다비아스 드라이버들을  open하고 close할 때 사용되는 open과 release함수 등을 작성하고 디바이스 특징에 따라 file_opertations의 구조체에 포함한 함수들을 작성한다.

▣File Operation : 세 번째 단계로 위에서 작성된 함수들을 각각의 특성에 맞게 file_operations 구조체에 등록한다.

▣모듈설치: 네 번째 단계에서 init_module 함수를 이용하여 디바이스 드라이버를 커널에 적재한다.

▣모듈제거: 다섯 번째에서 cleanup_module 함수를 이용하여 디바이스 드라이버를 커널에 제거한다.

 

따라서 일반적인 문자/블록 디바이스 드라이버를 구성할 때 기본 골격은 Header Files, Funtion Prototype, File Operation으로 구분되며 다음과 같다.

 

①Header Files

#include<linux/kernel.h>

#include<linux/module.h>

#include<linux/init.h>

 

②Funtion Prototype

int device_open(...) {...} //디바이스 드라이버를  open하는 함수

int device_release(...) {...} //디바이스 드라이버를 close하는 함수

ssize_t device_write(...) {...} //디바이스 드라이버에 write하는 함수

ssize_t device_read(...) {...} //디바이스 드라이버에 read하는 함수

 

③File Operation

static struct file_operations device_fops =

...

ssize_t (*read) (...);

ssize_t (*write) (...);

...

int (*open) (...);

int(*release) (...);

...

};

 

④모듈 설치시 초기화 수행

int init_module(void) {...}

 

init_module()함수는 디바이스 드라이버를 등록할 때에 사용되는 함수로서 메모리 할당이나 초기화 할 때에 사용된다.

 

⑤모듈 제거 시 커널로 반환 작업수행

void cleanup_module(void) {...}

 

cleanup_module() 함수는 디바이스 드라이버를 제거할 때에 사용되는 함수로서 init_module()함수에 의해 탑재되었던 디바이스 드라이버를 할당된 I/O메모리 영역에 반환한다.

 

 

file_operations 구조체

사용자가 디바이스 드라이버를 만들 때 file_operations의 구조체를 사용하는 이유는 표준화된 인터페이스를 제공하기 위해서이다.

리눅스에서의 모든 자이 디바이스는 하나의 파일처럼 동작하도록 되어있으며, 이때에 사용되는 함수들이 file_operations 구조체에 등록되어있다. 예를 들어 디바이스 드라이버에서 데이터를 전송하기 위하여 쓰기 동작을 할 때에 file_operations에 있는 write함수를 사용해 쓸 수 있다.

 

file_operations 의 구조체 원형


  1. No Image

    libblkid - USB Storage의 정보 가져오기

    Date2018.10.18 Bymakersweb Views2040
    Read More
  2. No Image

    tslib 크로스 컴파일과 터치스크린 보정

    Date2018.08.02 Bymakersweb Views3981
    Read More
  3. Ubuntu Linux에서 dbus-c++바인딩 D-Bus 테스트

    Date2018.03.07 Bymakersweb Views9308
    Read More
  4. No Image

    NFS를 통해 파일시스템 공유

    Date2018.03.05 Bymakersweb Views2598
    Read More
  5. Wayland에 대한 간단한 소개

    Date2017.12.29 Bymakersweb Views5287
    Read More
  6. Ubuntu16.04에서 weston구동

    Date2017.12.28 Bymakersweb Views2713
    Read More
  7. No Image

    UVC 장치를 사용할때 v4l2: select timeout 에러 발생

    Date2017.12.27 Bymakersweb Views4465
    Read More
  8. [IPC]D-Bus 소개

    Date2015.02.28 Bymakersweb Views31784
    Read More
  9. No Image

    리눅스 데스크탑 환경 종류

    Date2015.02.11 Bypjk Views6016
    Read More
  10. No Image

    디바이스 드라이버에 대해서

    Date2014.04.19 Bymakersweb Views5873
    Read More
  11. 리눅스 커널 소스코드 구성도

    Date2014.03.04 Bymakersweb Views7139
    Read More
  12. No Image

    read() 함수, write() 함수

    Date2014.03.04 Bymakersweb Views13027
    Read More
  13. No Image

    리눅스 디렉터리 구조

    Date2014.02.28 Bymakersweb Views4464
    Read More
  14. No Image

    1. make

    Date2014.02.05 Bypjk Views3587
    Read More
  15. No Image

    2. 간단한 Makefile

    Date2014.02.05 Bypjk Views4234
    Read More
  16. No Image

    3. 매크로(Macro) 와 확장자(Suffix) 규칙

    Date2014.02.05 Bypjk Views3959
    Read More
  17. No Image

    4. Makefile를 작성할 때 알면 좋은 것들

    Date2014.02.05 Bypjk Views4942
    Read More
  18. No Image

    5. make 중요 옵션 정리

    Date2014.02.05 Bypjk Views4217
    Read More
  19. No Image

    6. Makefile 작성의 가이드라인

    Date2014.02.05 Bypjk Views3777
    Read More
  20. No Image

    mmap() 함수, munmap() 함수

    Date2014.02.05 Bypjk Views18440
    Read More
Board Pagination Prev 1 2 3 Next
/ 3