关于字符设备驱动的内部实现的自我理解

字符设备驱动的内部实现有两种情况:

1.应用层调用open函数的内部实现:.

        open函数的第一个参数是要打开的文件的路径,根据这个路径 虚拟文件系统层VFS 可以找到这个文件在文件系统中唯一的标识,也就是inode号,通过inode号作为索引可以找到储存在内核中的struct inode结构体,struct inode结构体内部储存着 struct cdev结构体 和 储存该文件设备号的变量dev,因为设备文件想联系设备驱动,就要在inode结构体中保存该驱动的设备号

        通过解析struct cdev结构体可知:结构体内部也有储存设备号的变量dev和操作方法结构体指针,通过操作方法结构体指针 VFS 就可以帮助我们回调对应的 mycdev_open 函数

2.应用层调用write/read等函数的内部实现:

        write/read 函数没有指定路径的参数,换成了使用从open函数返回值得到的文件描述符来进行回调对应的操作方法

        首先,当一个进程运行在操作系统中,那么就一定会在内核中的task_struct结构体空间中封存放进程的相关信息, 在task_struct结构体中, 有着存放着打开文件相关的结构体成员struct files_struct ,files_struct结构体成员struct file __rcu * fd_array[fd] 的下标 就是文件描述符的本质,这个结构体指针指向的结构体类型struct file 里就有操作方法结构体,通过文件描述符就可以确认是数组的哪个下标成员,VFS 虚拟文件系统层 来帮助我们回调对应的操作方法

关于字符设备驱动的内部实现的自我理解_第1张图片

你可能感兴趣的:(笔记,数学建模)