안녕하세요..

ioctl에 대한 설명을 하기는 힘드네요...

참고할만한 곳을 가르켜드릴께요..[ http://www.falinux.com/win/07_driver/010_io/index.htm ]

저희 홈페이지의 강좌 >> 디바이스드라이버 >> 8) 디바이스 드라이버 예제 >> strongARM의 데이터

버스를 이용한 LED와 스위치의 I/O 제어의 소스 내용을 보시면 어플리케이션에서 ioctl관련 부분이

주석처리되어 있는것을 볼 수 있습니다.

또한 io.h 헤더파일에 보시면

// ioctl 함수의 command
#define MAGIC_SAMPLE_IO 'i'
#define SAMPLE_IO_READ _IOR( MAGIC_SAMPLE_IO, 1, long )
#define SAMPLE_IO_WRITE _IOW( MAGIC_SAMPLE_IO, 2, long )

위와 같이 되어있습니다....

즉, 어플에서 읽기 위해서는 ioctl( dev, SAMPLE_IO_READ, 0 ); 를 사용합니다.

dev는 장치 드라이버가 되겠죠..../dev/dio
SAMPLE_IO_READ는 io.h에 정의 되어 있습니다.
0 : 디바이스 드라이버에 넘겨줄 값입니다. io.h에 long형으로 선언되어 있습니다..

이렇게 어플에서 읽기 위해서 넘겨받은 인자들은 디바이스 드라이버에서

int io_ioctl( struct inode *minode, struct file *mfile, unsigned int cmd, unsigned long arg )
{
switch (cmd)
{
case SAMPLE_IO_READ : // 어떤일을 수행한다.
return 0;
case SAMPLE_IO_WRITE : // 어떤일을 수행한다.
return 0;
}

return -EINVAL;
}

를 수행하게 됩니다.......

도움이 될지는 모르겠지만 디바이스 드라이버에 관한 강좌는 인터넷을 돌아다니면 찾아보시면 됩니다.

또한 리눅스 디바이스 드라이버라는 책을 보시면 이에 관한 내용도 있습니다.

그럼 수고하세요..