整理中 创建 2026/06/06 更新 2026/06/06

本文档记录了在MTK平台上配置GC08A3前置摄像头驱动的完整流程,包括vendor修改、device配置和kernel修改。

#mtk #camera #local_cflags #define #if #else #endif

[MTK]前置摄像头

MTK 前置摄像头 GC08A3 驱动配置流程

📋 概述

本文档记录了在MTK平台上配置GC08A3前置摄像头驱动的完整流程,包括vendor修改、device配置和kernel修改。


🔧 Vendor 修改

摄像头驱动路径

需要修改以下三个摄像头驱动路径:

  • Z:\mt8391_a\mt8391_u\vendor\mediatek\proprietary\custom\common\hal\imgsensor_metadata\sensor
  • Z:\mt8391_a\mt8391_u\vendor\mediatek\proprietary\custom\mt8189\hal\imgsensor\ver1
  • Z:\mt8391_a\mt8391_u\vendor\mediatek\proprietary\custom\mt8189\hal\imgsensor_metadata

Sensor 元数据配置

路径: mediatek/proprietary/custom/common/hal/imgsensor_metadata/sensor/gc08a3_mipi_raw/

+#if defined(GC08A3_MIPI_RAW)
+    RAW_INFO_M(GC08A3_SENSOR_ID, DEFAULT_MODULE_INDEX, DEFAULT_MODULE_ID, SENSOR_DRVNAME_GC08A3_MIPI_RAW, CAM_CALGetCalData),
+#endif
> **注意**: 前置摄像头不需要加入马达驱动

Android.mk 配置

