Frame Buffer 에 관련된 application 소스에서 ioctl() 함수가 아래와 같이 인자 3개를 사용되어지고 있었습니다.

   if ( ioctl( gx_fb.fd, FBIOGET_VSCREENINFO, &fbvar))
   {
      gx_close();
      return GXERR_VSCREEN_INFO;
   }

이러한 코드에서 ioctl() 함수를 사용할때 인자 3개를 전달하고 있었습니다.

저는 Frame Buffer 디바이스 드라이버 소스를 분석하기 위해

linux-2.6.21\include\linux\fb.h(622) 에서

struct fb_ops {

          struct module *owner;

               ........

           int (*fb_ioctl)(struct fb_info *info, unsigned int cmd, unsigned long arg);

               ........

};

로 fb_ioctl 함수 포인터변수의 인자는 총 3개의 인자로 구성되어 있습니다.

linux-2.6.21\drivers\video\fbmem.c(1259): 에서 fb_ioctl  를 아래와 같이 ioctl 에 연결하도록 설정되어 있었습니다.

static const struct file_operations fb_fops = {
          .owner = THIS_MODULE,
           .read =  fb_read,
           .write = fb_write,
           .ioctl = fb_ioctl,
          #ifdef CONFIG_COMPAT
           .compat_ioctl = fb_compat_ioctl,
          #endif
           .mmap =  fb_mmap,
           .open =  fb_open,
           .release = fb_release,
          #ifdef HAVE_ARCH_FB_UNMAPPED_AREA
           .get_unmapped_area = get_fb_unmapped_area,
          #endif
};

그런데, linux-2.6.21\drivers\video\fbmem.c(868): 에서 ioctl() 함수 정의를 찾아보니깐,
 
static int fb_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
          int fbidx = iminor(inode);       

           .........

}

보신바와 같이 인자 총 4개로 구성된 함수 정의를 찾을수 있었습니다. 

Frame Buffer 에 관련된 application 소스에서 ioctl() 함수는 인자 3개를 사용되어지고 있었습니다.

저는 인자 총 3개로 구성된 fb_ioctl() 함수 정의를 커널소스에서 찾으려고 했으나, 끝내 찾지 못했습니다.

혹시 어디를 보면 인자 3개인 fb_ioctl() 함수 정의를 찾을수 있는지 알려주시면 정말 감사하겠습니다.

그리고,

linux-2.6.21\drivers\video\s3c2410fb.c 에서

platform_device 라는 개념으로 구성되어있는 것을 보았습니다.

실제 캐렉터디바이스는 정의되어 있지 않았으며, /dev/fb 를 인자로 받아서, 등록하는거 같은데,

왜 이러한 개념으로 Frame Buffer 디바이스 드라이버를 정의하는지 정말 궁금합니다.  혹시 이부분에 대해서도

알고 계시면 알려주시면 정말 감사하겠습니다.