zoukankan      html  css  js  c++  java
  • IMX6Q camera驱动分析 (4)

    本文结合项目实际需求做一个关于设备驱动的分析,如何新加一个Camera设备

    这个项目使用了一个并口摄像头信号到MCU。具体原理框图如下

     Camera数据流向是 sensor -->913串行器----->914解串器------>并口数据--->imx6q

    在设备树上的配置如下:

    &i2c2{
        #address-cells = <1>;
            #size-cells = <0>;
            status = "okay"; 
        ds914desilizer:ds914desilizer@0x60{
            compatible = "ds914dseilizer,TI";
            ipu=<1>;
            csi=<1>;
            reg=<0x60>;
            pinctrl-names = "default";
            pinctrl-0 = <&pinctl_ipu_ds914>;
            
            width = <1280>;
            height = <720>;
            denominator  = <25>;
            numerator  =<1>;
    
        };    
    };

    因为是一个i2c设备,于是挂载在i2c这个设备树下,并且使能这个i2c,在里面使能复用并口数据IO,设置分辨率等。

    那么看设备驱动做了什么。

    内核有一个OV5640的例子,于是对其改改就成我们自己的了。

     

     国际惯例,是一个i2c驱动,注册一个i2c_driver .

     

    设备驱动probe做的主要事情就是填充一个sensor_data 结构体并将其放入 v4l2_int_device 的 私有数据里。这个私有数据以后被master 所用 ,也就是mxc_v4l2_capture.c的 cam_data 

    这个v4l2_int_device 是一个从类型设备(代表具体的sensor)

    然后 调用注册函数 将其注册,就是放入我第二篇说的那个链表中,用来与具体的master匹配,匹配成功后调用attach函数。

    可见,写一个设备驱动的话,最主要的就是生成一个v4l2_int_device 和 sensor_data 。

    还有

     v4l2_int_ioctl_desc 这个 数组里面的函数,在一定情况时会被mxc_v4l2_capture.c所调用。

    这么做的原因是为了更好的实现设备与驱动的分离,驱动只要调接口,随你设备是如何做的。

     具体代码不放出来了,不方便透露。

  • 相关阅读:
    kubernetes集群之资源配额(Resource Quotas)
    kubernetes之subpath的使用
    kubernetes之RBAC介绍
    python-日志模块
    pip安装模块提示Command "python setup.py egg_info" failed with error code 1
    TCP/IP协议讲解
    魔镜—58可视化数据智能平台架构与实践
    支付宝开源非侵入式 Android 自动化测试工具 Soloπ
    诗人“九歌”开源
    神奇的Kivy,让Python快速开发移动app
  • 原文地址:https://www.cnblogs.com/coversky/p/10886168.html
Copyright © 2011-2022 走看看