1.在项目的ProjectConfig.mk中配置摄像头的kernel层与hal层,一个是驱动加载,一个是效果显示
device/mediateksample/$(yourprojectname)/ProjectConfig.mk
(本例用ov8865作后摄,gc5005做前摄)
CUSTOM_HAL_IMGSENSOR =ov8865_mipi_raw gc5005_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR =ov8865_mipi_raw
CUSTOM_HAL_SUB_IMGSENSOR =gc5005_mipi_raw
CUSTOM_KERNEL_IMGSENSOR =ov8865_mipi_raw gc5005_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR =ov8865_mipi_raw
CUSTOM_KERNEL_SUB_IMGSENSOR =gc5005_mipi_raw
找不到的搜我标红的宏名,兼容新的摄像头也是直接添加,分清楚前后摄就行
2.在项目的config配置,决定加载驱动的
$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_debug_defconfig
$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_defconfig
CONFIG_CUSTOM_KERNEL_IMGSENSOR="ov8865_mipi_raw gc5005_mipi_raw"
3.dst里面配置的加载
$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/cust_mt6761_camera.dtsi(看你自己项目定义的文件名,和加载到主dts里面的同名)
cam0_enable_sensor = "ov8865_mipi_raw"; //后摄
cam1_enable_sensor = "gc5005_mipi_raw"; //前摄
!!!一般情况下,其他部分不用改,但如果你发现通话,打开摄像头之后没声音了,试一下这里
- pinmux = <PINMUX_GPIO159__FUNC_GPIO159>;
+ pinmux = <PINMUX_GPIO171__FUNC_GPIO171>;
当然不一定和我一样是159引脚,看具体项目,换成闲置的gpio口就行,很可能是这里共用了
4.kd_imgsensor.h里面配置SENSOR_ID与SENSOR_DRVNAME
device/mediatek/common/kernel-headers/kd_imgsensor.h
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h
两个.h文件里面同步,注意看里面之前有没有定义过,有就不管,没有添加就好,不要有两个一样的
#define OV8865_SENSOR_ID 0x8865
#define GC5005_SENSOR_ID 0x5005
#define SENSOR_DRVNAME_OV8865_MIPI_RAW "ov8865_mipi_raw"
#define SENSOR_DRVNAME_GC5005_MIPI_RAW "gc5005_mipi_raw"
5.添加驱动,这个问厂家要代码吧,我给一下路径
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/imgsensor/src/common/v1/ov8865_mipi_raw/
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/imgsensor/src/common/v1/gc5005_mipi_raw/
6.和屏里面介绍的一样,驱动初始化加载对应的函数
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.h
UINT32 OV8865_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
UINT32 GC5005_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/imgsensor/src/common/v1/imgsensor_sensor_list.c
(与前面kd_imgsensor.h里面定义是对应的)
#if defined(OV8865_MIPI_RAW)
{OV8865_SENSOR_ID,
SENSOR_DRVNAME_OV8865_MIPI_RAW,
OV8865_MIPI_RAW_SensorInit},
#endif
#if defined(GC5005_MIPI_RAW)
{GC5005_SENSOR_ID,
SENSOR_DRVNAME_GC5005_MIPI_RAW,
GC5005_MIPI_RAW_SensorInit},
#endif
7.给摄像头配置上电
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/imgsensor/src/$(MTK_PLATFORM)/camera_hw/imgsensor_cfg_table.c
#if defined(GC5005_MIPI_RAW)
{
SENSOR_DRVNAME_GC5005_MIPI_RAW,
{
{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
#if defined(OV8865_MIPI_RAW)
{
SENSOR_DRVNAME_OV8865_MIPI_RAW,
{
{SensorMCLK, Vol_High, 0},
{PDN, Vol_Low, 5},
{RST, Vol_Low, 5},
{DOVDD, Vol_1800, 5},
{AVDD, Vol_2800, 5},
{DVDD, Vol_1200, 5},
{AFVDD, Vol_2800, 5},
{PDN, Vol_High, 5},
{RST, Vol_High, 5}
},
},
#endif
8.HAL层摄像头效果文件加载,配置过了的不管,没有的加上
vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/imgsensor_src/sensorlist.cpp
#if defined(GC5005_MIPI_RAW)
RAW_INFO(GC5005_SENSOR_ID, SENSOR_DRVNAME_GC5005_MIPI_RAW, NULL),
#endif
#if defined(OV8865_MIPI_RAW)
RAW_INFO(OV8865_SENSOR_ID, SENSOR_DRVNAME_OV8865_MIPI_RAW,NULL),
#endif
9.摄像头效果显示,这得找FAE调试了,可能要优化好多次
vendor/mediatek/proprietary/custom/common/hal/imgsensor_metadata/sensor/ov8865_mipi_raw/config_static_metadata.sensor.ov8865mipiraw.h
(包含一个文件,内容大同小异)
vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/imgsensor/ov8865_mipi_raw/(包含两个文件夹AE_Tuning_Para与AWB_Tuning_Para以及效果文件,文件差异大,效果显示主要就是改这个文件夹里面文件)
vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/imgsensor_metadata/ov8865_mipi_raw/(文件差异很小,有的甚至只有传入的摄像头驱动名称差异)
vendor/mediatek/proprietary/custom/common/hal/imgsensor_metadata/sensor/gc5005_mipi_raw/config_static_metadata.sensor.gc5005mipiraw.h
vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/imgsensor/gc5005_mipi_raw/
vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/imgsensor_metadata/gc5005_mipi_raw/
!!!FAE有时候很坑,给你之前别人点亮过的文件,你编进入发现摄像头界面呈现彩虹格子图的样式,缺少图像,可以看这个文件夹里面有没有多出一个config_request_metadata__.h文件,删了它
vendor/mediatek/proprietary/custom/$(MTK_PLATFORM)/hal/imgsensor_metadata/gc5005_mipi_raw/