ioctl的相关理解

来源:互联网 发布:淘宝上药店 编辑:程序博客网 时间:2024/04/25 19:52

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的,具体实现功能还是根据命令来。

 

菜鸟欢迎拍砖

原创粉丝点击