ioctl设备控制解决思路
ioctl设备控制
------解决方案--------------------
宏而已,建议用source insight看Linux kernel source code.
------解决方案--------------------
access_ok:检查一个用户空间的指针是否是有效的。
@type:访问的类型:%VERIFY_READ或者%VERIFY_WRITE。注意%VERIFY_WRITE是%VERIFY_READ的一个超集(如果它是可写的一个块,它也是可以被读出来的)
@addr:所要坚持的用户空间的指针(指向的块开始部分)。
@size:所要坚持的块的大小。
检查一个用户空间的指针所指向的存储块是否有效,就是检查用户传入给驱动的设备指针是否有效
建议看一下 linux设备驱动开发 里面有介绍
- 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设备驱动开发 里面有介绍