V4L2源代码之旅二:V4L2 sub-device userspace API

本文详细介绍了V4L2子设备如何通过创建设备节点实现用户空间的直接控制,包括设置必要标志、注册过程及支持的API操作等。此外还探讨了事件处理机制及其相关文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.cnblogs.com/ronnydm/p/5779584.html


 除了通过v4l2_subdev_ops结构体暴露kernel API,V4L2 sub-devices也可以被用户空间应用直接控制。

  v4l-subdevX的设备节点可以在/dev下被创建来直接访问sub-devices。如果一个sub-device支持用户空间直接配置,必须在注册前设置V4L2_SUBDEV_FL_HAS_DEVNODE标志。注册sub-devices之后,v4l2_device驱动会为所有标记了V4L2_SUBDEV_FL_HAS_DEVNODE标志的sub-devices创建设备节点,通过调v4l2_device_register_subdev_nodes().这些设备节点在sub-devices注销后会自动删除。

复制代码
/* The device node handles a subset of the V4L2 API. */
VIDIOC_QUERYCTRL
VIDIOC_QUERYMENU
VIDIOC_G_CTRL
VIDIOC_S_CTRL
VIDIOC_G_EXT_CTRLS
VIDIOC_S_EXT_CTRLS
VIDIOC_TRY_EXT_CTRLS
复制代码
/* 由sub-device产生的事件 */
VIDIOC_DQEVENT VIDIOC_SUBSCRIBE_EVENT VIDIOC_UNSUBSCRIBE_EVENT

  sub-device驱动如果想要使用这些事件,需要设置V4L2_SUBDEV_USES_EVENTS标志,并且初始化v4l2_subdev::nevents[envent queue depth]。注册过的事件可以被queue操作,在v4l2_subdev::devnode设备节点上。

  为了更好的支持事件,poll()文件操作也被实现。

私有ioctls:

  所有以上没提到的ioctls通过core::ioctl操作直接传递给sub-device驱动。



