리눅스커널/Device Driver

문자디바이스 드라이버와 file_operations

깡죠 2015. 5. 12. 20:17

IT EXPERT 의 리눅스 디바이스 드라이버  -유영창 - 을 읽으며   정리해 보았다.

 

문자디바이스 드라이버의 특성 바이트 단위로 처리되고, 써넣는 데이터는 보존될 수도 , 보존되지 않을 수도 있다.

 

문자 디바이스 드라이버의 경우

 

char_dev.c

/usr/src/linux-4.0.2/include/linux/fs.h

 

/usr/src/linux-4.0.2/include/linux/types.h"

 

 

typedef long long   __kernel_loff_t;  // 8byte 32bit system

 #if defined(__GNUC__)
typedef __kernel_loff_t     loff_t;
#endif



 

 

 

 

struct module *owner;

- 파일 오퍼레이션의 소유자를 나타낸다. 디바이스 드라이버의 사용 횟수를 커널에서 관리해야 하기 때문에 이 필드를 지정한다. 보통은 THIS_MODULE을 지정한다.

ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);

- 디바이스 드라이버의 비동기 읽기를 구현하는 함수를 지정한다. 일반적인 디바이스 드라이버에서는 이 기능을 사용하지 않기 때문에 NULL을 지정한다.

 

문자디바이스 드라이버를 동작하려면 커널에 등록되어 있어야한다.

<linux/fs.h> 헤더파일을 소스에 포함 시켜야 한다.

- register_chrdev : 디바이스를 등록한다.

- unregister_chrdev:등록된 디바이스를 제거한다.

 

 

/usr/src/linux-4.0.2/include/linux/fs.h"