msm8916 camera driver添加新摄像头kernel hal修改

本文介绍在龙板410c上添加OV5645摄像头的详细步骤,包括添加驱动文件、配置编译选项及开关、修改设备树、实现HAL层设置与效果调试等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在dragonboard410c上添加一款新摄像头流程


1添加sensor kernel driver文件:(\kernel\drivers\media\platform\msm\camera_v2\sensor\ov5645.c)

msm_sensor_power_setting、msm_camera_i2c_reg_confv4l2_subdev_info

ov5645.c驱动文件主要实现上电、rst、pwd、mclk等power setting  和 sensor prob & sensor  i2c driver prob 以及 v4l2_subdev 注册


2 添加编译选项
obj-$(CONFIG_OV5645) += ov5645.o
kernel\drivers\media\platform\msm\camera_v2\sensor\Makefile


3 添加编译开关 

(android5.1.1-qcom-dragonboard410c\kernel\arch\arm64\configs\msm_defconfig、msm-perf_defconfig、msm-LMT-perf_defconfig)

CONFIG_OV5645=y


kernel/drivers/media/platform/msm/camera_v2/Kconfig

config OV5645
bool "Sensor OV5645 (YUV 5.0MP)"
depends on MSMB_CAMERA
---help---
OV5645 is Omnivision YUV sensor. It supports 5.0 MP preview
and snapshot. The preview and snapshot resolution shall be
1280 * 270. It does not support auto focus. It supports
few special effects like saturation.

4 device tree 修改
添加相应sensor的device tree描述
Kenel/arch/arm64/boot/dts/apq8016-camera-sensor-sbc.dtsi
	qcom,camera@78 {
		compatible = "ovti,ov5645";
		reg = <0x78 0x0>;
		qcom,slave-id = <0x78 0x300a 0x5645>;
		qcom,csiphy-sd-index = <1>;
		qcom,csid-sd-index = <1>;
		qcom,mount-angle = <90>;
		qcom,sensor-name = "ov5645";
		cam_vdig-supply = <&vph_pwr_vreg>;
		cam_vana-supply = <&vph_pwr_vreg>;
		cam_vio-supply = <&vph_pwr_vreg>;
		qcom,cam-vreg-name = "cam_vdig", "cam_vio", "cam_vana";
		qcom,cam-vreg-min-voltage = <2100000 0 2850000>;
		qcom,cam-vreg-max-voltage = <2100000 0 2850000>;
		qcom,cam-vreg-op-mode = <200000 0 80000>;
		pinctrl-names = "cam_default", "cam_suspend";
		pinctrl-0 = <&cam_sensor_mclk1_default &cam_sensor_front_default>;
		pinctrl-1 = <&cam_sensor_mclk1_sleep &cam_sensor_front_sleep>;
		gpios = <&msm_gpio 27 0>,
			<&msm_gpio 28 0>,
			<&msm_gpio 33 0>;
		qcom,gpio-reset = <1>;
		qcom,gpio-standby = <2>;
		qcom,gpio-req-tbl-num = <0 1 2>;
		qcom,gpio-req-tbl-flags = <1 0 0>;
		qcom,gpio-req-tbl-label = "CAMIF_MCLK",
					"CAM_RESET",
					"CAM_STANDBY";
		qcom,gpio-set-tbl-num = <1 1>;
		qcom,gpio-set-tbl-flags = <0 2>;
		qcom,gpio-set-tbl-delay = <1000 4000>;
		qcom,csi-lane-assign = <0x4320>;
		qcom,csi-lane-mask = <0x3>;
		qcom,sensor-position = <1>;
		qcom,sensor-mode = <0>;
		qcom,cci-master = <0>;
		qcom,mclk-23880000;
		clocks = <&clock_gcc clk_mclk1_clk_src>,
				<&clock_gcc clk_gcc_camss_mclk1_clk>;
		clock-names = "cam_src_clk", "cam_clk";
	};


5 hal层修改,

添加hal层sensor libs 代码,实现对应sensor的init setting, preview setting, 各种resolution setting , group on ,group off,csi csid config etc.  customer 端sensor主要实现  

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\sensor_libs\ ov5645


6 hal层 raw camera效果调试文件
vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\chromatix\0301\libchromatix\ chromatix_ov5645


