3. 联咏SDK工程结构与驱动框架

联咏(Novatek)平台的Sensor驱动开发,第一步不是写代码,而是看懂SDK的目录组织。NT9系列(如NT96670、NT9852x)的SDK通常以nvt_sdk/为根,内部按“平台代码—外设驱动—应用—构建系统”四层划分。理解这套结构,才能在正确的位置新增或修改Sensor驱动,避免把文件放错目录导致编译系统找不到。

典型目录组织如下:code/存放平台底层与HAL,code/drivers/sensor/是Sensor驱动主目录,code/isp/是ISP管线与3A算法,configs/存放板级与Sensor配置文件,Makefile与Kconfig分布在各级目录中。Sensor驱动文件命名有明确规范:通常为sensor_<厂商>_<型号>.c,例如sensor_sony_imx335.c、sensor_ov_ov5647.c。头文件同名.h,配置片段常放在configs/sensor/下,命名与驱动一致。命名规范的意义在于:构建系统通过文件名与Kconfig符号自动关联,命名不一致会导致驱动无法被选中。

联咏SDK Sensor驱动:目录组织 · 注册匹配 · 构建烧录 SDK 目录组织 nvt_sdk/ ├─ code/ │ ├─ drivers/sensor/ │ │ ├─ sensor_sony_imx335.c │ │ ├─ sensor_ov_ov5647.c │ │ └─ Kconfig / Makefile │ ├─ isp/ │ └─ hal/ ├─ configs/ │ ├─ sensor/ │ │ └─ imx335_cfg.h │ └─ board/ ├─ app/ └─ Makefile / Kconfig 驱动注册与匹配机制 sensor_driver 结构体 .name / .id / .ops 注册表 sensor_list[] 编译期静态链接 Kconfig 符号 CONFIG_SENSOR_IMX335 运行时匹配 name/id 比对 ISP 接入 sensor_ops 回调 编译与烧录流程 make menuconfig 选中 Sensor 驱动 make 生成 .o / 固件 打包固件 fw.bin / rootfs 烧录 USB / SD 关键验证点: ① 串口日志出现 "sensor imx335 probe ok" ② /dev/video0 可打开 ③ ISP 出图正常 ④ i2c 地址与配置一致(如 0x36) ⑤ 分辨率/帧率与 cfg 匹配

驱动注册的核心是sensor_driver结构体。每个Sensor驱动在文件末尾定义一个该结构体实例,包含.name(如"imx335")、.id(I2C从地址或芯片ID)、.ops(指向sensor_ops的回调集合,如init、start、stop、set_mode)。这些实例通过宏REGISTER_SENSOR_DRIVER()注册到编译期生成的sensor_list[]段中。运行时,ISP或上层应用根据配置的Sensor名称在sensor_list[]中查找匹配项,匹配成功后调用.ops->init()完成上电、I2C初始化、寄存器序列写入。若名称不匹配,日志会报sensor not found,此时应检查Kconfig是否选中、驱动文件是否加入Makefile。

Makefile与Kconfig是驱动被编译进来的两道关卡。Kconfig定义配置符号,例如:

config SENSOR_IMX335
    bool "Sony IMX335 sensor support"
    depends on I2C && ISP
    default n
    help
      Enable Sony IMX335 CMOS sensor driver.

Makefile则根据该符号决定是否编译对应目标文件:

obj-$(CONFIG_SENSOR_IMX335) += sensor_sony_imx335.o

两者必须成对出现:Kconfig提供菜单选项,Makefile执行编译动作。若只加Kconfig不加Makefile,menuconfig能选中但不会生成.o;若只加Makefile不加Kconfig,则无法通过配置开启。新增Sensor时,还需在configs/sensor/下补充该型号的初始化寄存器表与分辨率配置,通常以imx335_cfg.h形式被驱动文件#include。

编译烧录流程可概括为:make menuconfig选中目标Sensor → make编译生成内核与驱动 → 打包固件(fw.bin或rootfs)→ 通过USB或SD卡烧录到板端。烧录后上电,观察串口日志。判断驱动是否成功接入,可依次检查:日志中是否出现sensor imx335 probe ok;/dev/video0是否可打开;ISP是否正常出图;I2C地址是否与配置一致(IMX335常见0x36);分辨率与帧率是否与cfg匹配。若probe失败,优先排查I2C通信、供电时序和Kconfig/Makefile配对。

新增Sensor驱动的推荐顺序:① 在drivers/sensor/创建sensor_<厂商>_<型号>.c/.h;② 在configs/sensor/添加配置头文件;③ 在Kconfig添加符号;④ 在Makefile添加obj-$(CONFIG_...);⑤ menuconfig选中并编译;⑥ 烧录验证日志与出图。

掌握这套“目录—命名—注册—构建—烧录”的链路后,后续接入任意新Sensor都只是替换型号与寄存器序列的工作。真正容易出错的往往不是驱动逻辑本身,而是文件放错目录、Kconfig与Makefile符号不一致、或I2C地址与硬件不匹配。把这三处对齐,联咏平台的Sensor接入就能稳定复现。