驱动层代码
static int __ite_ioctl(struct file *filp,unsigned int cmd,unsigned long arg )
{
printk("__ite_ioctl \n");
switch (cmd)
{
//获取垂直分辨率
case IT6604_IO_GET_RES:
{
arg=(unsigned long)&__hdmi_info;
printk("<%4d,%4d> \n",(int)__hdmi_info.h_active, (int)__hdmi_info.v_active);
break;
}
default:
break;
}
}用户层代码
int main(void)
{
int fd = 0;
__input_info hdmi_info;
fd = open("/dev/myit6604",O_RDONLY);
if(fd < 0)
{
printf("open file error  \n");
return -1;
}
if(ioctl(fd, IT6604_IO_READ,&hdmi_info) < 0)
{
printf("error\n");
return -1;
}
printf("<%d,%d> \n",(int)hdmi_info.h_res,(int)hdmi_info.v_res);
close(fd);
return 0;
}执行用户程序的代码后结果
此时分辨率为1080P的
mnt/demo/ioctrl # ./a.out 
<0,72> 
/mnt/demo/ioctrl # ./a.out 
<0,72> 

解决方案 »

  1.   

    内核态和应用态交互数据是否应该用copy_from_user和copy_to_user。还有一点,为什么ioctl的命令码不一样,两个命令码名称不一样,定义的是否相同。
      

  2.   

    命令码是对的,宏定义不一样, 内核态和应用态交互数据如果用copy_from_user和copy_to_use会不会效率变慢呢,我看着好多的例子都是用的copy_from_user和copy_to_use
      

  3.   

    命令码是对的,宏定义不一样, 内核态和应用态交互数据如果用copy_from_user和copy_to_use会不会效率变慢呢,我看着好多的例子都是用的copy_from_user和copy_to_use