新闻详情

新闻详情

首页 / 资讯中心 / 详情

V4L2驱动框架中几个重要的API函数

发布时间:2026/9/30 11:06:31来源:尧图网络
V4L2驱动框架中几个重要的API函数
1. 以 sensor 为例在 sensor 的probe()函数中注册流程为ov5645_probe()│ ▼devm_kzalloc()// 分配ov5645结构体内存│ ▼ov5645_parse()// 通过devm_gpiod_get、devm_pinctrl_get、devm_clk_get_optional等 api 在 dts 中获取 gpio、clock、pinctrl等信息│ ▼v4l2_ctrl_handler_init()// 初始化菜单后面通过v4l2_ctrl_new_std设置饱和度、白平衡等菜单│ ▼v4l2_i2c_subdev_init()// 初始化sudev绑定core、video、pad操作函数集│ ▼media_entity_pads_init()// 把pad数组挂到sensor的entity上并初始化每个pad所属的entity和索引│ ▼ov5645_power_on()// 开启MCLK设置pwdn、reset、power给sensor上电│ ▼ov5645_read_reg()// 上电之后一般先检测能否读到chip id│ ▼v4l2_async_register_subdev()// 把自己加入到全局subdev_list中v4l2_i2c_subdev_init(sd, client, ov5645_subdev_ops)把 subdev 和 i2c 的 client 关联起来media_entity_pads_init(sd-entity, OV5645_SD_PAD_MAX_NUM, ov5645-pad)告诉entity有哪些padv4l2_async_register_subdev(sd)非常重要的函数把subdev-async_list插入到 全局subdev_list中在我的博客异步注册中有详细讲解2. 以 DMA 为例csi_dma_probe()│ ▼devm_kzalloc()│ ▼dma_set_mask_and_coherent()// 设置 dma_alloc_coherent() 所返回地址的可用范围│ ▼v4l2_device_register()// 注册 v4l2_device│ ▼media_device_init()// 初始化 Media Graph 的链表│ ▼media_device_register()// 注册media_device│ ▼media_entity_pads_init()// 告诉entity有哪些pad│ ▼video_register_device()// 注册video_device│ ▼v4l2_async_nf_init()// 初始化notifier将notifier与v4l2_device关联│ ▼v4l2_async_nf_parse_fwnode_endpoints()// 通过设备树的endpoint将上游的fwnode加入waiting_list中│ ▼v4l2_async_nf_register()// 注册notifierdma_set_mask_and_coherent(dev, DMA_BIT_MASK(64))告诉DMA 子系统DMA 设备能使用 64 位 DMA 地址设置dma_alloc_coherent()所返回地址的可用范围v4l2_device_register(dev, csi_dma-v4l2_dev)注册v4l2_device初始化subdev管理链表看似只初始化了一个subdevs链表实际上在后面注册notifier的时候会检查有没有这个v4l2_device没有的话不会注册 subdevv4l2_device相当于根没有根这个框架就无法运作。media_device_init(csi_dma-media_dev)这个函数很简单初始化 Media Graph 的链表(entity、pad、link)等media_device_register(csi_dma-media_dev)注册media_device创建 dev/meidaX 节点用户可以查询有哪些entity/pad/link以及整条 Media Graph 拓扑;为后续注册video_device时其内部会调用media_device_register_entity把vdev-entity加入到mdev-entities中;在异步匹配后会调用v4l2_device_register_subdev注册subdev在该函数内容同样调用media_device_register_entity把每个sd-entity和pad注册到v4l2_dev-mdev;在bound函数中会调用media_create_pad_link把link也加入Media Graphvideo_register_device(vdev, VFL_TYPE_VIDEO, dma_cap-id)注册video_device创建dev/videoX节点把entity和pad加入Media Graphvideo_register_device()└──video_register_media_controller()// 注册entity└──media_device_register_entity()// 把vdev-entity加入到mdev-entities中v4l2_async_nf_init(ntf, csi_dma-v4l2_dev)v4l2_async_nf_parse_fwnode_endpoints(csi_dma-dev, ntf, sizeof(v4l2_async_subdev), NULL)遍历 dts 中 DMA 的 endpoint沿remote-endpoint找到上游设备把该设备的 fwnode 匹配条目加入 notifier 的waiting_list。v4l2_async_nf_register(ntf)触发bound()、complete()、v4l2_device_register_subdev()等在异步注册流程中有详解。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

前端地图覆盖物核心:Polyline与Polygon从绘制到性能优化全解析 2026/9/30 11:44:55

前端地图覆盖物核心:Polyline与Polygon从绘制到性能优化全解析

做地图可视化这几年,我越发觉得覆盖物(Overlay)才是前端地图的灵魂。底图瓦片再漂亮,它也只是个背景板,真正让地图产生业务价值的,是覆盖在上面的那些点、线、面——尤其是折线(Polyline&#x…

阅读更多 →
一个人开公司?AI Agent与工具链如何撑起一人公司 2026/9/30 11:44:49

一个人开公司?AI Agent与工具链如何撑起一人公司

一个人开公司,这事放在五年前,我会觉得是个伪命题。技术要人开发、设计要人作图、文案要人写、客户要人聊,一个人最多撑起一个“工作室”,想以完整的公司形态运作,基本没戏。但今年我自己的实践推翻了这个认知——当AI…

阅读更多 →
从二进制到系统故障:计算机底层原理与实战排查 2026/9/30 11:44:41

从二进制到系统故障:计算机底层原理与实战排查

1. 二进制究竟是什么——为什么计算机只认0和11.1 开与关的终极抽象二进制这个词,几乎所有接触过计算机的人都不陌生,但真正把它想透的人并不多。我见过不少学编程的朋友,写代码写得挺顺,可一旦被问到“为什么计算机用二进制而不用…

阅读更多 →
用阿里云ESA免费隐藏NAS端口,实现域名直连不加端口访问 2026/9/30 11:44:35

用阿里云ESA免费隐藏NAS端口,实现域名直连不加端口访问

你有没有遇到过这种尴尬:家里的NAS明明做了DDNS,出门在外想登录群晖,却还得在域名后面手动敲一个 :5000 或者 :5001 才能打开登录页。次数多了以后,你会发现这已经不只是“有点麻烦”的问题了,而是每次想远程看一眼…

阅读更多 →
城乡居民医疗信息管理系统:SpringBoot+Vue3+MyBatis实战解析 2026/9/30 11:44:28

城乡居民医疗信息管理系统:SpringBoot+Vue3+MyBatis实战解析

拿到这套城乡居民基本医疗信息管理系统的源码时,我第一反应是先看它的分层结构和依赖配置,毕竟SpringBootVue3MyBatis这个组合这几年非常常见,但真正能落地、能用于实际乡镇场景的源码并不算多。这套系统属于典型的前后端分离架构&#xff0c…

阅读更多 →
Ubuntu 22.04下Nginx与PHP-FPM高并发优化实战指南 2026/9/30 11:44:21

Ubuntu 22.04下Nginx与PHP-FPM高并发优化实战指南

手头管着几个WordPress站点的朋友应该都有这种经历:服务器配置看着并不差,CPU内存也不低,但只要流量一到,数据库CPU飙到100%,PHP-FPM直接打满,Nginx疯狂报502,页面打开转圈十几秒。这套组合拳下…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