2)如果是64位的用户程序运行在64位的kernel上,调用的是unlocked_ioctl,如果是32位的用户程序运行在32位的kernel上,调用的也是unlocked_ioctl。 3. struct file_operations结构体 structfile_operations{structmodule*owner;loff_t(*llseek)(structfile*,loff_t,int);ssize_t(*read)(structfile*,char__user*,size...
read()和write()如果返回0,则暗示end-of-file(EOF)。 unlocked_ioctl()提供设备相关控制命令的实现(既不是读操作,也不是写操作),当调用成功时,返回给调用程序一个非负值。它与用户空间应用程序调用的int fcntl(int fd,int cmd,.../*arg*/)和int ioctl(int d,int request,...)对应。 mmap()函数将设备...
(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); v2.6.36 后使用unlocked_ioctl替代ioctl,原先的ioctl使用了内核的大锁。由于失去了大内核锁的保护,所以必须在unlocked_ioctl方法中自行实现锁机制,以保证不会在操作设备的时候(特别在SMP系统中)产生竞态。(也就实现了用小锁替换...
如果一个驱动的 poll 方法为 NULL,设备假定为不阻塞地可读可写。 10、long (*unlocked_ioctl) kernel-2.6 以前,使用的是 ioctl;kernel-2.6 以后,使用 unlocked_ioctl。 11、long (*compat_ioctl) 兼容性的 ioctl,为了让 32-bit 的 process 可以在 64-bit 上的 system 来执行 ioctl() 12、int (*mmap) ...
内核中file_operations源码 linux-2.6.22.6 /include/linux/fs.h 具体内容在最后 //code from : linux2.6.22.6 /* * NOTE: * read, write, poll, fsync, readv, writev, unlocked_ioctl and compat_ioctl * can be…
1/*2* NOTE:3* read, write, poll, fsync, readv, writev, unlocked_ioctl and compat_ioctl4* can be called without the big kernel lock held in all filesystems.5*/6structfile_operations {7struct module *owner;8loff_t (*llseek) (structfile *, loff_t,int);9ssize_t (*read) (struct...
kernel-2.6 以前,使用的是 ioctl;kernel-2.6 以后,使用 unlocked_ioctl。 11、long (*compat_ioctl) 兼容性的 ioctl,为了让 32-bit 的 process 可以在 64-bit 上的 system 来执行 ioctl() 12、int (*mmap) 用来请求将设备内存映射到进程的地址空间。一般涉及到图像方面,会使用此函数,比如 framebuffer。如果...
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); // 提供一种执行设备特殊命令的方法。不设置入口点,返回-ENOTTY long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); // 不使用BLK的文件系统,将使用此种函数指针代替ioctl ...
(*unlocked_ioctl)(structfile*,unsignedint,unsignedlong);long(*compat_ioctl)(structfile*,unsignedint,unsignedlong);int(*mmap)(structfile*,structvm_area_struct*);unsignedlongmmap_supported_flags;int(*open)(structinode*,structfile*);int(*flush)(structfile*,fl_owner_t id);int(*release)(struct...
对于原来的ioctl,其实可以叫做locked ioctl。这个其实是相对于他的替代方法来讲的。我们来看看2.6.35以前在struct file_operations中有关ioctl的成员: /* *NOTE: *read,write,poll,fsync,readv,writev,unlocked_ioctlandcompat_ioctl *can be called without the big kernel lock heldinall filesystems. ...