跳到主要内容

AI 辅助适配 Sensor 驱动

本 SDK 提供了 AI 辅助 Sensor 驱动适配 Skills,能够自动化完成从数据手册到驱动代码的完整生成过程。该工作流基于大型语言模型和专门的 Agent 系统,将传统需要数天的驱动适配工作压缩到分钟级别。

处理流程

Input Materials            AI Processing Pipeline                 Output
┌──────────────┐ ┌────────────────────────┐ ┌─────────────────┐
│ Datasheet │───┐ │ • Environment Init │ │ │
│ (PDF) │ ├───> │ • Dual-Source Parsing │──────> │ Linux V4L2 │
│ │ │ │ • Parameter Fusion │ │ Driver Source │
│ Register │───┘ │ • Interactive Confirm │ │ (.c file) │
│ Config (.ini)│ │ • Driver Generation │ │ │
└──────────────┘ │ • Multi-Level Validate │ └─────────────────┘
│ • SDK Integration │ ↓ Optional
└────────────────────────┘ ┌──────────────────┐
│ • ISP Check │
│ • Compile │
│ • Push to Device │
│ • Functional Test│
│ • Diagnosis │
└──────────────────┘

核心处理能力

智能文档解析:Agent 使用专门的解析子代理从 PDF 数据手册中提取 I2C 地址、Chip ID、曝光/增益寄存器等关键信息,同时从 .ini 文件读取初始化序列和时序参数。两个信息源交叉验证,确保参数准确性。

参数融合与冲突解决:当数据手册与配置文件出现参数差异时,系统会根据预设优先级(.ini > 数据手册 > 默认值)自动决策,并在遇到关键冲突时主动询问用户确认。

约束感知代码生成:基于生产级驱动模板,生成符合 Linux 内核规范的完整驱动代码。特别注重平台约束,如内核驱动严禁浮点运算、增益计算必须使用整数运算等关键规则。

分层质量保障:生成的代码需通过语法检查、占位符完整性、必需函数存在性、正确性验证等多层检查,P0 级问题会触发自动诊断修复循环。

整个流程无需人工干预,从原始文档到可编译驱动的端到端自动化。

核心优势对比

传统方式AI 辅助方式
手动阅读数据手册,逐行编写驱动自动解析数据手册,AI 生成驱动
容易出错的手动参数计算自动参数校验与修正
反复试错的调试过程前置质量验证,减少调试次数
需要深厚的驱动开发经验只需提供原始材料,AI 处理细节

快速开始

# 步骤 1: 安装 Skills
cd {SDK_PATH}
python3 skills/scripts/init.py

# 步骤 2: 准备输入文件
# - Sensor 数据手册 (PDF)
# - 寄存器配置文件 (.ini)

# 步骤 3: 执行工作流
/sensor-lightup-workflow-v6 <prompt>

系统要求与准备

必需工具

  • pdftotext 工具(用于解析 PDF 数据手册)
  • Claude Code 工具
  • 一个好用的后端大模型(GLM5.1 或 Opus4.7)
  • Tina Linux SDK 环境

输入文件

需要准备以下两个文件:

  1. Sensor 初始化配置文件(.ini 格式)

    • 示例:cleaned_0x04_SC1B4AE_MIPI_27Minput_2Lane_10bit_371.25Mbps_1280x720_25fps.ini
    • 来源:Sensor 原厂提供或通过调试工具导出
    • 内容:包含寄存器初始化序列、分辨率、帧率、MIPI 参数等
  2. Sensor 芯片数据手册(PDF 格式)

    • 示例:SC1B4AE_数据手册_V1.2.pdf
    • 来源:Sensor 厂商官方文档
    • 内容:包含寄存器定义、I2C 地址、Chip ID、电气特性等

文件列表

准备好所需工具和文件后,接下来初始化 Skill 系统。


初始化 Skill 系统

步骤 1:执行初始化脚本

在 SDK 根目录下执行:

python3 skills/scripts/init.py

步骤 2:选择平台

系统会提示选择 Agent 平台,选择 1(Claude Code)。

skill 平台选择

步骤 3:选择安装范围

建议安装到项目目录,选择 1

安装范围选择

步骤 4:验证安装

安装完成后,启动 Claude Code,输入 /skills 可以看到安装好的 Skills。

image-20260427162510779

Skill 系统初始化完成后,即可开始使用 AI 辅助编写 Sensor 驱动。下面以 SC1B4AE 传感器为例,演示完整的驱动生成流程。


AI 编写摄像头驱动

准备工作

将准备好的 Sensor 相关文件拷贝到 SDK 目录中,建议放在一个单独的目录下便于管理。

准备好的 Sensor 相关文件

执行 Skill

提示

/sensor-lightup-workflow-v6 为文档写作时的最新版本 Skill,后期可能会更新,以实际 SDK 中安装的配置为准。

执行命令:

/sensor-lightup-workflow-v6 严格按照skills流程完成SC1B4AE点亮测试 数据手册:SC1B4AE/SC1B4AE_数据手册_V1.2.pdf 寄存器配置:SC1B4AE/cleaned_0x04_SC1B4AE_MIPI_27Minput_2Lane_10bit_371.25Mbps_1280x720_25fps.ini

image-20260427162818058

按下回车,等待 AI 根据输入的文档手册创建 Sensor 驱动。

image-20260427162907717

参数确认阶段

接下来 Agent 会自行阅读数据手册和初始化序列,然后根据输入的 Sensor 文档和初始化序列,自动提取相关参数。提取完成后会询问用户参数是否正确。

