如题,log开的好,问题都能搞。

Camera user mode driver (UMD)

出于调试目的,有两种方法可以覆盖相机驱动程序的默认设置

方法一: Push a configuration file to/vendor/etc/camera/camxoverridesettings.txt

例如:

adb rootadb remountadb shell "echo logInfoMask=0x2 >> /vendor/etc/camera/camxoverridesettings.txt"

方法二:安卓系统属性设置:

adb shell setprop <setting> <value>

例如:

adb shell setprop persist.vendor.camera.logInfoMask 0x2

注意:有的配置需要杀 camera 进程 或者 重启设备 才能生效

所有的camera debug log 遵循下面的格式:

CamX: [<Verbosity Level>][<Group>] <File>:<Line Number> <Function Name>

<Message>

例如:

CamX: [INFO][CORE] camxexamplefile:123 ExampleFunction()This is the message.

camera driver debug log 分割成了很多组,每组对应很多的log,使能这部分log需要设置正确的bitmask,规则如下:

Driver Group Name

Value

Description

CamxLogGroupNone

(1 << 0)

Generic default group

CamxLogGroupSensor

(1 << 1)

Sensor

CamxLogGroupIFace

(1 << 2)

IFace

CamxLogGroupISP

(1 << 3)

ISP

CamxLogGroupPProc

(1 << 4)

Post processor

CamxLogGroupHAL

(1 << 7)

HAL

CamxLogGroupJPEG

(1 << 8)

JPEG

CamxLogGroupStats

(1 << 9)

3A algorithms

CamxLogGroupCSL

(1 << 10)

Camera service layer

CamxLogGroupUtils

(1 << 12)

Utilities

CamxLogGroupSync

(1 << 13)

Synchronization/mutex/fences

CamxLogGroupMemSpy

(1 << 14)

Memory tracker

CamxLogGroupCore

(1 << 16)

Core camera system

CamxLogGroupHWL

(1 << 17)

Hardware layer

CamxLogGroupChi

(1 << 18)

Camera HAL interface

CamxLogGroupDRQ

(1 << 19)

Deferred request queue

CamxLogGroupFD

(1 << 20)

Face detection

Camera kernel mode driver (KDM) logs

备注:一般调试全开即可

adb shell "echo 0xFFFFFFFF > /sys/module/cam_debug_util/parameters/debug_mdl"

KMD Group

Value

Description

CAM_CDM

(1 << 0)

Camera data mover

CAM_CORE

(1 << 1)

Camera core

CAM_CPAS

(1 << 2)

Camera peripherals and support

CAM_ISP

(1 << 3)

Image signal processor

CAM_CRM

(1 << 4)

Camera request manager

CAM_SENSOR

(1 << 5)

Sensor

CAM_SMMU

(1 << 6)

Shared memory management unit

CAM_SYNC

(1 << 7)

Synchronization

CAM_ICP

(1 << 8)

Image control processor

CAM_JPEG

(1 << 9)

JPEG

CAM_FD

(1 << 10)

Face detection

CAM_LRME

(1 << 11)

Low resolution motion estimation

CAM_FLASH

(1 << 12)

Flash

CAM_ACTUATOR

(1 << 13)

Actuator

CAM_CCI

(1 << 14)

Camera control interface

CAM_CSIPHY

(1 << 15)

Camera serial interface

CAM_EEPROM

(1 << 16)

Electronically erasable programmable read-Only memory

CAM_UTIL

(1 << 17)

Utilities

CAM_HFI

(1 << 18)

Host-firmware interface

CAM_CTXT

(1 << 19)

Camera context

CAMX_OIS

(1 << 20)

Optical image stabilization

使能 camera kernel driver log:

例如:

使能 CAM_SENSOR 和 CAM_ICP 在KMD log中,使用命令:

adb rootadb remountadb shell “echo 0x120 > /sys/module/cam_debug_util/parameters/debug_mdl”adb shell cat /proc/kmsg > name_of_kmd_logs.txt

要动态启用CSID IRQ日志,使用命令:

adb shell “echo MASKVALUE > /sys/kernel/debug/camera_ife/ife_csid_debug”

例如:

使能 SOF, EOF, SOT, EOT IRQs:

adb shell “echo 0xf > /sys/kernel/debug/camera_ife/ife_csid_debug”

CSID Debug Group

Value

Description

CSID_DEBUG_ENABLE_SOF_IRQ

(1 << 0)

Start of frame

CSID_DEBUG_ENABLE_EOF_IRQ

(1 << 1)

End of frame

CSID_DEBUG_ENABLE_SOT_IRQ

(1 << 2)

Start of transmission

CSID_DEBUG_ENABLE_EOT_IRQ

(1 << 3)

End of transmission

CSID_DEBUG_ENABLE_SHORT_PKT_CAPTURE

(1 << 4)

Short packet capture

CSID_DEBUG_ENABLE_LONG_PKT_CAPTURE

(1 << 5)

Long packet capture

