调试流程就不赘述,记录遇到的问题。
1.调试过程中,由于硬件工程师的失误,摄像头shutdown引脚连接到了cpu的两处地方,并且走线在板端的中间层无法割线。
一开始两处引脚都配置成output状态,量取摄像头端信号值,即无法拉高也无法拉低,摄像头变现的现象是i2c通讯正常,但是无法出图。
解决办法:只使用CPU其中一处引脚,另外一处引脚pin ctl设置为上拉、input状态。
-
在vendor下有两个效果文件路径,0309和0310,具体用哪个是由芯片型号来决定的
vendor/qcom/proprietary/mm-camera/Android.mk
else ifeq ( ( B U I L D M M C A M E R A 2 ) , t r u e ) i f e q ( (BUILD_MM_CAMERA2), true) ifeq ( (BUILDMMCAMERA2),true)ifeq((OEM_CHROMATIX_0308), 1)
CHROMATIX_VERSION := 0308E
else ifeq ($(call is-board-platform-in-list,msm8937 msm8953 sdm660 msm8998 apq8098_latv),true)
CHROMATIX_VERSION := 0310
else
CHROMATIX_VERSION := 0309
endif
else -
如果驱动没有找到xml对应的mx6000_chromatix效果文件,可以编译通过,但是
运行时驱动会报错,错误log:
[ 40.502099] [] pm_qos_update_request.part.5+0x1c/0x28
[ 40.502114] [] pm_qos_update_request+0x60/0x64
[ 40.502128] [] msm_pm_qos_update_request+0xa0/0xac
[ 40.502140] [] camera_v4l2_open+0x1bc/0x4e8
[ 40.502152] [] v4l2_open+0xa8/0x110
[ 40.502165] [] chrdev_open+0x108/0x200
[ 40.502178] [] do_dentry_open+0x224/0x320
[ 40.502190] [] vfs_open+0x58/0x84
[ 40.502202] [] path_openat+0x47c/0x950
[ 40.502213] [] do_filp_open+0x80/0x12c
[ 40.502225] [] do_sys_open+0x178/0x280
[ 40.502239] [] compat_SyS_openat+0x38/0x44
[ 40.502251] [] el0_svc_naked+0x34/0x38
如果遇到这个错误,先检查下效果文件存不存在。
4.调试的是双目摄像头,硬件工程师其中一个摄像头i2c有外部上拉,另外一目却忘记加外部上拉了,导致i2c通讯不正常,可以将对应的i2c引脚pin ctl软件配置上拉。
5.其中一个调试板,i2c通讯正常,mipi信号是乱的,换了摄像头排线后正常。如果找不到解决办法,有多的摄像头的话,先考虑换一套环境排查问题.
6.在一个供应商的平台上调通了,换到另外一个供应商的平台流程怎么都跑不通。查了一段时间后发现第二家供应商的代码使用一个属性区分了usb摄像头和mipi摄像头的,导致mipi摄像头流程跑不通。关掉该属性后调试正常:setprop persist.vendor.camera.usbcamera.enabled 0