> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 摄像头故障排查

使用以下命令之一收集摄像头日志：

```text theme={null}
# cat /var/log/messages > log.txt
```

或：

```text theme={null}
# journalctl -f > log.txt
```

此命令会同时收集 KMD 和 UMD 日志。要仅收集 KMD 日志，请使用以下命令：

```text theme={null}
# dmesg -w > dmesg.txt
```

## **捕获用户模式日志**

摄像头软件中提供了多种日志级别。开发者可以根据需要启用这些日志级别，以高效调试问题。

日志级别通过以下覆盖设置进行控制。

| **说明**    | **覆盖设置**         | **默认值**    |
| :-------- | :--------------- | :--------- |
| 详细日志掩码    | logVerboseMask   | 0          |
| 进入/退出日志掩码 | logEntryExitMask | 0          |
| 信息日志掩码    | logInfoMask      | 0xFFFFFFFF |
| 警告日志掩码    | logWarningMask   | 0xFFFFFFFF |
| 系统日志启用    | systemLogEnable  | TRUE       |

要启用日志记录：

1. 首次使用时，创建一个名为 `camxoverridesettings.txt` 的文本文件。
2. 将所需的日志掩码添加到此文本文件中。例如，LogVerboseMask=0XFF11 和 LogInfoMask=0x1C09811。
3. 将修改后的文件推送到 `/var/cache/camera/camxoverridesettings.txt.`。更改覆盖设置后可能需要重启设备。

**示例 1**

受控的调试日志消息决定了摄像头系统的哪些组在每个日志级别输出日志。要启用详细日志和进入或退出日志设置，请将以下内容添加到 `/var/cache/camera/camxoverridesettings.txt` 文件中：

```text theme={null}
logVerboseMask=0xFFFFFFFF
logEntryExitMask=0xFFFFFFFF
```

**示例 2**

要仅为 HAL CSL 组启用详细日志，请启用来自传感器、HAL 和 CSL 的警告并禁用系统日志：

```text theme={null}
logVerboseMask=0x00000480
logWarningMask=0x482
```

### **摄像头 UMD 日志**

摄像头驱动实现了调试日志消息。可以根据用户的关注点（详细级别和组）过滤日志消息以限制显示的内容。每条日志来自指定的组，并具有从 verbose 到 error 的详细级别。所有摄像头调试日志都遵循相同的格式：

```text theme={null}
CamX: [<Verbosity Level>][<Group>] <File>:<Line Number> <Function Name> <Message>
```

例如：

```text theme={null}
CamX: [INFO][CORE] camxexamplefile:123 ExampleFunction()This is the message.
```

驱动支持以下详细级别，以便在调试摄像头应用时深入了解问题。

| Error         | 致命和非致命错误。出现错误后无法保证操作能够继续成功进行。            |
| :------------ | :--------------------------------------- |
| Warning       | 意料之外但不一定是错误的非致命状况。用于指示诸如性能较慢的路径、回退代码等问题。 |
| Entry or exit | 进入或退出 API 跟踪。允许简单的高层调用流日志记录。             |
| Info          | 信息性日志、简短的一次性配置等。                         |
| Verbose       | 所有其他日志。不一定为调试目的提供任何有用信息。                 |

### **摄像头用户模式日志组**

驱动被划分为称为组的各种逻辑组件。使用特定的组，您可以减少日志消息数量，只获取您感兴趣的组件的信息。这是通过位掩码来实现的，可选择性地启用来自摄像头系统不同组件的日志。

下表列出了 UMD 日志组。