CSID_DEBUG_ENABLE_CPHY_PKT_CAPTURE

(1 << 6)

CPHY packet capture

(TODO: 有时间需整理mipi协议)

2. 使能 CSIPHY log

adb shell “echo 1 > /sys/module/cam_csiphy_core/parameters/csiphy_dump”adb shell cat /proc/kmsg > name_of_kmd_logs.txt

UseCase pipeline debug(Topology log)

UsecaseJPEGEncodeLiveSnapshot pipeline 为例:

CamX : [ INFO][CORE ] camxhaldevice.cpp:200 SelectUsecase() Topology: Selected Usecase UsecaseJPEGEncodeLiveSnapshot
CamX : [ INFO][CORE ] camxpipeline.cpp:292 CreateNodes() Topology: Creating Pipeline, numNodes 9 isRealTime 1
CamX : [ INFO][CORE ] camxpipeline.cpp:309 CreateNodes() Topology: Node:InstanceId Sensor:0 Type 0 numInputPorts 0 numOutputPorts 1
CamX : [ INFO][CORE ] camxpipeline.cpp:309 CreateNodes() Topology: Node:InstanceId IFE:0 Type 65536 numInputPorts 1 numOutputPorts 5
CamX : [ INFO][CORE ] camxpipeline.cpp:309 CreateNodes() Topology: Node:InstanceId Stats:0 Type 1 numInputPorts 2 numOutputPorts 1
CamX : [ INFO][CORE ] camxpipeline.cpp:309 CreateNodes() Topology: Node:InstanceId AutoFocus:0 Type 5 numInputPorts 1 numOutputPorts 1
CamX : [ INFO][CORE ] camxpipeline.cpp:309 CreateNodes() Topology: Node:InstanceId BPS:0 Type 65539 numInputPorts 1 numOutputPorts 1
CamX : [ INFO][CORE ] camxnode.cpp:419 InitializeSinkPortBufferProperties() Topology: IPE:0 has a sink port id 8 using format 13 dim 1920x1080
CamX : [ INFO][CORE ] camxnode.cpp:419 InitializeSinkPortBufferProperties() Topology: IPE:0 has a sink port id 9 using format 13 dim 1920x1080
CamX : [ INFO][CORE ] camxpipeline.cpp:309 CreateNodes() Topology: Node:InstanceId IPE:0 Type 65538 numInputPorts 1 numOutputPorts 2
CamX : [ INFO][CORE ] camxpipeline.cpp:309 CreateNodes() Topology: Node:InstanceId IPE:1 Type 65538 numInputPorts 1 numOutputPorts 1
CamX : [ INFO][CORE ] camxpipeline.cpp:309 CreateNodes() Topology: Node:InstanceId JPEG Encoder:0 Type 65537 numInputPorts 1 numOutputPorts 1
CamX : [ INFO][CORE ] camxnode.cpp:419 InitializeSinkPortBufferProperties() Topology: JPEG Aggregator:0 has a sink port id 1 using format 0 dim 3840x2160
CamX : [ INFO][CORE ] camxpipeline.cpp:309 CreateNodes() Topology: Node:InstanceId JPEG Aggregator:0 Type 6 numInputPorts 1 numOutputPorts 1
CamX : [ INFO][CORE ] camxpipeline.cpp:371 CreateNodes() Topology: Link: Sensor:0(outPort 0) --> (inPort 2)IFE:0 using format 0
CamX : [ INFO][CORE ] camxpipeline.cpp:371 CreateNodes() Topology: Link: IFE:0(outPort 17) --> (inPort 0)Stats:0 using format 6
CamX : [ INFO][CORE ] camxpipeline.cpp:371 CreateNodes() Topology: Link: IFE:0(outPort 21) --> (inPort 1)Stats:0 using format 6
CamX : [ INFO][CORE ] camxpipeline.cpp:371 CreateNodes() Topology: Link: IFE:0(outPort 20) --> (inPort 4)AutoFocus:0 using format 6
CamX : [ INFO][CORE ] camxpipeline.cpp:371 CreateNodes() Topology: Link: IFE:0(outPort 8) --> (inPort 0)BPS:0 using format 9
CamX : [ INFO][CORE ] camxpipeline.cpp:371 CreateNodes() Topology: Link: IFE:0(outPort 0) --> (inPort 0)IPE:0 using format 3
CamX : [ INFO][CORE ] camxpipeline.cpp:371 CreateNodes() Topology: Link: BPS:0(outPort 1) --> (inPort 0)IPE:1 using format 12
CamX : [ INFO][CORE ] camxpipeline.cpp:371 CreateNodes() Topology: Link: IPE:1(outPort 8) --> (inPort 0)JPEG Encoder:0 using format 3
CamX : [ INFO][CORE ] camxpipeline.cpp:371 CreateNodes() Topology: Link: JPEG Encoder:0(outPort 1) --> (inPort 0)JPEG Aggregator:0 using format 3

