Computer Engineering/임베디드 시스템

리눅스 디바이스 드라이버 프로그래밍(4) - ioctl 함수, blocked 입력

_rian 2019. 6. 13. 07:47

ioctl() 시스템 호출

ioctl은 "입출력 제어(I/O control)"의 줄임말로, read(), write() 이외의 장치에 특화된 입출력, 제어 동작을 수행하고자 할 때 사용되는 시스템 호출이다.

하드웨어에 데이터를 쓰거나 읽어올 때, 일반적인 R/W 함수의 동작만으로는 하드웨어의 동작 상태에 따라 처리되지 못하는 데이터가 종종 발생하기 때문에 리눅스 커널에서는 ioctl을 제공한다. ioctl 함수는 read나 write 작업도 처리할 수 있지만, 하드웨어의 제어나 상태를 얻기 위해 주로 사용되는 함수이다.

#include <sys/ioctl.h>
int ioctl(int fd, int cmd, ...);
  • cmd 인수로 수행할 동작 지정
  • 추가적인 인수 사용 가능

ioctl() 시스템 호출의 구현

ioctl 함수는 old version에서는 디바이스 드라이버에서 함수를 제공했는데, linux kernel 2.6.36 이후에는 제거되었다. 바뀐 새로운 버전에서는 아래와 같은 함수로 변경되었다.

long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);