| **驱动组名称**             | **值**      | **说明**               |
| :-------------------- | :--------- | :------------------- |
| CamxLogGroupAFD       | (1\<\< 0)  | AFD                  |
| CamxLogGroupSensor    | (1\<\< 1)  | 传感器                  |
| CamxLogGroupTracker   | (1\<\< 2)  | 跟踪器                  |
| CamxLogGroupISP       | (1\<\< 3)  | ISP                  |
| CamxLogGroupPProc     | (1\<\< 4)  | 后处理器                 |
| CamxLogGroupMemMgr    | (1 \<\< 5) | MemMgr               |
| CamxLogGroupPower     | (1 \<\< 6) | 电源（时钟、带宽相关）          |
| CamxLogGroupHAL       | (1\<\< 7)  | HAL                  |
| CamxLogGroupJPEG      | (1\<\< 8)  | JPEG                 |
| CamxLogGroupStats     | (1\<\< 9)  | 3A 算法                |
| CamxLogGroupCSL       | (1\<\< 10) | 摄像头服务层               |
| CamxLogGroupApp       | (1\<\< 11) | 应用程序                 |
| CamxLogGroupUtils     | (1\<\< 12) | 实用工具                 |
| CamxLogGroupSync      | (1\<\< 13) | 同步/互斥锁/栅栏            |
| CamxLogGroupMemSpy    | (1\<\< 14) | MemSpy               |
| CamxLogGroupFormat    | (1\<\< 15) | 格式                   |
| CamxLogGroupCore      | (1\<\< 16) | 核心摄像头系统              |
| CamxLogGroupHWL       | (1\<\< 17) | 硬件层                  |
| CamxLogGroupChi       | (1\<\< 18) | CameraHALinterface   |
| CamxLogGroupDRQ       | (1\<\< 19) | 延迟请求队列               |
| CamxLogGroupFD        | (1\<\< 20) | 人脸检测                 |
| CamxLogGroupIQMod     | (1\<\< 21) | IQ 模块                |
| CamxLogGroupLRME      | (1\<\< 22) | LRME                 |
| CamxLogGroupCVP       | (1\<\< 22) | CVP                  |
| CamxLogGroupNCS       | (1\<\< 23) | NCS                  |
| CamxLogGroupMeta      | (1\<\< 24) | 元数据                  |
| CamxLogGroupAEC       | (1\<\< 25) | AEC                  |
| CamxLogGroupAWB       | (1\<\< 26) | AWB                  |
| CamxLogGroupAF        | (1\<\< 27) | AF                   |
| CamxLogGroupSWP       | (1\<\< 28) | 软件处理                 |
| CamxLogGroupHist      | (1\<\< 29) | 直方图处理                |
| CamxLogGroupBPS       | (1\<\< 30) | BPS                  |
| CamxLogGroupDebugData | (1\<\< 31) | 调试数据框架、3A 调试数据和调优元数据 |

## **捕获内核模式日志**

KMD 日志消息默认启用，并显示在内核日志中。摄像头 KMD 日志均以 CAM 前缀开头。KMD 中还提供其他调试日志，通过组进行控制。

下表列出了 KMD 日志组。

| **KMD 组**       | **值**       | **说明**              |
| :-------------- | :---------- | :------------------ |
| CAM\_CDM        | (1\<\< 0)   | 摄像头数据搬运器            |
| CAM\_CORE       | (1\<\< 1)   | 摄像头核心               |
| CAM\_CPAS       | (1\<\< 2)   | 摄像头外设和支持            |
| CAM\_ISP        | (1\<\< 3)   | 图像信号处理器             |
| CAM\_CRM        | (1\<\< 4)   | 摄像头请求管理器            |
| CAM\_SENSOR     | (1\<\< 5)   | 传感器                 |
| CAM\_SMMU       | (1\<\< 6)   | 共享内存管理单元            |
| CAM\_SYNC       | (1\<\< 7)   | 同步                  |
| CAM\_ICP        | (1\<\< 8)   | 图像控制处理器             |
| CAM\_JPEG       | (1\<\< 9)   | JPEG                |
| CAM\_FD         | (1\<\< 10)  | 人脸检测                |
| CAM\_LRME       | (1\<\< 11)  | 低分辨率运动估计            |
| CAM\_FLASH      | (1\<\< 12)  | 闪光灯                 |
| CAM\_ACTUATOR   | (1\<\< 13)  | 执行器                 |
| CAM\_CCI        | (1\<\< 14)  | 摄像头控制接口             |
| CAM\_CSIPHY     | (1\<\< 15)  | 摄像头串行接口             |
| CAM\_EEPROM     | (1\<\< 16)  | 电可擦可编程只读存储器         |
| CAM\_UTIL       | (1\<\< 17)  | 实用工具                |
| CAM\_HFI        | (1\<\< 18)  | 主机-固件接口             |
| CAM\_CTXT       | (1\<\< 19)  | 摄像头上下文              |
| CAMX\_OIS       | (1\<\< 20)  | 光学防抖                |
| CAM\_RES        | (1\<\< 21)  | 摄像头共享资源 API         |
| CAM\_MEM        | (1\<\< 22)  | 用于摄像头内存管理器          |
| CAM\_IRQ\_CTRL  | (1\<\< 23)  | 用于 IRQ 控制器中的事件      |
| CAM\_REQ        | (1\<\< 24)  | 跟踪提交到 KMD 的请求       |
| CAM\_PERF       | (1\<\< 25)  | 用于性能（时钟、带宽等）日志      |
| CAM\_CUSTOM     | (1 \<\< 26) | 用于自定义硬件节点           |
| CAM\_PRESIL     | (1\<\<27)   | Presil 更改           |
| CAM\_OPE        | (1\<\<28)   | 离线处理引擎              |
| CAM\_IO\_ACCESS | (1\<\<29)   | 摄像头 I/O 访问（寄存器读/写等） |
| CAM\_SFE        | (1\<\<30)   | 流式前端                |
| CAM\_IR\_LED    | (1\<\<31)   | 红外 LED              |

