资源描述:
《liunx驱动数据结构》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、一、总体介绍linux驱动的内核数据结构:file_operationsfileinode;inode:用于表示文件file:用于表示打开的文件描述,因为单个文件可能有多个打开文件的描述符,就有可能有多个file结构,但是都是指向一个inode结构;file_operations:I/O设备存収的特定入口结构体,通常设备驱动结构由file_operation结构体想系统说明二、详细介绍(本结构体都含有_USer;这足一种规范,表示用户空间的指针>(1)file_operations:/linux-2.6.22/linux/fs.hstructfile_oper
2、ations{structmodule*owner;//不是一个操作,一般初始化为宏(THIS_MODULE),防止在操作屮被卸载,宏在linux/module.h中定义。loff_t(*llseek)(structfile*filp,loff_tpjntorig);flip:目标文件结构体指针;不能为NULL:文件定位偏移量(保证64位宽):文件定位起始地址:用于改变文件当前读/写位置porig作用ssize_t(*read)(structfile*filp,char_user*buffer,size,-loff_t*p}//同步操作filp:目标文件结构体
3、指针;buffer:存放信息的缓冲区,即用户空间size:要读取的信息长度P:读位置相对于文件头的开头偏移,在读取后一般会自动移动,移动的值为要读取的长度值ssize_t(*aio_read)(structkiocb*,char_user*buffer,size—tsize,loft_tpb//异步操作kiocb:每一个I/O请求对应一个kiocb结构体P:异步操作不耑要修改文件的位置,所以非指针//初始化异步读可能函数返回前不结束读取操作,如果这个方法为NULL,则所有操作右同步代替进行ssize_t(*write)(structfile*filp,char
4、_user•*buffer,sizei_tsize,loff_t*ppos);//同步写filp:文件结构指针buffer:写入信息缓冲size:写入长度ppos:当前偏移值,通常用来判断文件是否越界ssize_t(*aio_write)(structkiocb*,const__char_user*1buffer,size」size,loff_tppos);//异步写参数股理同aio_read()函数;int(*readdir)(structfile*filp,void'filldir_t);对于设备文件此方法应为空,它用来读取目录,仅对文件系统有效unsig
5、nedint(*poll)(structflip*,structpoll_table_struct*);设备轮询函数,第一个参数是file指针,第二个参数是轮询表指针用于获取设备资源状态,POLLIN,POLLOUT,POLLPRI,POLLERR,POUNVAL等宏的位“或”结果int(*ioctl)(structinode*inode,structfile*filp,unsignedintcmd,unsignedarg);inode和filp:指针对应应用程序传递文件描述符fs的值,和传递给open方法的相同参数cmd:从用户那里传下来,或者参数arg以一
6、个unsignedlong形式传递,arg:可选参数,如果调用程序部传递它,那被驱动程序操作的arg值无意义作用解决特殊命令的方法int(*mmap)(structfile*,structvm_area_struct*);用来请求将设备内存映射到进程的地址空间int(*open)(structinode*inode,structfile*filp);inode:文件结点,无论打开多少个文件,都只是对应一个结点filo:只要打开一个文件,就对应着一个file结构。如果此方法为NULL,设备打幵一直成功,但是驱动程序得不到通知int(*release)(struc
7、tinode'structfile*);与openG方法对应,当最后一个打开的进程执行close()系统调用吋,内核将调用驱动程序releaseO函数int(*flush)(structfile*);此方法在进程关闭它的设备文件描述符的拷贝时调用,以等待设备完成操作,此方法在驱动屮很少用,SCSI磁带驱动使用,以确保在关闭前把所有的数据写到磁带上int(*synch)(structfile'structdentry*,intdatasync);刷新待处理的数据,允许进程吧所有脏缓存刷新到磁盘int(*aio_fsync)(structkiocb*,int);异
8、步刷新待处理的数裾int(*lock)