仅当做个人学习笔记使用,防丢失。
原文链接:https://blog.csdn.net/qq_58703058/article/details/132994554
Device:
1、 修改imgsensor相关(ProjectConfig.mk文件)
device/mediateksample/{platform}/ProjectConfig.mk
此文件用于将相关模块加入编译。
2、 在头文件中添加sensor id和 sensor name宏定义,sensor id在该sensor的规格书(datasheet)中搜索寄存器地址。(kd_imgsensor.h)
device/mediatek/common/kernel-headers/kd_imgsensor.h
Kernel:
1、 将sensor原厂或是模组厂提供的sensor 驱动放置到如下文件夹(具体路径需要到out路径下看平台走的是哪个路径,此路径不唯一)
kernel-4.19/drivers/misc/mediatek/imgsensor/src/common/v1_1
2、 将模组信息添加到头文件
kernel-4.19/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h
3、 在defconfig中添加宏定义让驱动文件编译
kernel-4.19/arch/arm64/configs/xxx_debug_defconfig
kernel-4.19/arch/arm64/configs/xxx_defconfig
4、 在SensorList中添加sensor id ,sensor name与sensor driver init函数
kernel-4.19/drivers/misc/mediatek/imgsensor/src/common/v1_1/imgsensor_sensor_list.h 添加函数声明
kernel-4.19/drivers/misc/mediatek/imgsensor/src/common/v1_1/imgsensor_sensor_list.c 添加数组成员
5、 上电时序配置
kernel-4.19/drivers/misc/mediatek/imgsensor/src/common/v1_1/imgsensor_pCLKwr_seq.c
6、 供电方式配置
需要注意配置的引脚是PMIC供电还是GPIO控制,如果供电由PMIC控制,则需要在对应位置修改为IMGSENSOR_HW_ID_REGULATOR,如果是GPIO配置,则应该为IMGSENSOR_HW_ID_GPIO
Kernel-4.19/drivers/misc/mediatek/imgsensor/src/mt6853/camera_hw_mt6833/imgsensor_cfg_table.c
VCAMD:就是DVDD数字供电,主要给ISP供电,所以有些没有ISP的模组没有这个引脚。
VCAMA:就是AVDD模拟供电,主要给感光区和ADC部分供电。
VCAMIO:就是VDDIO数字IO供电,主要给I2C部分供电。
VCAMAF:对焦马达供电。
7、 dtsi相关配置
kernel-4.14/arch/arm64/boot/dts/mediatek/cust_mt6833_camera.dtsi
可以参考其他项目的设备树是如何配置的。
cam0_rst0:后主摄,rst引脚,输出低电平;对应的是pinctrl-1,引用camera_pins_cam0_rst_0这个节点
cam0_rst1:后主摄,rst引脚,输出高电平;对应的是pinctrl-2,引用camera_pins_cam0_rst_1这个节点上下一一对应
以此类推,clk和RST为GPIO供电,需要在&pio中添加子节点定义在GPIO list中搜索R_CAM1_CLK1,R_CAM1_RST1找到对应的GPIO号
RST这路电需要配置的gpio口为GPIO56,camera_pins_cam0_rst_0和camera_pins_cam0_rst_1这两个节点中配置的GPIO口为56, CLK这路电需要配置的gpio口为GPIO50
8、 DWS配置 配置修改dws文件需要使用dtc工具,在代码中如下位置:
vendor/mediatek/proprietary/tools/dct,其中包含了linux版本与windows版本工具。dws文件存放位置如下:
kernel-4.19/drivers/misc/mediatek/dws/,工具中可以配置gpio引脚信息状态,i2c总线上挂载的设备等功能
Vendor:
1、 在SensorList中添加sensor id ,sensor name与sensor driver init函数 vendor/mediatek/proprietary/custom/common/hal/imgsensor_src/sensorlist.cpp
2、 根据原理图配置MIPI PORT和MLCK
vendor/mediatek/proprietary/custom/mt6853/hal/imgsensor_src/cfg_setting_imgsensor.cpp
3、 新增metadata文件和效果参数文件
vendor/mediatek/proprietary/custom/mt6739/hal/imgsensor/ver1
vendor/mediatek/proprietary/custom/common/hal/imgsensor_metadata/sensor/xxx_mipi_raw/
vendor/mediatek/proprietary/custom/mt6739/hal/imgsensor_metadata/xxx_mipi_raw/
资料作用:
Datasheet:用于获取slave address,上下电时序和要求。在配置sensor ID和供电方式时用到。
Gpio map:用于查找各引脚对应的gpio端口号。在配置dtsi的gpio端口号时用到。
硬件原理图:用于查看硬件的信息。用于供电方式供电配置中查看引脚是gpio供电还是pmic供电,在dws配置中查看I2C通道,查看csi和mclk的通道。
模组规格图:可以查看I2C地址,电压配置信息。用于上电时序中三路电压的配置。
附录总结:
替换文件名字指令:
find 13870* |xargs -i echo mv "{}" "{}" | sed 's/13870/5648/2g' | sh
替换文件内容指令:
#替换单个文件下的内容,比如将文件中的"alidata"替换为"data".
sed -i "s/alidata/data/g" test.txt
#替换某个目录下所有文件中的内容,比如将root目录下所有文件中的"wwwroot"替换为"www".
sed -i "s/wwwroot/www/g" 'grep -rl wwwroot /root'
读取sensor id方法:
法一、adb shell后su切换超级权限使用cat /proc/drivers/camera_info查看
法二、使用手机里mtk自带log工具抓开机log,搜索关键字进行查找。或使用adb shell cat /proc/kmsg >./log.log抓log查看。
重要文件
kernel-4.19\drivers\misc\mediatek\imgsensor:
inc->kd_imgsensor.h -----定义sensor id 和sensor name
src->common->v1(此路径不绝对)->imgsensor_hw.c-----配置camera的供电
src->{project}->camera_hw->imgsensor_cfg_table.c-----配置供电方式以及上电时序
src->common->v1(此路径不绝对)->imgsensor.c-----camera驱动模块的加载,platform总线的注册