> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.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
```

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

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

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

| **说明**          | **覆盖设置**         | **默认值**    |
| :-------------- | :--------------- | :--------- |
| 详细（Verbose）日志掩码 | 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       | 所有其他日志。不一定为调试提供有用信息。                    |

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

驱动程序被划分为多个称为组（group）的逻辑组件。使用特定组可以减少日志消息数量，仅关注你想要获取信息的组件。这通过位掩码实现，可有选择地启用来自摄像头系统不同组件的日志。

下表列出了 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) | 同步/互斥锁/栅栏（fence）     |
| 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) | SW Process           |
| CamxLogGroupHist      | (1\<\< 29) | HistogramProcess     |
| 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)  | 电可擦可编程只读存储器（EEPROM） |
| 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    | IR 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` 针对 core、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)
```