路径: mediatek/proprietary/hardware/mtkcam3/main/hal/device/3.x/device/``[Android.mk](http://Android.mk)

 += -DSUPPORT_ASYNC_CLOSING

MTK Camera 变量配置

路径: mediatek/proprietary/scripts/soong/mtkcam/mtkcamvars.go

Tuning 模块添加

"s5k4e6_mipi_raw_tuning",
"s5kgd1sp_mipi_raw_tuning",
"s5kjd1_mipi_raw_tuning",
-                               "ov16880_mipi_raw_tuning",
-                               "ov8856_mipi_raw_tuning",
+               "ov16880_mipi_raw_tuning",
+               "ov8856_mipi_raw_tuning",
+        "gc08a3_mipi_raw_tuning",
#### GC08A3 完整模块列表添加
+        "gc08a3_mipi_raw_IdxMgr",
+        "libCamera_gc08a3mipiraw_E2EHDR_Preview",
+        "libCamera_gc08a3mipiraw_E2EHDR_Video",
+        "libCamera_gc08a3mipiraw_Face_Capture",
+        "libCamera_gc08a3mipiraw_Flash_Capture",
+        "libCamera_gc08a3mipiraw_HDR_Capture",
+        "libCamera_gc08a3mipiraw_HDR_Preview",
+        "libCamera_gc08a3mipiraw_HDR_Reconfig_Preview",
+        "libCamera_gc08a3mipiraw_HDR_Reconfig_Video",
+        "libCamera_gc08a3mipiraw_HDR_Video",
+        "libCamera_gc08a3mipiraw_N3D_Capture",
+        "libCamera_gc08a3mipiraw_N3D_Preview",
+        "libCamera_gc08a3mipiraw_N3D_Video",
+        "libCamera_gc08a3mipiraw_P1_YUV",
+        "libCamera_gc08a3mipiraw_Scene_Capture",
+        "libCamera_gc08a3mipiraw_Scene_Capture_4cell",
+        "libCamera_gc08a3mipiraw_Scene_Preview",
+        "libCamera_gc08a3mipiraw_Scene_Preview_4k",
+        "libCamera_gc08a3mipiraw_Scene_Preview_ZSD_Flash",
+        "libCamera_gc08a3mipiraw_Video_1080",
+        "libCamera_gc08a3mipiraw_Video_4k",
#### ISP 映射和参数配置
// ISP 映射添加
+               "ISP_mapping_gc08a3_mipi_raw",

// ISP 参数添加
+        "ISP_param_gc08a3_mipi_raw",

// 高级功能模块添加
+        //"gc08a3_mipi_raw_tuning",
+        "libCamera_gc08a3mipiraw_Face_Capture_4cell",
+        "libCamera_gc08a3mipiraw_Face_Capture_lpnr",
+        "libCamera_gc08a3mipiraw_Flash_Capture_lpnr",
+        "libCamera_gc08a3mipiraw_HDR_Capture_lpnr",
+        "libCamera_gc08a3mipiraw_N3D_Capture_lpnr",
+        "libCamera_gc08a3mipiraw_Scene_Capture_lpnr",
+        "libCamera_gc08a3mipiraw_Zoom_Capture",
---

🔌 Device 配置

CameraConfig.mk 配置

路径: mediatek/mt8189/``[CameraConfig.mk](http://CameraConfig.mk)

-CUSTOM_HAL_IMGSENSOR = ov16880_mipi_raw ov8856_mipi_raw s5k3m5sx_mipi_raw
+CUSTOM_HAL_IMGSENSOR = ov16880_mipi_raw ov8856_mipi_raw s5k3m5sx_mipi_raw gc08a3_mipi_raw
 CUSTOM_HAL_MAIN2_IMGSENSOR =
 CUSTOM_HAL_MAIN_IMGSENSOR = ov16880_mipi_raw s5k3m5sx_mipi_raw
 CUSTOM_HAL_SENSORS = sensor
-CUSTOM_HAL_SUB_IMGSENSOR = ov8856_mipi_raw
+CUSTOM_HAL_SUB_IMGSENSOR = ov8856_mipi_raw gc08a3_mipi_raw
 CUSTOM_KERNEL_CAMERA = camera
-CUSTOM_KERNEL_IMGSENSOR = ov16880_mipi_raw ov8856_mipi_raw s5k3m5sx_mipi_raw
+CUSTOM_KERNEL_IMGSENSOR = ov16880_mipi_raw ov8856_mipi_raw s5k3m5sx_mipi_raw gc08a3_mipi_raw
 CUSTOM_KERNEL_MAIN2_IMGSENSOR =
 CUSTOM_KERNEL_MAIN_IMGSENSOR = ov16880_mipi_raw s5k3m5sx_mipi_raw
-CUSTOM_KERNEL_SUB_IMGSENSOR = ov8856_mipi_raw
+CUSTOM_KERNEL_SUB_IMGSENSOR = ov8856_mipi_raw gc08a3_mipi_raw

device-camera.mk 配置

路径: mediatek/mt8189/``[device-camera.mk](http://device-camera.mk)

-CUSTOM_HAL_IMGSENSOR = ov16880_mipi_raw ov8856_mipi_raw s5k3m5sx_mipi_raw
+CUSTOM_HAL_IMGSENSOR = ov16880_mipi_raw ov8856_mipi_raw s5k3m5sx_mipi_raw gc08a3_mipi_raw

Kernel Headers 配置

路径: mediatek/vendor/camera/kernel-headers/kd_imgsensor.h

+#define GC08A3_SENSOR_ID                         0x08a3

ProjectConfig.mk 配置

路径: mediateksample/aiot8391p3_64_bsp/``[ProjectConfig.mk](http://ProjectConfig.mk)

```text
-CUSTOM_KERNEL_IMGSENSOR = ov16880_mipi_raw ov8856_mipi_raw s5k3m5sx_mipi_raw
+CUSTOM_KERNEL_IMGSENSOR = ov16880_mipi_raw ov8856_mipi_raw s5k3m5sx_mipi_raw gc08a3_mipi_raw
---

## 🐧 Kernel 修改
#### 驱动文件路径
kernel_device_modules-6.1/drivers/misc/mediatek/imgsensor/src/common/v1_1/gc08a3_mipi_raw/

#### ⚠️ 前置摄像头 I2C 通信问题解决
## 问题现象
[15:03:45:165][  122.513673][ T4317] NOTICE: I2C write failed (-6)! speed(100) (0x3)
[15:03:45:165][  122.515182][ T4317] NOTICE: I2C write failed (-6)! speed(100) (0x4)
**解决方案**: 修改I2C写入方式,将批量写入改为单次写入

在驱动的 `.h` 文件中设置:
 MULTI_WRITE  0
修改 `table_write_cmos_sensor` 函数:
static void table_write_cmos_sensor(kal_uint16 *para, kal_uint32 len)
{
    char puSendCmd[I2C_BUFFER_LEN];
    kal_uint32 tosend = 0, idx = 0;
    kal_uint16 addr = 0, data = 0;

    while (len > idx) {
        addr = para[idx];
        puSendCmd[tosend++] = (char)((addr >> 8) & 0xff);
        puSendCmd[tosend++] = (char)(addr & 0xff);
        data = para[idx + 1];
        puSendCmd[tosend++] = (char)(data & 0xff);
        idx += 2;
 MULTI_WRITE
        if (tosend >= I2C_BUFFER_LEN || idx == len) {
            iBurstWriteReg_multi(puSendCmd, tosend, imgsensor.i2c_write_id,
                    3, imgsensor_info.i2c_speed);
            tosend = 0;
        }

        iWriteRegI2CTiming(puSendCmd, 3, imgsensor.i2c_write_id, imgsensor_info.i2c_speed);
        tosend = 0;
        udelay(100);    //加入延时

    }
}
## DTS 配置
**路径**: `kernel_device_modules-6.1/arch/arm64/boot/dts/mediatek/cust_mt8189_p1_camera.dtsi`
cam1-pin-vcamio = "regulator";

cam0_enable_sensor = "ov16880_mipi_raw s5k3m5sx_mipi_raw";
-       cam1_enable_sensor = "ov8856_mipi_raw";
+       cam1_enable_sensor = "ov8856_mipi_raw gc08a3_mipi_raw";
## Defconfig 配置
**路径**: `kernel_device_modules-6.1/arch/arm64/configs/mgk_64_k61_defconfig`
-CONFIG_CUSTOM_KERNEL_IMGSENSOR="s5k3m5sx_mipi_raw ov16880_mipi_raw ov8856_mipi_raw"
+CONFIG_CUSTOM_KERNEL_IMGSENSOR="s5k3m5sx_mipi_raw ov16880_mipi_raw ov8856_mipi_raw gc08a3_mipi_raw"
## Sensor 头文件配置
**路径**: `kernel_device_modules-6.1/drivers/misc/mediatek/imgsensor/inc/kd_imgsensor.h`
+#define GC08A3_SENSOR_ID                        0x08a3
+#define SENSOR_DRVNAME_GC08A3_MIPI_RAW          "gc08a3_mipi_raw"
## 电源序列配置
**路径**: `kernel_device_modules-6.1/drivers/misc/mediatek/imgsensor/src/common/v1_1/imgsensor_pwr_seq.c`
+#if defined(GC08A3_MIPI_RAW)
      {
              SENSOR_DRVNAME_GC08A3_MIPI_RAW,
              {
                      {SensorMCLK, Vol_High, 0},
                      {PDN, Vol_Low, 0},
                      {RST, Vol_Low, 0},
                      {DOVDD, Vol_1800, 5},
                      {DVDD, Vol_1200, 5},
                      {AVDD, Vol_2800, 5},
                      {AFVDD, Vol_2800, 5},
                      {PDN, Vol_High, 5},
                      {RST, Vol_High, 5}
              },
      },
+#endif
## Sensor 列表配置
**路径**: `kernel_device_modules-6.1/drivers/misc/mediatek/imgsensor/src/common/v1_1/imgsensor_sensor_list.c`
+#if defined(GC08A3_MIPI_RAW)
+{GC08A3_SENSOR_ID, SENSOR_DRVNAME_GC08A3_MIPI_RAW,GC08A3_MIPI_RAW_SensorInit},
+#endif
## Sensor 列表头文件
**路径**: `kernel_device_modules-6.1/drivers/misc/mediatek/imgsensor/src/common/v1_1/imgsensor_sensor_list.h`
+UINT32 GC08A3_MIPI_RAW_SensorInit(struct SENSOR_FUNCTION_STRUCT **pfFunc);
---
## 🔍 调试注意事项
> **⚠️ 重要提醒**: 记得恢复debug模式!
**调试路径**: `Z:\mt8391_a\mt8391_u\kernel\kernel_device_modules-6.1\drivers\misc\mediatek\imgsensor\src\common\v1_1\`imgsensor_common.h

图片附件
---

## ✅ 配置完成检查清单
- [ ] Vendor 路径下的sensor元数据配置完成
- [ ] MTK Camera变量配置完成
- [ ] [Device层CameraConfig.mk](http://Device层CameraConfig.mk)配置完成
- [ ] Kernel DTS配置完成
- [ ] Kernel defconfig配置完成
- [ ] I2C通信问题已修复(MULTI_WRITE = 0)
- [ ] 电源序列配置完成
- [ ] 调试模式恢复完成
**配置完成后,GC08A3前置摄像头应该可以正常工作!** 🎉
```text