커널 2.6.36  이상부터는  struct file_operations 구조체에서  ioctl() 함수가 완전히 사라졌다

아래의 글에 자세한 설명이 나온다.

http://forum.falinux.com/zbxe/?document_srl=553645

 

디바이스 드라이버 작성중 ioctl() 함수 에러가나  struct file_operations 구조체의 멤버중  .ioctl 멤버의 이름을  .unlock_ioctl 로 변경하였다.

컴파일 에러안나오고..(warning 은 나온다.. 대게 이런건 무시하는 경향이 있어서.) 잘 동작한다.

헌데 어플에서 ioctl 함수를 호출하면  ioctl() 함수의 리턴값이 -EINVAL 이 나왔다.

 

이런 당황스런 일이..

원인은 이렇다.

 

   int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
   long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);

 

두함수의 인자 갯수가 틀리다. 

커널 2.6.36 이상을 사용하려고 한다면 기존 드라이버소스 수정할때 주의 하자