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

      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。这四步即可完成整个隐藏操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值