首页 > 系统相关 >linux camera 驱动分析

linux camera 驱动分析

时间:2024-07-03 17:54:11浏览次数:21  
标签:subdev register vind dev camera linux device 驱动 v4l2

v4l2_device 结构体
每个设备实例都通过 v4l2_device (v4l2-device.h)结构体来表示。简单设备可以仅分配这个结构体,但在大多数情况下,都会将这个结构体嵌入到一个更大的结构体中。驱动中,将会通过v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev)注册设备示例。

v4l2_subdev结构体
很多camera驱动需要与子设备通信,控制这些子设备完成各种任务,V4L2为了给驱动提供调用子设备的统一接口,创建了v4l2_subdev结构体。每个 v4l2_subdev 都包含子设备驱动需要实现的函数指针(如果对此设备不适用,可为NULL)。由于子设备可完成许多不同的工作,而在一个庞大的函数指针结构体中通常仅有少数有用的函数实现其功能肯定不合适。所以,函数指针根据其实现的功能被分类,每一类都有自己的函数指针结构体

进行dts信息解析,dts中将配置sensor的硬件信息以及csi pipeline的连续顺序:

1. parse_modules_from_device_tree(vind);

申请gpio硬件资源:

vin_gpio_request(vind);
2. 通过v4l2_device_register()注册v4l2_device:

v4l2_dev = &vind->v4l2_dev;
v4l2_dev->mdev = &vind->media_dev;
strlcpy(v4l2_dev->name, "sunxi-vin", sizeof(v4l2_dev->name));

ret = v4l2_device_register(dev, &vind->v4l2_dev);

3. 通过media_device_register()注册media_device:

ret = media_device_register(&vind->media_dev);

4.获取时钟信息:

ret = vin_md_get_clocks(vind);

5.注册各个media entity设备:

ret = vin_md_register_entities(vind, dev->of_node);

/************************ sensor ***************************/
for (j = 0; j < sensors->detect_num; j++) {
if (sensors->use_sensor_list == 1)
__vin_handle_sensor_info(&sensors->inst[j]);
__vin_verify_sensor_info(&sensors->inst[j]);

/* 通过v4l2_device_register_subdev或v4l2_i2c_new_subdev向系统注册v4l2_subdev */
if (__vin_register_module(vind, module, j)) {
sensors->valid_idx = j;
break;
}
}

/************************ video device ***************************/
/* 通过v4l2_device_register_subdev向系统注册v4l2_subdev */
vin_md_register_core_entity(vind, vind->vinc[i]);

/******************** csi、mipi、isp、vipp *************************/
/* 通过v4l2_device_register_subdev向系统注册v4l2_subdev */
ret = v4l2_device_register_subdev(&vind->v4l2_dev, vind->csi[i].sd);
ret = v4l2_device_register_subdev(&vind->v4l2_dev, vind->mipi[i].sd);
ret = v4l2_device_register_subdev(&vind->v4l2_dev, vind->isp[i].sd);
ret = v4l2_device_register_subdev(&vind->v4l2_dev, vind->scaler[i].sd);


6.建立csi pipeline默认连接:

ret = vin_setup_default_links(vind);
/* 此时csi与isp、isp与vipp建立默认连接,同时根据dts中的配置,初始化好csi pipeline中的subdev */
注册v4l2_subdev节点(/dev/v4l-subdevX):

int v4l2_device_register_subdev_nodes(struct v4l2_device *v4l2_dev)
{
strlcpy(vdev->name, sd->name, sizeof(vdev->name));
vdev->v4l2_dev = v4l2_dev;
vdev->fops = &v4l2_subdev_fops;
vdev->release = v4l2_device_release_subdev_node;
vdev->ctrl_handler = sd->ctrl_handler;
err = __video_register_device(vdev, VFL_TYPE_SUBDEV, -1, 1,
sd->owner);
}

到这里,基本各个设备都已经完成加载注册,硬件与dts都正确的情况,应该存在/dev/videoX节点。但是可能存在疑惑,这个节点到底是什么时候,哪里进行注册的呢,下面介绍。


原文链接:https://blog.csdn.net/weixin_41944449/article/details/133197607

 

