ioctl 到其定义的映射

ioctl 到其定义的映射

linux驱动模块中ioctl的原型是

int ioctl(struct inode *i, struct file *f, unsigned int cmd, unsigned long arg);

或者

long ioctl(struct file *f, unsigned int cmd, unsigned long arg);

但在 sys/ioctl.h 里面是

int ioctl(int fd, int request, void *argp);

第一个参数类型不同,ioctl调用程序和驱动程序之间是否有任何模块转换该参数(从文件描述符到文件结构指针)?

这个映射是如何工作的?(从文件描述符到文件)。

答案1

${kernel_root}/fs/ioctl.c(4.13)中有:

SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)

SYSCALL_DEFINE3是一个宏,它接受这些参数并将其扩展为系统调用的适当签名。该函数是ioctl来自用户空间的系统调用的逻辑入口点。该函数依次查找与struct fd给定文件描述符对应的 并调用do_vfs_ioctl传递struct filestruct fd.该调用将在到达驱动程序之前穿过 VFS 层,但这应该为您提供了一个开始查找的位置。

相关内容