根据上述log,可以找到 chi-cdk/vendor/topology 下面的 UsecaseJPEGEncodeLiveSnapshot 参考 usecase 、pipeline 的xml

文件应该可以画出以下usecase 拓展图(没有画 inport 和 outport,可理解为每个pipeline必有进有出)

在熟练掌握 UDM KDM 及 usecase 的 debug 流程之后,解起问题称心如意。如果不是这样,那一定是你的log 没加对,自省。

高通camx debug log 控制 及 UseCase pipeline debug(四)相关推荐

  1. 高通Camx offline Log merge命令

    merge_text_logs.py in chi-cdk\tools\binary_log\merge_text_logs.py python merge_text_logs.py -o " ...

  2. 高通 Camx debug log控制

    某天,在某网站上看到一句话,"log开的好,问题都能搞". 问题能不能都搞好不知道,不过log开的好,对分析问题的确有很大的帮助. 高通camx的日志主要分2大模块,UMD (us ...

  3. 高通camx configure_streams 初始化 和 usecase 创建流程 详解(五)

    有参考: https://www.jianshu.com/p/cfb1da9d4217 思考:camera.provider中如何实现到camera hal层的跳跃 ? 之后上层是如何配置每个 str ...

  4. 高通 Camx 架构了解下(二)

    和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一.Android Hal3回顾 二.Qcom Hal3 CamX架构 三.Qcom Hal3 Camx ...

  5. ws2812/6810 RGB灯带在高通芯片上的控制

    前段时间开发ws2812驱动.网上有一些参考,但是全部是在单片机上用pwm实现,估计是考虑实时性和时间高精度要求. 而我的项目的架构中,就只有一个高通的8939,并且只有一路pwm,还被红外ir给霸占 ...

  6. 高通android 版本,骁龙888新机可连续四次更新最新 Android 版本

    原标题:骁龙888新机可连续四次更新最新 Android 版本 根据 12 月 16 日消息,高通和谷歌宣布,双方将合作增强并扩展 Project Treble,让更多搭载骁龙移动平台的终端运行最新版 ...

  7. 关于高通CAMX架构下的AE调试的总结

    我于2021年夏开始学习camera tuning,至今大半年的时间了,做了一个8M的前置摄像头的调试.有些简单的调试心得与君分享,随着学习和工作的深入,还会持续更新这篇博文.若发现描述的不对的地方, ...

  8. 高通QXDM抓log

    1.    所需要的软件 需要安装QPST和QXDM 2.    QXDM抓log (1)  USB连接到设备端 (2)  Load the QXDM Configurationfile (.dmc) ...

  9. 高通增加Adsp log( 三十)

    android audio 生产者与消费者 简介 全面接触生产者/消费者问题是在操作系统原理中,并发性原理讨论的问题 生产者/消费者问题.最近的工作偏向音频,接着上一篇文章,用生产者,消费者模型来理解 ...

最新文章

  1. 俞岳:IBM SmartCloud 的技术架构和开发实践
  2. (传送门)android studio 一直卡在Gradle:Build Running的解决办法
  3. 如何清理asp站点缓存的代码
  4. 如何通过缓存来提升系统性能
  5. 【NLP】保姆级教程:手把手带你CNN文本分类(附代码)
  6. P4103-[HEOI2014]大工程【虚树,dp】
  7. react元素显隐控制
  8. java 小数如何转换成百分数_初等数学33-百分数
  9. 8g内存够吗 rust_618已过半,这些白菜价内存你买到了吗?最便宜的8G不到120元
  10. python驱动级模拟按键大师_AB叔_C#驱动级模拟按键操作
  11. Word怎么填服务器草稿位置,Word步骤制作目录的索引符号的操作
  12. Burpsuite介绍及2022.8.2版本超详细安装教程(图文版)
  13. 使用Docker pull一些软件时,遇到某个id一直处于waiting的状态
  14. 基于微信小程序的在线商城设计(后台PHP)
  15. 在VB环境中操作三维模型的实现方法
  16. 优秀的软文标题应该怎么起才能吸引人?
  17. openwrt nas_软路由NAS浅入浅出:收藏备用,玩转软路由、NAS的40个网站
  18. 深度学习-nlp系列(2)文本分类(Bert)pytorch
  19. 博主基金定投10条铁律
  20. 清华大学计算机百度云,清华大学《工程热力学》共53讲+精品

热门文章

  1. 关于basler相机传输速度过慢/传输丢帧
  2. JavaScript数组拼接方法
  3. 开发app需要什么?
  4. java 使用poi导出excel,可控制固定前2列固定标头排版,带统计数据格式的
  5. 证书 Certificate
  6. 加拿大联邦技术移民,好多朋友咨询,其实看看英文比什么都强,翻译稿如下
  7. CVSS2.0 安全漏洞基础评分指标说明及计算公式
  8. Cvss v2 complete documentation
  9. sql server 2008 r2 产品密钥
  10. 在Service调用mapper出现空指针