标签:subdev,register,vind,dev,camera,linux,device,驱动,v4l2
From: https://www.cnblogs.com/ycjstudy/p/18282291

相关文章

  • rocky linux 使用记录
    Rockylinux也更新到9了,准备试试可以用了不,还是继续用xfce4界面。官方有提供xfce4版的Rockylinux,直接下来装就好:各个版本下载地址。题外话,...摘要Rockylinux也更新到9了,准备试试可以用了不,还是继续用xfce4界面。官方有提供xfce4版的Rockylinux,直接下来装......
  • nohup命令:Linux保持进程运行的利器
    在Linux系统中,nohup命令是一种非常有用的工具,用于在用户退出登录或关闭终端时保持进程的运行。本文将深入讲解nohup命令的作用、使用方法以及相关注意事项,帮助读者充分利用这个强大的命令。nohup命令的作用​nohup​是"nohangup"的缩写,它的主要作用是在后台运行一个命令或进......
  • Windows 11中的WSL(Windows Subsystem for Linux)详细介绍与安装过程
    文章目录Windows11中的WSL(WindowsSubsystemforLinux)详细介绍与安装过程一、WSL简介二、WSL安装过程三、WSL常见应用场景四、常见问题和解决方案五、结论Windows11中的WSL(WindowsSubsystemforLinux)详细介绍与安装过程WindowsSubsystemforLinux(WSL)是Micr......
  • <sa8650>sa8650 qcxserver-之-摄像头传感器VB56G4A驱动开发<1>
    <sa8650>sa8650qcxserver-之-摄像头传感器VB56G4A驱动开发<1>一、前言二、QCX架构三、QCX传感器驱动程序定制开发3.1sensor硬件接口3.2sensor配置文件3.2.1cameraconfig.c3.2.2cameraconfigsa8650_water.c3.2.3新增编译MK3.2.4参数解析3.2.4.1st......
  • 返利App的用户行为分析与数据驱动决策
    返利App的用户行为分析与数据驱动决策大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨返利App中的用户行为分析与数据驱动决策的技术细节和实现策略。在竞争激烈的移动应用市场中,了解用户行......
  • Linux 系统的安全加固
    Linux系统的安全加固 Linux是一套免费使用和自由传播的类Unix操作系统,作为一个开放源代码的操作系统,Linux服务器以其安全、高效和稳定的显著优势而得以广泛应用,但如果不做好权限的合理分配,Linux系统的安全性还是会得不到更好的保障,下面我们将主要使用RHEL7系统,分别从账户安......
  • Linux文件与日志
    目录1.Linux文件系统1.1inode号1.2EXT类型文件恢复1.3xfs类型文件备份和恢复2.日志分析2.1日志类型2.2日志配置文件2.3日志分析的重要性在Linux系统中,文件和日志是管理和维护系统运行所不可或缺的。理解它们的工作原理和如何有效地管理和分析是每个系统管理......
  • linux_centos镜像下载及百度网盘分享链接
    1.Centos镜像国内最全下载地址CentOS官方下载地址:https://www.centos.org/download/Centos国内下载源http://man.linuxde.net/download/CentOShttp://mirrors.btte.net/centoshttp://mirrors.cn99.com/centos (希网)http://mirrors.sohu.com/centos (搜狐)http://mirrors.aliyun.......
  • ChatPPT:AI驱动的智能PPT一键生成与美化工具
    ChatPPT是由必优科技开发的一款AI超级PPT工具,它通过对话式AI创作,为用户提供快速生成和美化PPT的全流程服务。以下是该平台的一些核心功能和特点:核心功能:一键生成PPT:用户只需输入PPT主题,ChatPPT即可快速生成文档。对话式AI创作:涵盖6大模块,超过1400类全流程AI文档服务,使用户能......
  • linux常用命令
    1.查看lllstail-2000fxx 可以限制查看的范围catxx 查询jdk的安装路径:echo$JAVA_HOME 查看文件安装路径:whereismysql 查询运行文件所在路径:whichmysql 查看日志:如果日志是在tomcat下的logscd/xxx/xxx/tomcat/logs/tail-2000fxxx.log 2.修改文......