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 环境
输入文件
需要准备以下两个文件:
-
Sensor 初始化配置文件(.ini 格式)
- 示例:
cleaned_0x04_SC1B4AE_MIPI_27Minput_2Lane_10bit_371.25Mbps_1280x720_25fps.ini - 来源:Sensor 原厂提供或通过调试工具导出
- 内容:包含寄存器初始化序列、分辨率、帧率、MIPI 参数等
- 示例:
-
Sensor 芯片数据手册(PDF 格式)
- 示例:
SC1B4AE_数据手册_V1.2.pdf - 来源:Sensor 厂商官方文档
- 内容:包含寄存器定义、I2C 地址、Chip ID、电气特性等
- 示例:
准备好所需工具和文件后,接下来初始化 Skill 系统。
初始化 Skill 系统
步骤 1:执行初始化脚本
在 SDK 根目录下执行:
python3 skills/scripts/init.py
步骤 2:选择平台
系统会提示选择 Agent 平台,选择 1(Claude Code)。
步骤 3:选择安装范围
建议安装到项目目录,选择 1。

步骤 4:验证安装
安装完成后,启动 Claude Code,输入 /skills 可以看到安装好的 Skills。

Skill 系统初始化完成后,即可开始使用 AI 辅助编写 Sensor 驱动。下面以 SC1B4AE 传感器为例,演示完整的驱动生成流程。
AI 编写摄像头驱动
准备工作
将准备好的 Sensor 相关文件拷贝到 SDK 目录中,建议放在一个单独的目录下便于管理。
执行 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

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

参数确认阶段
接下来 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 总结相关参数后,开始生成驱动文件。

生成的驱动代码包含:
- 完整的 V4L2 subdev 驱动结构
- Sensor 探测函数(sensor_detect)
- 曝光控制函数(sensor_s_exp)
- 增益控制函数(sensor_s_gain)
- 翻转控制函数(sensor_s_flip)
- 电源管理函数(sensor_power)
- 格式枚举和设置函数
- 初始化序列数组
写好后会自动配置 Kconfig 和 Makefile。

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

输出驱动如下:

可选验证流程(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 测试程序,验证驱动功能。
测试步骤:
- 推送 sample_virvi 和配置文件到设备
- 修改配置文件中的分辨率、帧率等参数
- 执行测试程序
adb shell "cd /tmp && ./sample_virvi -path /tmp/sample_virvi.conf"
成功标志:
- sample_virvi 正常退出
- 捕获到视频帧(frames_captured > 0)
- 无 ISP timeout 错误
例如下图 GC4053 正常出图

以上介绍了正常情况下的完整流程。在实际操作中可能会遇到各种问题,以下是常见异常情况及处理方法。
Phase 10: 问题诊断
如果测试失败,Agent 会分析测试日志,识别问题类型并提供修复建议。
常见问题诊断表:
| 错误特征 | 问题类型 | 原因 | 解决方案 |
|---|---|---|---|
isp0 event select timeout | ISP timeout | ISP 配置缺失 | 创建 ISP 配置文件 |
chip found is not an target chip | Sensor ID 错误 | 驱动 ID 与实际不符 | 检查数据手册 Chip ID |
Unknown symbol | 模块依赖错误 | 加载顺序错误 | 检查 V861/V821 加载顺序 |
MIPI timeout | MIPI 连接问题 | 硬件连接或 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