### **启用摄像头内核模式驱动日志**

1. 要在 KMD 中启用 CAM\_SENSOR 和 CAM\_ICP 调试日志，请在 SSH shell 中运行以下命令：

> * QCS6490
>   > ```text theme={null}
>   > # echo 0x120 > /sys/module/camera_qcm6490/parameters/debug_mdl
>   > # cat /var/log/kern.log > name_of_kmd_logs.txt
>   > ```
> * IQ-9075-EVK/IQ-8275-EVK
>   > ```text theme={null}
>   > # echo 0x120 > /sys/module/camera_qcs9100/parameters/debug_mdl
>   > # cat /var/log/kern.log > name_of_kmd_logs.txt
>   > ```
> * QCS615
>   > ```text theme={null}
>   > # echo 0x120 > /sys/module/camera_qcs615/parameters/debug_mdl
>   > # cat /var/log/kern.log > name_of_kmd_logs.txt
>   > ```

2. 要动态启用 CSID IRQ 日志，请将适当的掩码值与以下命令配合使用。
   * QCS6490
     > ```text theme={null}
     > # mount -t debugfs none /sys/kernel/debug/
     > # echo MASKVALUE > /sys/kernel/debug/camera_ife/ife_csid_debug
     > ```
   * IQ-9075-EVK/IQ-8275-EVK/QCS615
     > ```text theme={null}
     > # mount -t debugfs none /sys/kernel/debug/
     > # echo MASKVALUE > /sys/kernel/debug/camera/ife/ife_csid_debug
     > ```
   下表列出了 CSID 调试组。
   |               **CSID 调试组**               |   **值**   |   **说明**   |
   | :--------------------------------------: | :-------: | :--------: |
   |       CSID\_DEBUG\_ENABLE\_SOF\_IRQ      | (1\<\< 0) |     帧起始    |
   |       CSID\_DEBUG\_ENABLE\_EOF\_IRQ      | (1\<\< 1) |     帧结束    |
   |       CSID\_DEBUG\_ENABLE\_SOT\_IRQ      | (1\<\< 2) |    传输起始    |
   |       CSID\_DEBUG\_ENABLE\_EOT\_IRQ      | (1\<\< 3) |    传输结束    |
   | CSID\_DEBUG\_ENABLE\_SHORT\_PKT\_CAPTURE | (1\<\< 4) |   短数据包捕获   |
   |  CSID\_DEBUG\_ENABLE\_LONG\_PKT\_CAPTURE | (1\<\< 5) |   长数据包捕获   |
   |  CSID\_DEBUG\_ENABLE\_CPHY\_PKT\_CAPTURE | (1\<\< 6) | CPHY 数据包捕获 |
   |                    例如：                   |           |            |
   > * 要启用 SOF、EOF、SOT 和 EOT IRQ：
   >   > ```text theme={null}
   >   > # echo 0xf > /sys/kernel/debug/camera/ife/ife_csid_debug
   >   > ```
   > * 要仅设置短数据包和长数据包捕获 IRQ：
   >   > ```text theme={null}
   >   > # echo 0x30 > /sys/kernel/debug/camera/ife/ife_csid_debug
   >   > ```
   信息会记录到 kmsg 中，可使用以下命令获取：
   > ```text theme={null}
   > # cat /var/log/kern.log > name_of_kmd_logs.txt
   > ```
   捕获的日志可以帮助提供有关 SOF 和 EOF 的详细信息，并指示哪个传感器正在出流。以下是一个示例日志：
   > ```text theme={null}
   > CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5288 CSID:1 IPP SOF received
   > CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5300 CSID:1 IPP EOF received
   > CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5288 CSID:1 IPP SOF received
   > CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5300 CSID:1 IPP EOF received
   > CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5288 CSID:1 IPP SOF received
   > CAM_INFO: CAM-ISP: cam_ife_csid_irq: 5300 CSID:1 IPP EOF received
   > ```

