Camx架构开UMD、KMD log以及dump图的方式

本文详细介绍了Android相机日志(UMDLog)的控制,包括CAMX和CHI部分的日志开启方法和相关配置,以及KMDLog在内核层面的模块日志管理。同时,讲解了如何dump图像数据,包括不同节点的选择和配置,以及dump后的处理步骤。内容适用于对Android相机系统有深入了解的技术人员。

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

1.UMD Log

在UMD log分为两部分,分别是camx这边的log和chi这边的log。对camx这边因为是核心,所以对应的模块比较多,做了模块的区分。chi这边主要是OEM这边进行客制化所以只有一个prop进行控制

CAMX log:

camx的grop:

涉及文件名:camxypes.h(后面camx被拆分成了三个文件夹,记得都找找)

 camx设计到的group有这些,只要把对应的位置1,就可以打印出来对应的log。

涉及的prop主要有一下这几种,其实就是对应的log level:

涉及文件名:camxsettings.xml(几乎所有的prop都在里面)

persist.vendor.camera.logConfigMask
persist.vendor.camera.logEntryExitMask
persist.vendor.camera.logWarningMask
persist.vendor.camera.logInfoMask
persist.vendor.camera.logVerboseMask
persist.vendor.camera.logDRQEnable(打开DRQ log,我一般直接把这个prop置为true)persist.vendor.camera.enableAsciiLogging(高通case平时需要抓离线log,就需要打开这个开关,置为true就行了)

其实还有其他的配置方案,我感觉这些平时使用已经足够了

note:离线log

我把离线log的稍微补充一下,最后log会出现在手机的 /data/vendor/camera 路径下

然后把那个文件夹导出来,用高通的工具合成一个log文件

工具路径:vendor/qcom/proprietary/chi-cdk/tools/binary_log/

命令:python merge_text_logs.py -d  xxx(文件夹名)  -o xxx(生成的log文件名)

CHI log:

因为吃没有那么多的模块所以只有一个prop控制

vendor.camera.camera.overridLogLevels

其中一共有8bit控制,可以根据需要设置对应的值 

开log的方式:

1.命令:adb shell setprop    xxxx(对应的prop)   0xxxx(16进制)

2.可以根据camxsettings.xml对应的变量名写在camxoverridesettings.txt 文件中

然后push到手机的/vendor/etc/camera 路径中

以上的操作手机都需要root权限,并且设置完成之后需要杀掉camera的进程才会生效

2.KMD Log

在KMD也分为很多的模块,我们主要通过写节点的值来进行开关log

对应节点的路径:/sys/module/camera/parameters   (手机中的路径)

 我们主要操作的结点是红框里面的两个

kernel对应的模块:

文件名:cam_debug_util.h   (在对应camera驱动目录下面搜就可以了)

 使用方法:  echo  0xxxx(16进制的数字)   > debug_mdl

在kernel也有对应的log level这些

使用方法:echo  xxx(枚举值)  > debug_type

好像还有那种单独对单个模块进行开log的方法,后面有机会我在更新

3.Dump 图像

dump图像只可以对IFE输出及以后的节点进行dump,但是有些格式(TP10)我们本地无法解析,可以找高通的帮忙解析

涉及文件名:camxsettings.xml

这里也是有对应的几个prop:但是这里控制的比较精细,可以精确到对应那个node的实例,还有对应node的port

persist.vendor.camea.autoImageDump  这是dump output 的开关
persist.vendor.camea.dumpInputatOutput  这是dump imput的开关,前提是output的需要打开,打开之后因为dump比较多,所以会很卡
persist.vendor.camea.autoInputImageDumpMask  这是dump 哪些node的prop,根据自己的需求取进行配置


persist.vendor.camea.autoImageDumpMask

persist.vendor.camea.autoImageDumpIFEoutputPortMask

 

persist.vendor.camea.autoImageDumpIFEInstanceMask

这两个就是对应的port和node 的instance id可以确认自己跑的流确认对应的pipelie来进行赋值,平时主要在dump (IFE IPE)后面还有一系列对应的node可以进行dump,需要去camxsettings.xml中确认

其实还有很多的prop可以搭配使用,我平时使用这些已经足够了,后续可以继续交流。 

 

### CAMX架构概述 CAMX架构是一种专为计算机视觉处理设计的硬件加速平台,旨在支持复杂的像信号处理(ISP)管道以及高效的机器学习推理操作。此架构特别适用于移动设备和其他资源受限环境中的实时视觉应用发[^1]。 #### 架构原理 CAMX的核心设计理念在于提供一个高度集成化的解决方案,集成了ISP(Image Signal Processor)、GPU、DSP等多种计算单元于一体。这些组件协同工作以优化性能并降低功耗: - **ISP模块**:负责执行原始传感器数据预处理任务,如去噪、白平衡校准等; - **GPU/DSP协处理器**:用于运行更高级别的特征提取算法或神经网络模型推断过程; 整个系统通过专用总线连接各个部分,并利用DMA控制器实现高效的数据传输机制,在保证低延迟的同时提高了整体吞吐率。 #### 主要特点 1. **高性能与低能耗兼顾** - 通过对不同类型的运算任务分配给最适合其特性的硬件单元,实现了卓越的能量效率。 2. **灵活性强** - 支持多种输入源格式转换及输出接口配置选项,便于适配各类应用场景需求。 3. **易于编程** - 提供丰富的API库和工具链,简化发者对底层细节的操作难度,加快产品上市时间。 4. **强大的可扩展性** - 设计之初就考虑到了未来技术发展趋势,预留了足够的升级空间以便引入新的功能特性。 ```python # 示例代码展示如何初始化CAMX ISP pipeline def initialize_camx_isp_pipeline(): camx = CamxFramework() isp_config = { 'input_format': 'RAW', 'output_resolution': (1920, 1080), 'processing_steps': ['denoise', 'demosaic'] } camx.configure(isp_config) return camx.start_processing() initialize_camx_isp_pipeline() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值