ioctl 参数传递

 

 

      昨天调摄像头的参数,用ioctl简单实现,接手驱动将近2个月了,ioctl有段时间没用,忘得差不多了,传入内核还可以,从内核传回用户空间,怎么也传不对,结果当时用return val;实现的,应急用。今天闲下来网上搜了下,试了试、可以了,记下。

 

      废话少说,代码别乱贴,直接上关键的:

  1.     if(copy_to_user((unsigned char *)arg, &nc, sizeof(nc))!=0)   
  2.         return -EFAULT;

 

  1.     put_user(val, (unsigned char *)arg)
  2.         return -EFAULT;

    第一个用copy_to_user,arg是ioctl传过来的参数为,unsigned long类型,不用管它,这么用就可以,nc也是个unsigned char类型,这里用的是地址&;

 

此处

应用层用iotcl(fd, IOCT_CMD_XX, &val);

 

 

    第二个用put_user,arg同样是ioctl传过来的参数为,unsigned long类型,不用管它,这么用就可以,val是假设也是unsigned char类型,是内核空间要传回用户的数据,这里用的是值;

 

此处

应用层也用iotcl(fd, IOCT_CMD_XX, &val);

 

 

你可能感兴趣的:(user,cmd)