### **启用 CSIPHY 日志转储**

要启用 CSIPHY 日志转储：

1. 使用以下命令从 CSIPHY 获取日志转储：

> ```text theme={null}
> # echo 1 > /sys/module/camera_<chipset_name>/parameters/csiphy_dump
> ```
>
> 信息会记录到 kmsg 中。

2. 使用以下命令获取日志转储文件：

> ```text theme={null}
> # cat /proc/kmsg > name_of_kmd_logs.txt
> ```

**注意**

在这些日志中，`<chipset name>` 对应如下：

> * `qcm6490` - RB3gen2
> * `qcs9100` - IQ-9075-EVK/IQ-8275-EVK
> * `qcs615` - IQ-615-EVK

### **启用 CSID SOF/EOF IRQ 日志**

要启用 CSID SOF/EOF IRQ 日志，请运行以下命令获取跟踪日志：

```text theme={null}
# mount -t debugfs none /sys/kernel/debug/
# echo 0x8 > /sys/module/camera_<chipset_name>/parameters/debug_mdl
# echo 3 >/sys/kernel/debug/camera/ife/ife_csid_debug
```

**注意**

在这些日志中，`<chipset name>` 对应如下：

> * `qcm6490` - RB3gen2
> * `qcs9100` - IQ-9075-EVK/IQ-8275-EVK
> * `qcs615` - IQ-615-EVK

### **收集 CPAS 日志**

要在摄像头日志中收集时钟投票信息：

1. 使用 `camxoverridesettings.txt` 为核心、HAL、IFE 和电源运行以下命令：

> ```text theme={null}
> # echo "logInfoMask=0x500C8" >> /var/cache/camera/camxoverridesettings.txt
> ```

2. 重启后，启用 KMD 的 CAM\_CPAS|CAM\_PERF|CAM\_REQ 掩码：

> ```text theme={null}
> # echo 0x3000004 > /sys/module/camera_<chipset_name>/parameters/debug_mdl
> # echo 0x1 > /sys/module/camera_<chipset_name>/parameters/cpas_dump
> ```

3. 收集日志并运行用例：

> ```text theme={null}
> # cat /var/log/messages > log.txt
> # cat /proc/kmsg > kmesg. txt
> ```

**注意**

在这些日志中，`<chipset name>` 对应如下：

> * `qcm6490` - RB3gen2
> * `qcs9100` - IQ-9075-EVK/IQ-8275-EVK
> * `qcs615` - IQ-615-EVK

### **启用内核运行时日志掩码**

运行以下命令启用 CRM 日志：

```text theme={null}
# echo 0x10 > /sys/module/camera_<chipset_name>/parameters/debug_mdl
```

例如，要启用 CRM、ISP 和 CPAS 日志：

```text theme={null}
# echo 0x1C > /sys/module/camera_<chipset_name>/parameters/debug_mdl
```

**注意**

在这些日志中，`<chipset name>` 对应如下：

> * `qcm6490` - RB3gen2
> * `qcs9100` - IQ-9075-EVK/IQ-8275-EVK
> * `qcs615` - IQ-615-EVK

无需重启设备。如果您重启了设备，请在打开摄像头应用之前再次运行此命令。

以下列表提供了每个驱动的调试位掩码。

```text theme={null}
CAM_CDM (1 << 0)
CAM_CORE (1 << 1)
CAM_CPAS (1 << 2)
CAM_ISP (1 << 3)
CAM_CRM (1 << 4)
CAM_SENSOR (1 << 5)
CAM_SMMU (1 << 6)
CAM_SYNC (1 << 7)
CAM_ICP (1 << 8)
CAM_JPEG (1 << 9)
CAM_FD (1 << 10)
CAM_LRME (1 << 11)
CAM_FLASH (1 << 12)
CAM_ACTUATOR (1 << 13)
```
