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

本文介绍如何集成OV5648摄像头到Linux系统中。包括添加内核驱动、配置编译选项、更新设备树、修改HAL层代码及调试步骤。适合于嵌入式系统开发者。

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

添加一款新摄像头流程

1添加sensor kernel driver, 主要实现上电、rst、pwd、mclk等power setting,sensor prob & sensor  i2c driver prob 和 v4l2_subdev 注册

\kernel\drivers\media\platform\msm\camera_v2\sensor\ov5648.c


2 添加编译选项

obj-$(CONFIG_OV5648)+= ov5648.o

kernel\drivers\media\platform\msm\camera_v2\sensor\Makefile


3 添加编译开关

CONFIG_OV5648=y

kernel/arch/arm/configs/msm8974_defconfig

kernel/arch/arm/configs/msm8974-perf_defconfig

 

config OV5648

       bool "Sensor OV5648 (BAYER 5M)"

       depends on MSMB_CAMERA

       ---help---

              OmniVision 5 MP Bayer Sensor,supports 2 mipi lanes,

              preview and snapshot config at1932 * 1092 at 30 fps,

              hfr video at 60, 90 and 120 fps.This sensor driver does

              not support auto focus.

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


4 device tree 修改

添加相应sensor的device tree描述

Kenel/arch/arm/boot/dts/msm8974-camera-sensor-cdp.dtsi


+       qcom,camera@6c {
+               compatible = "qcom,ov5648";
+               reg = <0x6c 0x0>;
+               qcom,slave-id = <0x6c 0x300A 0x5648>;
+               qcom,csiphy-sd-index = <2>;
+               qcom,csid-sd-index = <2>;
+               qcom,mount-angle = <90>;
+               qcom,sensor-name = "ov5648";
+               qcom,vdd-cx-supply = <&pm8841_s2>;
+               qcom,vdd-cx-name = "qcom,vdd-cx";
+               cam_vdig-supply = <&pm8941_l22>;
+               cam_vana-supply = <&pm8941_l17>;
+               cam_vio-supply = <&pm8941_lvs3>;
+               qcom,cam-vreg-name = "cam_vdig", "cam_vana", "cam_vio";
+               qcom,cam-vreg-type = <0 0 1>;
+               qcom,cam-vreg-min-voltage = <1500000 2800000 0>;
+               qcom,cam-vreg-max-voltage = <1500000 2800000 0>;
+               qcom,cam-vreg-op-mode = <105000 80000 0>;
+               qcom,gpio-no-mux = <0>;
+               gpios = <&msmgpio 17 0>,
+                       <&msmgpio 18 0>,
+                       <&msmgpio 89 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_RESET1",
+                                         "CAM_STANDBY";
+               qcom,gpio-set-tbl-num = <1 1>;
+               qcom,gpio-set-tbl-flags = <0 2>;
+               qcom,gpio-set-tbl-delay = <1000 30000>;
+               qcom,csi-lane-assign = <0x4320>;
+               qcom,csi-lane-mask = <0x7>;
+               qcom,sensor-position = <1>;
+               qcom,sensor-mode = <1>;
+               qcom,sensor-type = <0>;
+               qcom,cci-master = <1>;
+               status = "ok";
+       };


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\ ov5648


6 hal层 raw camera效果调试文件

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\chromatix\0301\libchromatix\ chromatix_ov5648


7 hal层编译

MM_CAMERA +=libmmcamera_ov5648

MM_CAMERA +=libchromatix_ov5648_common

MM_CAMERA +=libchromatix_ov5648_preview

MM_CAMERA +=libchromatix_ov5648_default_video

MM_CAMERA +=libchromatix_ov5648_hfr

MM_CAMERA +=libchromatix_ov5648_zsl

vendor/qcom/proprietary/common/config/device-vendor.mk


End微笑微笑

<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、付费专栏及课程。

余额充值