当前位置: 技术问答>linux和unix
请教下,应用程序使用通过驱动程序使用设备的过程
来源: 互联网 发布时间:2016-08-31
本文导语: 我们在编写驱动程序的时候,我们定义了很多的方法:open、write等,并通过file_operations结构跟设备建立联系,之间还用到了file结构、inode结构,但是具体的流程不是很清楚,希望高人解析一下。 编写驱动程序的时候...
我们在编写驱动程序的时候,我们定义了很多的方法:open、write等,并通过file_operations结构跟设备建立联系,之间还用到了file结构、inode结构,但是具体的流程不是很清楚,希望高人解析一下。
编写驱动程序的时候,定义的方法:open、write等方法是怎么被用户空间的应用程序调用的咧?
最好能给个例子:像简单设备鼠标的使用过程
谢谢
编写驱动程序的时候,定义的方法:open、write等方法是怎么被用户空间的应用程序调用的咧?
最好能给个例子:像简单设备鼠标的使用过程
谢谢
|
在用户态,进程打开一个文件,就获得了一个fd,一个数值,它对应内核进程结构体task_struct的一个字段files_struct中的一个file数组fd_array的index。
所有对这个fd的操作都传递到这个file上。这里的file是一个运行期概念,在运行期间创建和删除。
inode可以理解为一个磁盘文件的关键信息。
比如我们在用户态open一个文件,那么会查找当前进程的fd_array的空闲file,之后根据文件名称和路径,找到对应的文件,获取这个文件的inode,然后将这个inode和file关联,之后会将这个空闲file索引传递到用户态。
而file_operation,表示如何操作这个file。比如read系统调用,需要在内核态通过file_operation的read钩子指定如何从inode对应的磁盘文件上读取。
--------
这些操作都是linux的VFS完成的。
所有对这个fd的操作都传递到这个file上。这里的file是一个运行期概念,在运行期间创建和删除。
inode可以理解为一个磁盘文件的关键信息。
比如我们在用户态open一个文件,那么会查找当前进程的fd_array的空闲file,之后根据文件名称和路径,找到对应的文件,获取这个文件的inode,然后将这个inode和file关联,之后会将这个空闲file索引传递到用户态。
而file_operation,表示如何操作这个file。比如read系统调用,需要在内核态通过file_operation的read钩子指定如何从inode对应的磁盘文件上读取。
--------
这些操作都是linux的VFS完成的。
|
open系统调用->内核态->file_operation->open对应回调~~~~
|
用户程序调用 open打开某个设备 这个会调用open的系统调用 旧的接口是sys_open 现在用宏了,具体怎么拼记不住。
然后sys_open调用一系列的vfs层代码(inode file这些都在这里用到) 最后会通过函数指针调用驱动提供的open 2楼说的比较清楚
然后sys_open调用一系列的vfs层代码(inode file这些都在这里用到) 最后会通过函数指针调用驱动提供的open 2楼说的比较清楚