ioctl写的文章感觉也挺多的,我这里是总结一下:
参考文档:http://lexandros.blog.163.com/blog/static/18556658820127281636559/
这个写的挺好的,可以作为参考。
ioctl的作用是用户空间和内核空间的通讯方式之一。我在应用层调用ioctl的话,底层硬件驱动中也需要做一个相应的ioctl函数,二者对应起来,才能实现用户层的调用。
应用层ioctl的函数原型是:
intioctl(int fd, unsigned longcmd,...);
在linux下,所有的东西都是文件,所以对设备什么的都按照文件来进行操作,利用open、read、write、close等函数来进行操作,fd就是open等函数的文件描述符,是一个int类型。
cmd为命令参数。
驱动层的ioctl函数的原型,在file_operations结构体中有相应描述:
int(*ioctl)(struct inode *inode, struct file *filp, unsigned int cmd, unsignedlong arg);
inode为文件打开的节点,filp为传递的文件指针,cmd为命令参数,arg为传递的其他参数。
我们这里主要管第三个和第四个参数。
关于传递的cmd命令,可以自己定义在相应的头文件中。
应用层的ioctl函数,一般也就是三个参数。在V4L2中,命令就定义在videodev2.h中。
反正就是操作io的,具体实现功能还是根据命令来。
菜鸟欢迎拍砖