前言

由于调试camera 过程中,遇到的问题琐碎繁杂,在此将已经掌握和常用的调试技巧和一些知识点罗列出来,便于快速的开发调试camera。

平台包含msm8909、msm8953,软件平台包含Android5.0、Android8.1、Android9.0。

如有错误,还请交流指正。

调试顺序:

  1. 读取ID(配置上电,系统启动可以正常读取到Camera ID)
  2. 配置 vendor  驱动,相机可以正常出图

kernel: 一般来说,调试一款camera,需要先配置kernel 的dts配置。这部分包含,camera的 mipi-csi位置(后、景深、前)、关键引脚配置(mclk、rst、pwn),关键上电配置(IO电、模拟电、数字电)、CCI配置。

vendor:配置好基本的lib文件和chromatix文件,以及平台的camera 配置文件后。根据规格书或者IC手册,在lib.h 中配置正确的上电时序。在vendor 的lib.h文件中填充正确的slave_addr 地址,和寄存器地址以及对应ID值。

目录

前言

一些知识点

调试 vendor 镜像问题

调试 device-vendor.mk

调试 msm8953_camera.xml

配置效果文件  XXX_chromatix.xml

调试 Android9.0 安全机制


一些知识点

修改配置好所有驱动后,全编后,刷入 vendor和kernel镜像,进行验证。

Android5.0 vendor驱动在system.img 中,需要刷 system和kernel镜像,进行验证。

调试 vendor 镜像问题

vendor中各个驱动是以so库模块的形式加载的,若改了某个模块对应的文件后,

可以单编,然后单独push 更新这个模块/或者全编全刷整个vendor镜像(建议全刷vendor)。

对应模块位置

文件对应的模块so名称在本目录或者上一级目录的Android.mk中可以找到。

形如:LOCAL_MODULE    := libmmcamera2_mct

生成的so文件位置:

路径:out/target/product/xxx/vendor/lib/libmmcamera2_mct.so

更新方式

adb root
adb remount

adb push out/target/product/xxx/vendor/lib/libmmcamera2_mct.so  /vendor/lib

adb shell sync
adb reboot   // 必须执行同步 sync和reboot重启后生效

例如:

如修改了帧检测函数的等待时间,可以单刷 libmmcamera2_mct.so

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\mct\bus\mct_bus.c
#define MCT_BUS_NANOSECOND_SCALER 1000000000
+   #define MCT_BUS_NANOSECOND_SCALER 2000000000 // 2s

找到上一级目录对应的module 名称:

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\mct\Android.mk
LOCAL_MODULE    := libmmcamera2_mct

按照上方的方式单刷这个镜像

out/target/product/xxx/vendor/lib/libmmcamera2_mct.so

调试 device-vendor.mk

camera 配置修改device-vendor.mk 中如下:

包含3种文件:

1. 驱动lib库文件
2. 效果库文件
3. 效果配置文件

代码如:

MM_CAMERA += libmmcamera_imx307 // lib 驱动文件
MM_CAMERA += libchromatix_imx307_common // chromatix 效果文件
MM_CAMERA += libchromatix_imx307_postproc
MM_CAMERA += libchromatix_imx307_snapshot
MM_CAMERA += libchromatix_imx307_video
MM_CAMERA += libchromatix_imx307_cpp_preview
MM_CAMERA += libchromatix_imx307_cpp_snapshot
MM_CAMERA += libchromatix_imx307_cpp_video
MM_CAMERA += libchromatix_imx307_cpp_liveshot
MM_CAMERA += libchromatix_imx307_zsl_preview
MM_CAMERA += libchromatix_imx307_zsl_video
MM_CAMERA += imx307_chromatix.xml // 效果配置文件

这里要注意:

对应的驱动文件所在的Android.mk 中的作用是,是否把对应的文件编译成一个so库。

device-vendor.mk 的作用是,在编译整个vendor镜像的时候,是否把这些对应的camera驱动和配置文件打包进入vendor镜像,(这个是必须的,因为将来出版本是全编,所以必须打包进入vendor镜像)。