V27960021@dg03podv27960021kj4p:~/存储/moscow$ python storage.py dual 测试机 对比机 output_diff.xlsx 运行双机对比模式... 设备1: 测试机, 设备2: 对比机 开始解析: 测试机/18_lpdump.txt 文件内容预览: Slot 0: Metadata version: 10.2 Metadata size: 2640 bytes Metadata max size: 65536 bytes Metadata slot count: 3 Header flags: virtual_ab_device Partition table: ------------------------ Name: system_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 1527575 linear super 2048 ------------------------ Name: system_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: system_ext_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 2482807 linear super 1529856 ------------------------ Name: system_ext_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: vendor_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 715543 linear super 4014080 ------------------------ Name: vendor_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ----------------------... 错误: 未找到分区信息,请检查文件格式 开始解析: 对比机/18_lpdump.txt 文件内容预览: Slot 0: Metadata version: 10.2 Metadata size: 2640 bytes Metadata max size: 65536 bytes Metadata slot count: 3 Header flags: virtual_ab_device Partition table: ------------------------ Name: system_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 1540119 linear super 2048 ------------------------ Name: system_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: system_ext_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 2511655 linear super 1544192 ------------------------ Name: system_ext_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: vendor_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 714599 linear super 4057088 ------------------------ Name: vendor_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ----------------------... 错误: 未找到分区信息,请检查文件格式 扫描目录: 测试机 扫描目录: 对比机 创建总览Sheet页 无法获取 system 分区大小 无法获取 vendor 分区大小 无法获取 product 分区大小 无法获取 odm 分区大小 无法获取 my_product 分区大小 无法获取 my_engineering 分区大小 无法获取 my_stock 分区大小 无法获取 my_heytap 分区大小 无法获取 my_company 分区大小 无法获取 my_carrier 分区大小 无法获取 my_region 分区大小 无法获取 my_preload 分区大小 无法获取 data 分区大小 无法获取 my_bigball 分区大小 无法获取 my_manifest 分区大小 无法获取 cache 分区大小 对比报告已成功生成: output_diff.xlsx 对比报告已成功生成: output_diff.xlsx V27960021@dg03podv27960021kj4p:~/存储/moscow$ python storage.py dual 测试机 对比机 output_diff.xlsx 以下是18_lpdump.txt的内容Slot 0: Metadata version: 10.2 Metadata size: 2640 bytes Metadata max size: 65536 bytes Metadata slot count: 3 Header flags: virtual_ab_device Partition table: ------------------------ Name: system_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 1527575 linear super 2048 ------------------------ Name: system_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: system_ext_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 2482807 linear super 1529856 ------------------------ Name: system_ext_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: vendor_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 715543 linear super 4014080 ------------------------ Name: vendor_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: product_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 16159 linear super 4730880 ------------------------ Name: product_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_product_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 4165551 linear super 4747264 ------------------------ Name: my_product_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: odm_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 2075367 linear super 8912896 ------------------------ Name: odm_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_engineering_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 655 linear super 10989568 ------------------------ Name: my_engineering_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: vendor_dlkm_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 164735 linear super 10991616 ------------------------ Name: vendor_dlkm_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: system_dlkm_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 839 linear super 11157504 ------------------------ Name: system_dlkm_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_stock_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 4617279 linear super 11159552 ------------------------ Name: my_stock_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_heytap_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 655 linear super 15777792 ------------------------ Name: my_heytap_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_carrier_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 655 linear super 15779840 ------------------------ Name: my_carrier_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_region_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 168575 linear super 15781888 ------------------------ Name: my_region_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_company_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 655 linear super 15951872 ------------------------ Name: my_company_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_preload_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 3191663 linear super 15953920 ------------------------ Name: my_preload_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_bigball_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 655 linear super 19146752 ------------------------ Name: my_bigball_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Name: my_manifest_a Group: qti_dynamic_partitions_a Attributes: readonly Extents: 0 .. 911 linear super 19148800 ------------------------ Name: my_manifest_b Group: qti_dynamic_partitions_b Attributes: readonly Extents: ------------------------ Super partition layout: ------------------------ super: 2048 .. 1529624: system_a (1527576 sectors) super: 1529856 .. 4012664: system_ext_a (2482808 sectors) super: 4014080 .. 4729624: vendor_a (715544 sectors) super: 4730880 .. 4747040: product_a (16160 sectors) super: 4747264 .. 8912816: my_product_a (4165552 sectors) super: 8912896 .. 10988264: odm_a (2075368 sectors) super: 10989568 .. 10990224: my_engineering_a (656 sectors) super: 10991616 .. 11156352: vendor_dlkm_a (164736 sectors) super: 11157504 .. 11158344: system_dlkm_a (840 sectors) super: 11159552 .. 15776832: my_stock_a (4617280 sectors) super: 15777792 .. 15778448: my_heytap_a (656 sectors) super: 15779840 .. 15780496: my_carrier_a (656 sectors) super: 15781888 .. 15950464: my_region_a (168576 sectors) super: 15951872 .. 15952528: my_company_a (656 sectors) super: 15953920 .. 19145584: my_preload_a (3191664 sectors) super: 19146752 .. 19147408: my_bigball_a (656 sectors) super: 19148800 .. 19149712: my_manifest_a (912 sectors) ------------------------ Block device table: ------------------------ Partition name: super First sector: 2048 Size: 12348030976 bytes Flags: none ------------------------ Group table: ------------------------ Name: default Maximum size: 0 bytes Flags: none ------------------------ Name: qti_dynamic_partitions_a Maximum size: 12343836672 bytes Flags: none ------------------------ Name: qti_dynamic_partitions_b Maximum size: 12343836672 bytes Flags: none ------------------------ --------------- Snapshot state: --------------- Update state: none Using snapuserd: 0 Using userspace snapshots: 0 Using io_uring: 0 Using o_direct: 0 Using XOR compression: 1 Current slot: _a Boot indicator: booting from unknown slot Rollback indicator: No such file or directory Forward merge indicator: No such file or directory Source build fingerprint:
最新发布
08-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值