7 hal层编译(vendor/qcom/proprietary/common/config/device-vendor.mk
MM_CAMERA +=libmmcamera_ov5645
MM_CAMERA +=libchromatix_ov5645_common
MM_CAMERA +=libchromatix_ov5645_preview
MM_CAMERA +=libchromatix_ov5645_default_video
MM_CAMERA +=libchromatix_ov5645_hfr
MM_CAMERA +=libchromatix_ov5645_zsl

<think>好的,用户想了解如何在高通Camera HAL3中实现多摄像头用例的开发。首先,我需要回顾一下之前提供的引用内容,看看是否有相关的信息。引用中提到CamX是高通HAL3架构,用户需要根据高通的接口来实现,并且不同厂商可能有自己的修改。此外,还有关于源码路径和HAL模块的信息。 接下来,我应该考虑用户可能需要的步骤。多摄像头开发通常涉及硬件支持、配置、HAL接口的使用、同步控制、图像处理和调试等方面。需要确保硬件支持多摄,比如多个摄像头模组和同步时钟。然后是配置部分,比如修改XML配置文件,设置多摄像头组合和用例。接着是HAL层的API调用,比如使用Chi API来处理多摄的逻辑,可能涉及选择主副摄像头,同步参数设置等。另外,同步控制很重要,比如时间戳同步和曝光同步。图像处理可能需要融合算法,比如深度信息或HDR合成。最后是调试和优化,利用高通的工具和日志分析。 用户可能还关心代码结构,所以需要指出关键的源码目录,比如CamX和Chi部分的代码。同时,引用中的文档和源码路径可以作为参考,比如高通的PDF文档和在线源码。还要注意厂商的定制化可能带来的差异,建议参考具体项目的代码和高通基线。 可能还需要提到Android Treble架构中的CameraProvider,如引用4所述,但用户的问题更集中在HAL3的实现,所以重点在CamX和Chi部分。此外,确保提到多摄用例的具体例子,比如广角+长焦、深度传感等,帮助用户理解应用场景。 最后,用户可能需要了解常见问题,比如同步问题、性能优化、厂商适配差异,这些都应该在回答中涵盖。同时,生成的相关问题可以引导用户进一步学习,比如多摄同步机制或调试工具的使用。</think>在高通Camera HAL3(CamX架构)中实现多摄像头用例的开发需要结合硬件特性、HAL接口规范以及Android框架层要求,以下是关键步骤和要点: ### 一、硬件与基础配置 1. **硬件验证** - 确认SoC支持多摄像头并发能力(如Spectra ISP通道数) - 检查传感器同步接口(如硬件同步信号线PHY Sync) - 示例配置:双摄(广角+长焦)、三摄(主摄+超广角+TOF) 2. **XML配置** - 修改`camera_config.xml`定义多摄组合: ```xml <PhysicalCameras> <PhysicalCamera id="0" facing="back" type="wide"/> <PhysicalCamera id="1" facing="back" type="tele"/> </PhysicalCameras> <LogicalCameras> <LogicalCamera id="100" type="dual_wide_tele"> <PhysicalCamera id="0"/> <PhysicalCamera id="1"/> </LogicalCamera> </LogicalCameras> ``` - 设置多摄同步参数:`multi_camera_sync_mode`[^1] ### 二、HAL层开发要点 1. **CamX-CHI接口** - 使用`ChiUseCase`定义多摄场景(如`UseCaseDualCamera`) - 实现`pipeline descriptor`管理多ISP通道: ```c // 创建双摄pipeline CreateMultiCameraPipeline( m_pHwContext, &pipelineCreateInput, &pipelineCreateOutput); ``` 2. **同步控制** - 时间戳同步:通过`SensorSyncMode`设置硬件级同步 - 曝光同步:调用`SetMultiCameraSyncConfig()`配置主从关系 - 帧同步误差需<1ms(参考高通QCFA规范) ### 三、图像处理 1. **元数据对齐** - 使用`DepthMapGenerator`处理深度数据 - 实现`MultiCamController`协调图像融合: ```c result = m_pMultiCamController->ProcessFusion( pMainFrame, pAuxFrame, &outputFrame); ``` 2. **算法集成** - 集成高通虹软等第三方算法库 - 开发自定义融合逻辑(如HDR+场景识别) ### 四、调试与优化 1. **工具链使用** - 通过`QCAT`分析多摄数据流时延 - 使用`TuningIQ`调整ISP参数一致性 2. **日志分析** - 启用`CAMX_DEBUG_LOG`的`MULTI_CAM`标签 - 检查`camxhal3metadata`中的同步元数据 ### 五、代码结构参考 ```text CamX/ ├── chi-cdk/ # CHI扩展接口 ├── core/ # 多摄控制核心逻辑 │ └── camxmulticamcontroller.cpp vendor/qcom/proprietary/ └── camera-hal/ # 厂商定制实现 └── sdm845/ ├── chx/ # 扩展用例实现 └── config/ # 多摄配置文件 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值