添加camera驱动

个人学习总结记录,有错误望指正

概述:

camera驱动主要是配置两个部分:kernel层和hal层

一个进行驱动加载,一个管理效果显示

一、device目录

配置整个工程的文件,在这里需要对hal层和kernel层都进行一个配置

文件路径:Z:\work\mtk6789_T\alps\s0_vnd\device\mediateksample\t2203gmc_v1_gb_dh_h3_qd_t\ProjectConfig.mk

在这里,hal层和kernel层都有一个camera list以及主副摄像头需要添加,在这里进行配置

...
/*hal层
camera列表,所有的camera都要在这里加进去
*/
    CUSTOM_HAL_IMGSENSOR = ov13850_mipi_raw gc5035_mipi_raw gc2385_mipi_raw imx351_mipi_raw gc05a2_mipi_raw
/*
camera的位置配置:
    CUSTOM_HAL_MAIN2_IMGSENSOR = no    后副摄
    CUSTOM_HAL_MAIN_IMGSENSOR = no     后摄
    CUSTOM_HAL_SUB_IMGSENSOR = no      前摄
*/
...
/*
kernel层camera列表,将摄像头添加进去
*/
    CUSTOM_KERNEL_IMGSENSOR = ov13850_mipi_raw gc5035_mipi_raw gc2385_mipi_raw imx351_mipi_raw gc05a2_mipi_raw
/*
camera的位置配置:
    CUSTOM_KERNEL_MAIN2_IMGSENSOR = no    后副摄
    CUSTOM_KERNEL_MAIN_IMGSENSOR = no     后摄
    CUSTOM_KERNEL_SUB_IMGSENSOR = no      前摄
*/
...

而在kernel和hal层,都有一个数组文件(imgsensor_sensor_list.c)需要进行配置

二、KERNEL层目录

camera驱动添加位置:

Z:\work\mtk6789_T\alps\s0_vnd\kernel-5.10\drivers\misc\mediatek\imgsensor\src\common

基本上所有的camera驱动都图中在这两个目录下

kernel层的数组文件位置如下:

Z:\work\mtk6789_T\alps\s0_vnd\kernel-5.10\drivers\misc\mediatek\imgsensor\src\common\v1\imgsensor_sensor_list.c

//我以GC5035为例熟悉一下,结构基本如下:

...
#if defined(GC5035_MIPI_RAW)
//从硬件上区分camera,有专门的寄存器来存储sensor ID,可以判断设备是否在线
        {GC5035_SENSOR_ID,    
//定义了camera的driver_name
        SENSOR_DRVNAME_GC5035MIPI_RAW,
//接口,一个函数的地址,每一个驱动的.c文件最下面都是它
        GC5035MIPI_RAW_SensorInit},
#endif
...

上面提到的sensor ID以及driver name所在位置如下:

Z:\work\mtk6789_T\alps\s0_vnd\kernel-5.10\drivers\misc\mediatek\imgsensor\inc\kd_imgsensor.h

...
/*GC*/
#define GC5035_SENSOR_ID                        0x5035
#define GC2385_SENSOR_ID                        0x2385
...
#define SENSOR_DRVNAME_GC02M0_MIPI_RAW          "gc02m0_mipi_raw"
#define SENSOR_DRVNAME_GC5035MIPI_RAW           "gc5035_mipi_raw"
//注意,这个要跟ProjectConfig.mk文件中的name一致
#define SENSOR_DRVNAME_GC5035_MIPI_RAW           "gc5035_mipi_raw"
#define SENSOR_DRVNAME_GC2375_MIPI_RAW          "gc2375_mipi_raw"
...

我们添加的camera驱动要在这里做好定义!如果name不一致,初始化将不会继续下去了

第三个参数那个接口,文件路径如下:

Z:\work\mtk6789_T\alps\s0_vnd\kernel-5.10\drivers\misc\mediatek\imgsensor\src\common\v1_1\gc5035_mipi_raw\gc5035_mipi_Sensor.c

图中这个函数,将camera本身的操作函数传递回来

三、HAL层目录

hal层的数组文件位置如下:

关于怎么看cpu型号,提一嘴:

在ProjectConfig.mk文件当中,有一个变量 MTK_PLATFORM ,去看这个地方的配置

回归正题,来看看hal层的列表

文件路径:

Z:\work\mtk6789_T\alps\s0_vnd\vendor\mediatek\proprietary\custom\mt6789\hal\imgsensor_src\sensorlist.cpp

MSDK_SENSOR_INIT_FUNCTION_STRUCT SensorList[] =
{
...
#if defined(GC5035_MIPI_RAW)
    RAW_INFO_M(GC5035_SENSOR_ID, DEFAULT_MODULE_INDEX, DEFAULT_MODULE_ID, SENSOR_DRVNAME_GC5035_MIPI_RAW, NULL),
#endif
...
};

效果文件路径:

camera是可以输出多种格式(raw、yuv...),这里指定了camera的流程,现在Android 9之后基本都是raw了

raw处理首先要用到效果文件,效果文件路径:

  • Z:\work\mtk6789_T\alps\s0_vnd\vendor\mediatek\proprietary\custom\mt6789\hal\imgsensor\ver1\gc5035_mipi_raw
  • Z:\work\mtk6789_T\alps\s0_vnd\vendor\mediatek\proprietary\custom\mt6789\hal\imgsensor_metadata\gc5035_mipi_raw

上电文件路径:

Z:\work\mtk6789_T\alps\s0_vnd\kernel-5.10\drivers\misc\mediatek\imgsensor\src\isp3_m\camera_hw\imgsensor_cfg_table.c

struct IMGSENSOR_HW_POWER_SEQ sensor_power_sequence[] = {
...
/* GC */
//这个就是5035的上电时序图,具体要根据数据手册来详细配置,这个后面的延时,只能设置的比手册大,不能小!!
#if defined(GC5035_MIPI_RAW)
    {
        //这个和kernel下的driver name是一致的
        SENSOR_DRVNAME_GC5035MIPI_RAW,
        {
            //1.系统对应的引脚,类似dtsi,直接拿来用就好
            //2.Vol_High:高电平    Vol_Low:低电平    
            //3.延时时间
            {PDN, Vol_High, 0},
            {RST, Vol_Low, 0},
            {AVDD, Vol_2800, 0},
            {DOVDD, Vol_1800, 0},
            {DVDD, Vol_1200, 0},
            {SensorMCLK, Vol_High, 1},
            {PDN, Vol_Low, 0},
            {RST, Vol_High, 10}
        },
    },
#endif
...
};

如无法打开,iic读写失败,都可能是上电引起,此处非常重要

在此处配置完成后,其余地方就不再需要进行配置了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值