v4l2框架函数调用关系

复制代码

所有的设备节点和子设备节点都是通过__video_register_device()注册的

1.对于video设备节点:

用户空间ioctl(VIDIOC_S_FMT)
---> v4l2_fops.unlocked_ioctl [v4l2_ioctl] 字符设备函数集合,此函数主要是使用&vin->lock上锁,然后调用rvin_mc_fops.unlocked_ioctl,返回后释放锁
  ---> rvin_mc_fops.unlocked_ioctl 进行用户空间传下来的参数检查,然后调用下一级函数
    ---> __video_do_ioctl() 进行类型和合法性检查,然后调用下一级
      ---> v4l2_ioctls.v4l_s_ctrl() 所以直接从此位置开始看就可以
        --->rvin_mc_ioctl_ops.vidioc_s_ext_ctrls



2.对于v4l-subdev设备节点:
用户空间ioctl(VIDIOC_S_FMT)
--->v4l2_fops.unlocked_ioctl [v4l2_ioctl] 字符设备函数集合
  --->v4l2_subdev_fops.unlocked_ioctl [subdev_ioctl]

 
复制代码

 

2. i2c设备和驱动匹配过程

复制代码
 [<ffff00000086e0b8>] cyttsp6_i2c_probe+0x70/0x108 [cyttsp6_i2c]
 [<ffff00000851180c>] i2c_device_probe+0x2a4/0x2c8
 [<ffff00000848dd0c>] driver_probe_device+0x22c/0x2d8
 [<ffff00000848de74>] __driver_attach+0xbc/0xc0
 [<ffff00000848be4c>] bus_for_each_dev+0x4c/0x98
 [<ffff00000848d608>] driver_attach+0x20/0x28
 [<ffff00000848d158>] bus_add_driver+0x1b8/0x228
 [<ffff00000848e810>] driver_register+0x60/0xf8
 [<ffff000008511074>] i2c_register_driver+0x44/0xa0
复制代码

 

 

 

 

2018-07-01 23:35:52

posted on   Hello-World3  阅读(660)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2017-07-01 select poll epoll

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示