Qcom平台 Camera 之调试单刷验证
前言
由于调试camera 过程中,遇到的问题琐碎繁杂,在此将已经掌握和常用的调试技巧和一些知识点罗列出来,便于快速的开发调试camera。
平台包含msm8909、msm8953,软件平台包含Android5.0、Android8.1、Android9.0。
如有错误,还请交流指正。
调试顺序:
- 读取ID(配置上电,系统启动可以正常读取到Camera ID)
- 配置 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 remountadb 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 之调试单刷验证相关推荐
- Qcom平台 Camera 之单刷调试
前言 有关Android 平台 camera 调试的一些知识点,有助于调试验证. 目录 一些知识点 调试 vendor 镜像问题 调试 device-vendor.mk 调试 msm8953_came ...
- android camera2 qcom,Qcom平台 Camera的一些知识点 之MCLK
前言 MCLK 是平台 baseband 提供给 cam sensor的正常工作的频率, Qcom 平台一般未24MHz,由其他时钟源分频而来,实测在23.8MHz左右. 在打开相机的时候,才可以测到 ...
- android camera2 qcom,Qcom平台 camera的一些知识点 之RAW图抓取
前言 介绍camera sensor 输出的 raw 图,用于验证cam显示效果问题. 参考文档 : KBA-161204073328 目录 的 mask bit 定义 参数解释: /** * 参数解 ...
- Qcom平台 Camera 之开启调试 log
本文是针对Android5.1.8.1.9.0版本的camera调试,log相关的配置做一个记录.如有错误,请交流指正. 调试 打开 kernel cam log 用于观察上电时序,match_id ...
- Qcom平台 Camera 之常见错误和问题
本文主要记载了一些在调试过程中遇到的错误和问题,及相关的设置.log.解决方法等.如有错误,请交流指正. 目录 调试 帧冻结错误 调试 相机 App 闪退错误 调试 cam banding 现象 调试 ...
- 【qcom Android camera调试纪要】
qcom Android camera调试纪要 1.平台适配 1.1.kernel端 1.2.vendor端 1.2.1.cameraService lib代码 注意:需要在vendor\qcom\p ...
- 高通平台Camera调试移植入门
camera基本代码架构 1.上层应用和HAL层交互,高通平台在HAL层里实现自己的一套管理策略.在kenrel中实现sensor的底层驱动.最核心的sensor端的底层设置.ISP效果相关代码单独进 ...
- 高通平台camera 移植过程
1 camera基本代码架构 高通平台对于camera的代码组织,大体上还是遵循Android的框架:即上层应用和HAL层交互,高通平台在HAL层里面实现自己的一套管理策略:在kernel中实现se ...
- CCT之CAMERA TUNNING调试学习总结
ob 静态电流 shading 阴影, 3a GAMMA:拍灰阶卡, ccm isp 是image signal processing,用于图像处理,比如gamma调整,dynamic range c ...
最新文章
- Linux 下复制(cp)目录时排除一个或者多个目录的方法
- 窗口迅速关闭的解决办法/scanf/if/for/break
- window.open 弹出居中窗口
- 品牌直播启动的三个关键点
- 大战设计模式【19】—— 享元模式
- 学python用什么软件-初学 Python 需要安装哪些软件?
- 书名带冒号_书名号、引号、括号和冒号如何套用
- 【框架设计】3D坦克大战
- 你以为你以为的三国就是你以为的三国吗——读《三国史话》
- 英特尔再遭反垄断围剿 或面临38亿美元罚款
- 机器学习可行性与VC dimension
- ROS功能包|mav_control_rw(基于MPC的无人机轨迹跟踪控制)---gazebo仿真测试
- 关于斗地主编程的思考
- virtualBox安装centos7并实现宿主机、虚拟机、外网三网互通
- Mysql数据库---约束类型_MySQL约束类型及举例介绍
- TSN算法的PyTorch代码解读(训练部分)
- SwiftUI教程第1章第20:加载Web图片
- docker images 命令详解
- 麦芽糖醇(CAS 585-88-6)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 程控交换原理教学,程控数字交换系统实验设备
热门文章
- 一个保险柜密码是三位数,对上其中两位就可以打开,最坏至少试多少次才能保证打开
- 书店文具店收银系统应该从哪些方面着手选择?
- linux shell 脚本 if和else代码块都被执行 | shell 批量添加、删除用户(for循环做if嵌套)
- 快手Kafka集群演进之路学习笔记
- 工业路由器的天线数量与WIFI信号和穿墙范围有什么关系?
- vbs脚本功能:1、判断系统位数64/32;2、读取注册表,读取应用名称。3、读取txt文件;4、执行exe文件,安装程序。
- 010. 谈一谈110%战略
- Web前端20~45
- TrackPopupMenu SetCheck(1)无效? 点击其他地方快捷菜单不消失?
- DeviceIOControl与驱动层 - 缓冲区模式