驱动day4大概讲解字符设备驱动内部实现原理

驱动day4大概讲解字符设备驱动内部实现原理_第1张图片

      open函数回调到驱动中open操作方法的路线:open()->sys_open()->struct inode结构体->struct cdev结构体->struct file_operations结构体->mycdev_open

      首先open函数的调用第一个参数即为绝对路径下的文件名,并可以通过ls -i查看当前文件的唯一inode号,inode号是文件存在于文件系统中的唯一标识,相当于人们的身份证号,同时也是要索引当前文件的inode号结构体的索引号。可以通过这个索引到struct inode文件信息结构体。只要文件存在于文件系统中,那么在内核中就一定会存在一个struct inode结构体相对应,这个结构体内部存储了文件的相关信息。如文件的权限(i_mode)、文件的用户id(i_uid)、组ID(i_gid)、设备号(i_rdev)、块设备(i_bdev)、字符设备(i_cdev)等等信息。其中的设备号是驱动存在内核的标识,也是设备驱动和设备文件关联的纽带必不可少。而字符设备则会调用到struct cdev字符设备驱动对象结构体,其中包含了THIS_MODULE、操作方法结构体(*ops)、构成的链表(list)、以及设备的数量(count)等。而想要注册字符设备驱动,需要完成四步1——分配一个字符设备驱动对象空间。2——字符设备驱动成员的初始化。3——将字符设备驱动对象注册进内核。4——注销字符设备驱动对象。即可注册字符设备驱动,同时struct cdev结构体中的信息*ops可以通过这个调用操作方法结构体从而调用到操作方法mycdev_open()等方法来完成相应的操作。其中这些操作都是直接靠VFS虚拟文件系统层直接实现的,VFS也是通过四步实现操作的1——根据open传递的文件路径找到文件的inode结构体。2——根据inode结构体找到文件对应的驱动的对象指针。3——根据驱动对象指针找到驱动对象中的操作方法结构体指针。4——回调操作方法中的open。这四步即可完成整个隐藏操作。

你可能感兴趣的:(学习)