liunx驱动数据结构

liunx驱动数据结构

ID:21389741

大小:60.50 KB

页数:3页

时间:2018-10-21

liunx驱动数据结构_第1页
liunx驱动数据结构_第2页
liunx驱动数据结构_第3页
资源描述:

《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)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。