日期:2014-05-16  浏览次数:20604 次

ioctl设备控制
C/C++ code

if(_IOC_DIR(cmd) & _IOC_READ)
    err = !access_ok(VERIFY_WRITE,(void *)arg,_IOC_SIZE(cmd));
else if(_IOC_DIR(cmd) & _IOC_WRITE)
    err = !access_ok(VERIFY_READ,(void *)arg,_IOC_SIZE(cmd));
if(err)
   return -EFAULT;
_IOC_READ
_IOC_WRITE //表示什么意思

_IOC_SIZE(cmd)//表示什么意思
逐行解释一下 谢谢!!!




------解决方案--------------------
宏而已,建议用source insight看Linux kernel source code.
------解决方案--------------------
access_ok:检查一个用户空间的指针是否是有效的。
@type:访问的类型:%VERIFY_READ或者%VERIFY_WRITE。注意%VERIFY_WRITE是%VERIFY_READ的一个超集(如果它是可写的一个块,它也是可以被读出来的)
@addr:所要坚持的用户空间的指针(指向的块开始部分)。
@size:所要坚持的块的大小。

检查一个用户空间的指针所指向的存储块是否有效,就是检查用户传入给驱动的设备指针是否有效

建议看一下 linux设备驱动开发 里面有介绍