imx307_chromatix.xml 这个文件跟随vendor镜像更新

在 adb 下, vendor/data/camera/ 下可以找到对应文件

xxx:/vendor/etc/camera # ls

camera_config.xml  // 这个就是对应的 平台camera 配置文件msm8953_camera.xml

imx307_chromatix.xml  // 上面的效果配置文件

调试 msm8953_camera.xml

路径:

camera_config.xml
这个就是对应的平台camera 配置文件msm8953_camera.xml

配置当前项目支持的camera,主摄、景深、前摄。

配置各个camera的属性:cameraId、sensor名字、对焦马达、eeprom、闪光灯、支持模式、安装位置、安装角度、效果配置索引、mipi-csi配置、镜头等信息。

这里展示了如何将 msm8953_camera.xml  转换为camera_config.xml的。

名称转换如下:

vendor\qcom\proprietary\mm-camera\mm-camera2\media-controller\modules\sensors\configs\project.mk

else ifeq ($(call is-board-platform-in-list, msm8953),true)

include $(CLEAR_VARS)

LOCAL_MODULE     := camera_config.xml

LOCAL_MODULE_CLASS := EXECUTABLES

LOCAL_SRC_FILES    := msm8953_camera.xml

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/etc/camera

LOCAL_MODULE_OWNER := qti

include $(BUILD_PREBUILT)

endif

adb 下:

vendor/etc/camera/camera_config.xml

配置效果文件  XXX_chromatix.xml

包含一个camera sensor 所配置支持的效果搭配组合。根据实际需求配置。

对应lib.h中的,对应lib.h中几组不同的寄存器组配置。

路径:

vendor\qcom\proprietary\mm-camera\mm-camera2\

media-controller\modules\sensors\configs

代码如:

<ChromatixConfigurationRoot><CommonChromatixInfo><ChromatixName><ISPCommon>imx307_common</ISPCommon><PostProc>imx307_postproc</PostProc></ChromatixName></CommonChromatixInfo><ResolutionChromatixInfo><ChromatixName sensor_resolution_index="0"><ISPPreview>imx307_snapshot</ISPPreview><ISPSnapshot>imx307_snapshot</ISPSnapshot><ISPVideo>imx307_snapshot</ISPVideo><CPPPreview>imx307_cpp_preview</CPPPreview><CPPSnapshot>imx307_cpp_snapshot</CPPSnapshot><CPPVideo>imx307_cpp_video</CPPVideo><CPPLiveshot>imx307_cpp_liveshot</CPPLiveshot><A3Preview>imx307_zsl_preview</A3Preview><A3Video>imx307_zsl_video</A3Video></ChromatixName><ChromatixName sensor_resolution_index="1"><ISPPreview>imx307_snapshot</ISPPreview><ISPSnapshot>imx307_snapshot</ISPSnapshot><ISPVideo>imx307_video</ISPVideo><CPPPreview>imx307_cpp_preview</CPPPreview><CPPSnapshot>imx307_cpp_snapshot</CPPSnapshot><CPPVideo>imx307_cpp_video</CPPVideo><CPPLiveshot>imx307_cpp_liveshot</CPPLiveshot></ChromatixName></ResolutionChromatixInfo>
</ChromatixConfigurationRoot>

调试 Android9.0 安全机制

Android9.0 的安全机制,如果单刷的镜像和版本不是同一台服务器编译出来的,系统会启动异常。

不利于单刷镜像,调试功能。

不能安装apk

不能 remount

必须使用debug版本,执行以下命令。代码如:

adb root

adb disable-verity

adb reboot

adb remount

然后去remount或者安装Apk

adb install -r xxx.apk

