1、compat_ioctl:支持64bit的driver必须要实现的ioctl,当有32bit的userspace application call 64bit kernel的IOCTL的时候,这个callback会被调用到。如果没有实现compat_ioctl,那么32位的用户程序在64位的kernel上执行ioctl时会返回错误:Not a typewriter 2、如果是64位的用户程序运行在64位的kernel上,调用的是unlock...
1、compat_ioctl:支持64bit的driver必须要实现的ioctl,当有32bit的userspace application call 64bit kernel的IOCTL的时候,这个callback会被调用到。如果没有实现compat_ioctl,那么32位的用户程序在64位的kernel上执行ioctl时会返回错误:Not a typewriter 2、如果是64位的用户程序运行在64位的kernel上,调用的是unlock...
1、compat_ioctl:支持64bit的driver必须要实现的ioctl,当有32bit的userspace application call 64bit kernel的IOCTL的时候,这个callback会被调用到。如果没有实现compat_ioctl,那么32位的用户程序在64位的kernel上执行ioctl时会返回错误:Not a typewriter 2、如果是64位的用户程序运行在64位的kernel上,调用的是unlock...
1. 历史由来 Linux刚开始只有ioctl,没有unlocked_ioctl和compat_ioctl,这时候还是大内核锁机制(BKL),后来因为大内核锁的各种争议而去掉了ioctl,增加了unlocked_ioctl,顾名思义,unlocked就是无锁,因为unlocked_ioctl没了锁,如果想要并发操作,就要在unlocked_ioctl内部实现锁。再后来,为了让32位用户程序能访问64位内核,...
1、compat_ioctl:支持64bit的driver必须要实现的ioctl,当有32bit的userspace application call 64bit kernel的IOCTL的时候,这个callback会被调用到。如果没有实现compat_ioctl,那么32位的用户程序在64位的kernel上执行ioctl时会返回错误:Not a typewriter 2、如果是64位的用户程序运行在64位的kernel上,调用的是unlock...
ioctl/unlocked_ioctl/compat_ioctl,在kernel2.6.35及之前的版本中structfile_opertation一共有3个ioctl:ioctl,unlocked_ioctl,compat_ioctl,structfile_operations{unsignedint,unsignedlong);
kernel 2.6.35 及之前的版本中struct file_operations 一共有3个ioctl : ioctl,unlocked_ioctl和compat_ioctl 现在只有unlocked_ioctl和compat_ioctl 了 在kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的是 ...
现在只有unlocked_ioctl和compat_ioctl 了 在kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的是unlocked_ioctl 。 这个指针函数变了之后最大的影响是参数中少了inode, 不过这个不是问题,因为用户程序中的ioctl对应的系统调用接口没有变化,所以用户程序不需要改变,一切都交给内核...
所以新加入unlocked_ioctl,这个不加锁的ioctl,另外还有个compat_ioctl,这个接口是为了处理32位程序和64位内核兼容的一个函数接口,和体系结构有关。 回到unlocked_ioctl的实现,由于操作命令字可以有多个,很容易想到,我们可以使用if语句或者switch语句实现对应功能,所以:...
一、ioctl函数的实现 首先说明在2.6.36以后ioctl函数已经不再存在了,而是用unlocked_ioctl和compat_ioctl两个函数实现以前版本的ioctl函数。同时在参数方面也发生了一定程度的改变,去除了原来ioctl中的struct inode参数,同时改变了返回值。 但是驱动设计过程中存在的问题变化并不是很大,同样在应用程序设计中我们还是采用ioc...