询问用户参数是否正确

用户可以确认以下关键参数:

参数说明来源
Sensor 型号如 SC1B4AE文件名或 .ini 内容
Sensor ID如 0x1B4A数据手册 Chip ID 寄存器
I2C 地址如 0x30数据手册 I2C 地址配置
分辨率如 1280x720.ini 文件
帧率如 25 fps.ini 文件
MIPI Lane 数如 2 lanes.ini 文件
位宽如 10bit.ini type 字段或文件名
Bayer 顺序如 RGGB.ini 文件

如果参数不正确,可以在 "Type something" 中输入正确的值。

全部参数确认无误并点击 Submit 后,Agent 会自动进入驱动生成阶段。如有参数需要修正,请在输入框中输入正确值后再提交。

确认提交

有些时候 Agent 会多次询问,以防止选错了写出错误的驱动,保障驱动功能完整。

再次询问确认

驱动生成阶段

Agent 总结相关参数后,开始生成驱动文件。

生成驱动文件

生成的驱动代码包含:

  1. 完整的 V4L2 subdev 驱动结构
  2. Sensor 探测函数(sensor_detect)
  3. 曝光控制函数(sensor_s_exp)
  4. 增益控制函数(sensor_s_gain)
  5. 翻转控制函数(sensor_s_flip)
  6. 电源管理函数(sensor_power)
  7. 格式枚举和设置函数
  8. 初始化序列数组

写好后会自动配置 KconfigMakefile

配置环境

此时驱动即生成结束,可以执行后续相关操作。

结束

输出驱动如下:

输出驱动


可选验证流程(Phase 6-10)

驱动生成完成后,可以选择继续执行后续验证步骤,形成完整的闭环。

Phase 6: ISP 配置检查

目的:检查是否存在对应的 ISP 配置文件,ISP 配置是图像质量调优的关键。

ISP 配置路径

{SDK_PATH}/platform/allwinner/vision/libAWIspApi/isp_mpp/isp_v861/libisp/isp_cfg/SENSOR_H/{SENSOR_MODEL}/

配置文件命名规则

{SENSOR_MODEL}_{WIDTH}_{HEIGHT}_{FPS}_0_0.ini

例如:sc1b4ae_mipi_1280_720_25_0_0.ini

如果 ISP 配置缺失,测试时会报 isp0 event select timeout 错误,但驱动加载仍可正常进行。

Phase 7: 编译驱动

目的:编译生成 .ko 文件,验证驱动代码的正确性。

编译命令

cd {SDK_PATH}
source build/envsetup.sh
lunch # 选择对应的板级配置
mkernel -j$(nproc) # 编译内核及驱动模块

生成的 .ko 文件位置

out/kernel/build/bsp/drivers/vin/modules/sensor/{sensor_model}_mipi.ko

Phase 8: 推送到设备

目的:将编译好的驱动模块推送到目标设备并加载。

V861 模块加载顺序

videobuf2-* → vin_io → actuator → sensor → vin_v4l2

Phase 9: 测试验证

目的:在设备上运行 sample_virvi 测试程序,验证驱动功能。

测试步骤

  1. 推送 sample_virvi 和配置文件到设备
  2. 修改配置文件中的分辨率、帧率等参数
  3. 执行测试程序
adb shell "cd /tmp && ./sample_virvi -path /tmp/sample_virvi.conf"

成功标志

  • sample_virvi 正常退出
  • 捕获到视频帧(frames_captured > 0)
  • 无 ISP timeout 错误

例如下图 GC4053 正常出图

image-20260427173354508

以上介绍了正常情况下的完整流程。在实际操作中可能会遇到各种问题,以下是常见异常情况及处理方法。

Phase 10: 问题诊断

如果测试失败,Agent 会分析测试日志,识别问题类型并提供修复建议。

常见问题诊断表

错误特征问题类型原因解决方案
isp0 event select timeoutISP timeoutISP 配置缺失创建 ISP 配置文件
chip found is not an target chipSensor ID 错误驱动 ID 与实际不符检查数据手册 Chip ID
Unknown symbol模块依赖错误加载顺序错误检查 V861/V821 加载顺序
MIPI timeoutMIPI 连接问题硬件连接或 MIPI 参数检查 MIPI 线缆/参数
no image图像问题曝光/增益参数检查初始化序列

异常处理机制

输入材料缺失

错误: 缺少必需的输入材料
处理:
1. .ini 文件缺失 → 终止流程,提示用户提供
2. 数据手册缺失 → 终止流程,提示用户提供
3. 硬件连接信息缺失 → 使用默认值,生成警告

Agent 执行失败

错误: Agent Tool 返回 status: "failed"
处理:
1. 检查 error 字段了解失败原因
2. 根据错误类型决定:
- 文件读取失败 → 确认路径正确后重试
- 解析失败 → 提示用户提供更完整的材料
- 生成失败 → 返回对应 Phase 重新执行

关键数据缺失

错误: Sensor ID / I2C 地址 / 曝光寄存器 / 增益寄存器 缺失
处理:
1. 终止代码生成流程
2. 返回 Phase 2 让用户确认并提供正确信息
3. 提供可能的原因和建议

验证失败

错误: Phase 4 验证检查未通过
处理:
1. P0 问题 → 调用 troubleshooter Agent 诊断
2. P1 问题 → 记录警告,继续生成
3. 根据诊断结果修复后重新执行 Phase 3/4