Qcom平台 Camera 之调试单刷验证相关推荐

  1. Qcom平台 Camera 之单刷调试

    前言 有关Android 平台 camera 调试的一些知识点,有助于调试验证. 目录 一些知识点 调试 vendor 镜像问题 调试 device-vendor.mk 调试 msm8953_came ...

  2. android camera2 qcom,Qcom平台 Camera的一些知识点 之MCLK

    前言 MCLK 是平台 baseband 提供给 cam sensor的正常工作的频率, Qcom 平台一般未24MHz,由其他时钟源分频而来,实测在23.8MHz左右. 在打开相机的时候,才可以测到 ...

  3. android camera2 qcom,Qcom平台 camera的一些知识点 之RAW图抓取

    前言 介绍camera sensor 输出的 raw 图,用于验证cam显示效果问题. 参考文档 : KBA-161204073328 目录 的 mask bit 定义 参数解释: /** * 参数解 ...

  4. Qcom平台 Camera 之开启调试 log

    本文是针对Android5.1.8.1.9.0版本的camera调试,log相关的配置做一个记录.如有错误,请交流指正. 调试 打开 kernel cam log 用于观察上电时序,match_id ...

  5. Qcom平台 Camera 之常见错误和问题

    本文主要记载了一些在调试过程中遇到的错误和问题,及相关的设置.log.解决方法等.如有错误,请交流指正. 目录 调试 帧冻结错误 调试 相机 App 闪退错误 调试 cam banding 现象 调试 ...

  6. 【qcom Android camera调试纪要】

    qcom Android camera调试纪要 1.平台适配 1.1.kernel端 1.2.vendor端 1.2.1.cameraService lib代码 注意:需要在vendor\qcom\p ...

  7. 高通平台Camera调试移植入门

    camera基本代码架构 1.上层应用和HAL层交互,高通平台在HAL层里实现自己的一套管理策略.在kenrel中实现sensor的底层驱动.最核心的sensor端的底层设置.ISP效果相关代码单独进 ...

  8. 高通平台camera 移植过程

    1  camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略:在kernel中实现se ...

  9. CCT之CAMERA TUNNING调试学习总结

    ob 静态电流 shading 阴影, 3a GAMMA:拍灰阶卡, ccm isp 是image signal processing,用于图像处理,比如gamma调整,dynamic range c ...

最新文章

  1. Linux 下复制(cp)目录时排除一个或者多个目录的方法
  2. 窗口迅速关闭的解决办法/scanf/if/for/break
  3. window.open 弹出居中窗口
  4. 品牌直播启动的三个关键点
  5. 大战设计模式【19】—— 享元模式
  6. 学python用什么软件-初学 Python 需要安装哪些软件?
  7. 书名带冒号_书名号、引号、括号和冒号如何套用
  8. 【框架设计】3D坦克大战
  9. 你以为你以为的三国就是你以为的三国吗——读《三国史话》
  10. 英特尔再遭反垄断围剿 或面临38亿美元罚款
  11. 机器学习可行性与VC dimension
  12. ROS功能包|mav_control_rw(基于MPC的无人机轨迹跟踪控制)---gazebo仿真测试
  13. 关于斗地主编程的思考
  14. virtualBox安装centos7并实现宿主机、虚拟机、外网三网互通
  15. Mysql数据库---约束类型_MySQL约束类型及举例介绍
  16. TSN算法的PyTorch代码解读(训练部分)
  17. SwiftUI教程第1章第20:加载Web图片
  18. docker images 命令详解
  19. 麦芽糖醇(CAS 585-88-6)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 程控交换原理教学,程控数字交换系统实验设备

热门文章

  1. 一个保险柜密码是三位数,对上其中两位就可以打开,最坏至少试多少次才能保证打开
  2. 书店文具店收银系统应该从哪些方面着手选择?
  3. linux shell 脚本 if和else代码块都被执行 | shell 批量添加、删除用户(for循环做if嵌套)
  4. 快手Kafka集群演进之路学习笔记
  5. 工业路由器的天线数量与WIFI信号和穿墙范围有什么关系?
  6. vbs脚本功能:1、判断系统位数64/32;2、读取注册表,读取应用名称。3、读取txt文件;4、执行exe文件,安装程序。
  7. 010. 谈一谈110%战略
  8. Web前端20~45
  9. TrackPopupMenu SetCheck(1)无效? 点击其他地方快捷菜单不消失?
  10. DeviceIOControl与驱动层 - 缓冲区模式