相机拓展板接入第三方相机问题

您好,目前使用RDK S100,搭配亚博RDKS100相机扩展板,想要接入迈尔威视 M4-G CW iToF 深度相机,希望在 RDK 上获取相机的 RGB 和 ToF 原始数据,并进一步进行处理。

目前环境如下:

  • 系统内核:Linux 6.1.158-rt58-DR-4.0.5

  • 扩展板解串器:MAX96712

  • 当前连接接口:RX4,对应 I²C-3

  • MAX96712 的内核驱动已成功加载,I²C 设备 3-0029 已绑定驱动

  • 当前系统没有出现 /dev/video*、/dev/media* 和 /dev/v4l-subdev* 视频设备节点

  • M4-G 相机资料标注使用 MAX96717 串行器

有以下问题:

  1. RDK S100 及该扩展板是否正式支持 MAX96717 + MAX96712 这一 SerDes 组合?是否支持迈尔威视 M4-G?

  2. 是否有针对 类似M4-G第三方相机 的驱动、设备树 DTS/DTBO、SerDes 初始化配置或相机适配示例?如果有,请提供下载链接、适用版本及使用说明。

  3. RDK S100 应采用 HBN 还是 V4L2 路径接入这款相机?需要加载哪些驱动、内核模块及多媒体组件?

  4. MAX96712 驱动加载成功但没有视频设备节点,应该按什么顺序排查 GMSL 链路、VC、MIPI CSI、传感器驱动和采集框架?

  5. 如果目前没有 M4-G 的现成适配,是否有基于 MAX96712 接入第三方 GMSL2 相机的官方开发文档或参考工程?

希望先以单台相机为目标,能够稳定获取 RGB 和 ToF 原始数据。感谢!

先给结论:扩展板的 MAX96712 侧是官方 GMSL2 输入,RDK 的 HBN 驱动说明里也明确解析 MAX96717(S1)/MAX96717F(S2);但本次查到的公开适配表和文档里没有 M4-G,也没有它的专用驱动或 DTS/DTBO,因此不能按“官方已支持整机”处理。单台 bring-up 需要补 sensor + 加串器配置、DTBO 以及 VC/port 规划。以下按官方 S100 相机扩展板的 RX4/I2C-3 拓扑说明;亚博板若改过 PoC、复位或 MFP,以板厂原理图为准。

1. 是否支持 MAX96717 + MAX96712、是否支持 M4-G

硬件和框架层面不是“完全不支持”:官方相机扩展板明确 MAX96712 可接 4 路 GMSL2 相机;Camera 点亮的 HBN GMSL 部分把 S1 定义为 MAX96717、S2 定义为 MAX96717F。但官方适配模组表列的是 SG8S-AR0820C-5300-G2A、LEC28736A11、D457 等,没有 M4-G。结论是:组合可做,M4-G 未经过官方整机验证,需要自行适配。

2. 有没有 M4-G 的驱动、DTS/DTBO 或 SerDes 配置

没有公开的 M4-G 专用包。可用的官方参考是同一份 Camera 点亮文档:

  • HBN GMSL 部分:以 AR0820 为例,说明 hobot-camera/drivers/sensor、serial、deserial 的驱动结构和 emode 配置。
  • V4L2 GMSL 部分:说明 serdes_core.h、serdes_ops、sensor DT 节点和 serdes 绑定方式。
  • 深度相机部分:以 D457/335Lg 为例,给出 depth + RGB 双流的 DTBO、VC 和 data_type 配置。

源码目录和 hobot-camera 的结构可参考构建系统开发指南。版本上按你当前 4.0.5 对应的 SDK 源码分支取,文档示例本身不是 M4-G 的现成配置。

3. 走 HBN 还是 V4L2

S100 开机默认是 HBN;HBN 的采集不走 /dev/video*,所以现在没有 video/media/subdev 节点不一定是驱动失败。V4L2 GMSL 文档也明确:加串器和解串器不为 V4L2 提供 subdev,只给 sensor 驱动提供 serdes_ops;只有 MAX96712 驱动时本来就不会出现视频节点。

如果目标是先稳定拿 RGB 和 ToF 原始帧,建议先走 V4L2:它的 /dev/video* 和 v4l2-ctl 更适合先验证 raw 格式;官方 D457/335Lg 深度相机方案也是 V4L2 + DTBO。按Camsys 使用方式卸载 HBN 驱动,加载 v4l_mipicsi、v4l2_cim、hobot_isp_v4l2、vid_v4l2 等,再加载你新增的 sensor/serdes 驱动和 DTBO。HBN 也能做,但要写 sensor_module_t 的 .so,更适合后续走 ISP/3A;如果 ToF 输出的是 depth/phase 原始格式而不是 Bayer,一般应按对应 datatype 直接取流,不要套 RGB 的 ISP 流程。

4. 没有视频节点的排查顺序

  1. 先确认框架:当前是 HBN 还是 V4L2。HBN 下没有 /dev/video* 是正常的;只有切到 V4L2 并加载 sensor 驱动后,才应该出现 video/media 节点。
  2. 看 GMSL link:3-0029 绑定只证明 MAX96712 解串器 I2C 通了,不代表 link lock、加串器、sensor 或 CSI 已建立。先看 dmesg 里 MAX96712/96717 是否打印 link lock、GMSL 错误或 CSI 错误,同时核对同轴线、PoC 供电和 PWDNB。扩展板单路最大 550mA@12V,M4-G 峰值超限也可能表现为 link 不稳。
  3. 看加串器和 sensor 的 I2C:在 PoC/复位/mclk 正常后,用 i2cdetect -y 3 确认地址重映射后的加串器和 sensor 是否可见。不要假设 M4-G 的默认地址,需向厂商确认。
  4. 看 DTBO 是否真的生效:检查 /boot/overlays、config.txt 和 dmesg | grep -i overlay;确认 sensor 节点 status = "okay"、serdes-ser-device/serdes-dser-device 指向正确、endpoint 接到 RX4 对应的 CSI,并核对 vc_id 与 sensor 实际输出一致。
  5. 看 sensor 驱动 probe:V4L2 路径检查 sensor 的 .ko 是否加载、dmesg 是否有 probe defer/失败;HBN 路径检查 /usr/hobot/lib/sensor/ 下对应的 .so 是否被应用加载。
  6. 最后看采集框架:确认 v4l_mipicsi、v4l2_cim、vid_v4l2 已加载后,再用 media-ctl -p 和 v4l2-ctl --list-devices 看 entity link 和 video 节点。先证明 link 和 I2C 通,再调 VC/MIPI 参数,否则容易在错误层反复改配置。

RGB 和 ToF 如果是同一路 GMSL 的两个 VC,DT 里通常要建两个 sensor 节点,分别绑定同一个加串器,并给不同 vc_id;如果是两路独立输出,则按两个 port 处理。D457 示例里的 depth 0x2e、RGB 0x1e 只能作为格式参考,不能直接当成 M4-G 的固定值。

5. 官方参考工程

没有 M4-G 的参考工程,但上面这份 Camera 点亮文档就是官方第三方 GMSL2 相机的通用适配参考,重点看 HBN GMSL 的 AR0820 示例、V4L2 GMSL 的 serdes_ops 说明,以及 D457/335Lg 的 depth + RGB 双流 DTBO。M4-G 还需要厂商提供 sensor/ToF 芯片型号、I2C 地址、MAX96717 初始化序列,以及 lane/datatype/VC/分辨率/帧率。若厂商只给寄存器序列,或需要联合定位 GMSL link、VC 和项目定制,论坛这边可以先按资料帮你梳理;具体项目适配可通过 DGP 项目对接与技术支持 对接 FAE。

请补充两点,能直接判断是否只差配置:M4-G 内部 ToF sensor 的型号和厂商初始化序列;你要的“ToF 原始数据”是 16-bit depth 还是 phase/raw12。

原厂还提供了 initSerDer.txt,但该脚本基于 MAX96724 + MAX96717;mrdvs.c 是 Rockchip Linux 5.10 的驱动参考,不能直接用于 RDK。

二、几个问题

  1. RDK S100 4.0.5 的 V4L2 GMSL 框架,是否支持通过同一条 MAX96712 GMSL 输入链路接收 VC0 和 VC1 两路数据,并分别生成可独立取流的视频节点?还是当前框架默认每条数据流需要占用独立的解串器输入端口?

  2. 如果支持这种双 VC 接入,应该参考哪个现有 sensor 驱动和 DTBO?设备树应如何配置两个 VC、两种 Data Type、分辨率及 MAX96712 的 CSI-2 输出?是否有相近的 RGB + Depth 双流示例?

  3. 目前 MAX96712 驱动已在系统中绑定。原厂提供的初始化脚本基于 MAX96724,后续是否应由 MAX96712 驱动的 serdes_ops 完成解串器配置,再由 M4-G 的 sensor 驱动完成串行器初始化、FPGA 开流和触发控制?这条职责划分是否符合 RDK 的驱动框架?

  4. 我检查设备树时,发现 I²C-3 的 0x40 地址原先声明为 MAX9295,0x11 地址原先声明为 AR0820,而 M4-G 实际使用 MAX96717 和 FPGA。适配时应该如何替换或禁用这些原有节点,避免设备树中的器件类型与实际硬件不一致?

  5. 迈尔威视的 capture.c 是标准 V4L2 取流示例,后续还需要使用 DMSDK 将 ToF 原始数据处理成 RGB、DEPTH 图像。针对这个流程,建议先采用 RDK 的 V4L2 GMSL 方案吗?是否有推荐的驱动加载步骤、双流取流示例和 SDK 参考工程?

  6. 我可以向这边提供哪些资料可以更完整的提出我的问题呢,并且能否稍微讲述一下开发这种第三方相机的流程呢,我不太懂这方面内容,谢谢

目前希望先完成单台 M4-G 的双路原始图像稳定采集

先给结论:从框架看,一条 MAX96712 GMSL link 收两个 VC、生成两个独立 video 节点是官方已用过的形态(D457 的 depth+color 双流就是一台相机两条流);但要落到 M4-G,仍需要自己写 sensor 驱动 + dtbo,不能靠现有 max9295/ar0820 节点。

1. 单链路双 VC 是否支持
支持方向和现成依据:官方 serdes_ops 里有按 pipe 配置的 set_pipe_ex(dev, sen_dev, pipe, vc_id, data_type),以及 get_pipe_id(vc_id)/release_pipe_id(pipe_id),注释明确写“d457 sensor 在出流前使用”,D457 就是同一加串器下 depth 与 color 两路 vc 各占一个 pipe。所以不必一条流占一个解串器输入口。需要你核实的一点:4.0.5 分支里 MAX96712 驱动的这几个 ops(尤其每 link 能分配几个 pipe、vc 与 pipe 的映射)是否已实现到位,直接在源码里看实现,不要只看声明。

2. 参考驱动与 DTBO
结构参考 0820C(HBN 侧 sensor/serial/deserial 三层目录),双流形态参考 D457 的 v0p5_d457_2v_depth_color.dtbo 示例。M4-G 两个节点写在同一 i2c 节点下,字段对应关系如下(值为你给的规格,语法照官方示例):

fpga@11 {                        /* reg = map 后地址, addr = 实际地址 */
        compatible = "d-robotics,m4g";
        reg = <0x11>; addr = <0x11>;
        width = <2560>; height = <960>;
        data_type = <0x2a>; lane_num = <4>; vc_id = <0>;
        mfp-reset = <0>; mfp-trigger = <0>;   /* 触发走 MFP0 */
        d-robotics,serdes-ser-device = <&ser_a>;
        d-robotics,serdes-dser-device = <&dser>;
        status = "okay";
        port { cam_to_mipi_csi4: endpoint {
                remote-endpoint = <&mipi_csi4_from_cam_0>;
                virtual-channel = <0>; }; };
};

RGB 节点同结构,改 height=1056、data_type=0x1e、vc_id=1、virtual-channel=1。注意两点:lane_num 在 serdes_ctx 里指“sensor 到加串器”的 MIPI lane 数,不是解串器到 SoC 的 CSI lane,别照抄 D457 的 2;解串器到 CSI 的通道由 dser 与 CSI 节点自身的配置决定。另外两个节点共用同一个 ser_dev,probe 顺序、map_addr 重复调用、MFP 复位都要防重复执行,建议只在一个“主”节点做串行器/FPGA 初始化,另一个只做 pipe/vc。

3. 职责划分
符合框架:加串器、解串器都不注册为 v4l2 subdev,只给 sensor 驱动提供 ops。所以解串器侧由 dser 的 init/setup_link/set_pipe/set_stream 完成,加串器侧由 ser 的 map_addr/init/set_pipe/enable_mfp 完成,触发用 enable_mfp(..., mfp_trigger)。FPGA 的 0x2000 开流属于相机侧业务,放在 sensor 驱动 s_stream 里通过 0x11 客户端写,注意 i2c 总线号要从原平台的 4 换成你这块板实际的 3。

4. 0x40/0x11 旧节点
关键限制:官方说明 DTBO 对 dtb 只支持增/改,不支持删减,所以不能“删掉”这两个节点,只能把它们的 status 改成 disabled;如果 overlay 改属性不生效,就改基础 dts 重编 dtb。原因是 ar0820@11 的 reg 与你的 FPGA 节点同为 0x11,max9295@40 与 MAX96717 同为 0x40,同时 enabled 会互相抢同一地址、probe 到错误驱动。改完按文档把 dtbo 放 /boot/overlays 并在 config.txt 指定。

参考:Camera 点亮(V4L2 GMSL SerDes 与 sensor dtbo)、Camsys 使用方式。

5. 先 V4L2,DMSDK 后接
建议先 V4L2:v4l2-ctl 能直接看 fourcc 和帧,适合先证明双 VC 出流稳定。DMSDK 属厂商侧 SDK,RDK 公开文档里没有它的说明,输入格式和对 /dev/video* 的依赖要以迈尔威视文档为准;可先参考官方 D457 + librealsense 的做法(同样是 SDK 依赖固定 video 节点,需要手动做软链接),但 D457 的节点名和 vc 不能套到 M4-G。

6. 资料清单与流程
按 bring-up 顺序推进:①串行器链路 lock → ②0x40/0x11 可达 → ③两个 sensor subdev probe → ④两个 video 节点与格式 → ⑤DMSDK 后处理。需要你提供的资料:M4-G 的详细数据手册或寄存器手册(FPGA 0x2000 附近开流、帧率、触发时序)、MAX96717 初始化序列、ToF 输出是 16-bit depth 还是 RAW8 phase(你写 RAW8/0x2A,需确认 DMSDK 是否吃这个格式)、两路是否要求严格同步、扩展板原理图与 RX4 对应关系。若后续需要联合定位 link/VC 或做项目级适配,论坛这边可以先按资料梳理,具体对接可走 DGP 项目对接与技术支持。

还想确认一点:FPGA 的 0x2000 是整个模组一起开流,还是 VC0/VC1 各自独立使能?这决定两个 sensor 节点的 s_stream 会不会互相打断。

我在当前系统中查到:

  1. 存在 max96712.ko,并且驱动包含 max96712_set_pipe_ex、max96712_set_stream、max96712_get_available_pipe_id 等函数。

  2. 存在 max9295a.ko,但暂时没有找到 MAX96717 专用驱动或相应的 modules.alias。

  3. /usr/src/.../include/media/i2c/serdes_core.h 中的 SERDES_PRODUCT 目前只列出 MAX9295A 和 MAX9295D。

以下问题:

  1. 当前 RDK S100 的 max96712 驱动能否接收同一链路上的 VC0 RAW8 和 VC1 YUV422,并分别注册为两个视频流?

  2. 当前 RDK 软件栈是否支持 MAX96717?如果没有,是否有可用的驱动源码、补丁或适配示例?

  3. 能否提供适用于 S100 + MAX96717 + MAX96712 + M4-G 的设备树配置示例,以及 Serializer、Deserializer 的初始化和 Pipe/VC 映射配置?

  4. M4-G 的 FPGA 0x11 应由什么驱动管理?是否已有可用的传感器驱动模板或示例?

  5. 如果要使用厂商 DMSDK,是否有适配 RDK S100 的版本或单相机示例?

1. 同一链路双 VC → 两个 video 节点

官方有现成形态:深度相机章节的 v0p5_d457_2v_depth_color 示例中,同一个 MAX96712 输入(同一个 ser_a/dser)上 depth 和 RGB 各写一个 sensor 节点,vc_id 分别为 0/1,两个 endpoint 都接到同一个 mipi_csi4,最终得到两路 video。所以不需要一条流独占一个解串器输入口。同章节「限制」里那句“每 1 路数据通路都会占用解串器的 1 个输入 port”与该示例的写法不一致,以 dtbo 示例和 serdes_ops 的实际语义为准。你查到的 get_pipe_id(vc_id) → set_pipe_ex(pipe, vc_id, data_type) → release_pipe_id(pipe) 正是 D457 双流的用法;MAX96712 只有 4 个 pipe,这条 link 占 2 个,需在源码里确认每 link 的 pipe 分配没有写死成一个。

2. MAX96717 支持情况(这条要更正)

按你查到的 SERDES_PRODUCT 只有 MAX9295A/MAX9295D,V4L2 serdes 层是按产品枚举实现 ops 的,MAX96717 没有对应实现;本次我在 S100 手册里检索 96717 也没有命中条目,所以上次说“文档里解析 MAX96717”这句我给不出可引用出处,请以源码为准。没有公开的 M4-G/MAX96717 补丁。两条路:新增 product 枚举 + ser 驱动(可仿 max9295a 结构,寄存器序列取原厂 initSerDer.txt 里的加串器段);或先评估直接复用 max9295a 的 ops——同族但寄存器不保证兼容,pipe/VC 映射和 MIPI 使能位必须逐条比对后才能用。

3. DT 写法(纠正:字段名是 def-addr,不是我上次写的 addr)

/dts-v1/; /plugin/;
/ { fragment@1 { target-path = "/soc/i2c@39450000/";  /* 换成 I2C-3 实际节点路径 */
  __overlay__ { status = "okay";
    m4g_tof: fpga@11 { compatible = "xxx,m4g"; reg = <0x11>; def-addr = <0x11>;
        width = <2560>; height = <960>; data_type = <0x2a>; lane_num = <4>; vc_id = <0>;
        d-robotics,serdes-ser-device = <&ser_a>; d-robotics,serdes-dser-device = <&dser>;
        status = "okay";
        port { m4g_tof_ep: endpoint { remote-endpoint = <&mipi_csi4_from_m4g_0>; virtual-channel = <0>; }; }; };
    m4g_rgb: fpga@12 { /* 同上,reg=<0x12>、def-addr=<0x11>、width 1280、height 1056、
        data_type=<0x1e>、vc_id=<1>、virtual-channel=<1> */ };
  }; }; };

两个节点不能都用 reg = <0x11>(i2c client 地址冲突,后 probe 的会失败),映射地址用 0x12 之类,def-addr 都是 FPGA 实际 0x11。共用同一个 ser_dev/dser_dev 时,setup_link/map_addr/复位只让一个“主”节点做,另一个只做 set_ctx + set_pipe_ex,否则会重复重映射。lane_num 是 sensor→加串器的 lane 数,解串器到 SoC 的 CSI lane 由 dser 和 CSI 节点决定。

4. FPGA 0x11 由谁管

没有现成驱动,它属于相机侧控制,应该放在 M4-G 的 sensor 驱动里(该 subdev 自己的 i2c client 就是 0x11 最省事):s_stream 里写 0x2000 开流、触发走 enable_mfp(ser_dev, mfp_trigger)。模板按你选的路径取:V4L2 侧照 AR0820 的 sensor 驱动结构(含 ser_dev/dser_dev/serdes_ctx),HBN 侧是 hobot-camera/drivers/sensor 下的 imx219_utility.c 这类模板。注意 0x2000 是 16 位寄存器地址,普通 regmap 默认 8 位地址,要显式配地址位宽。

5. DMSDK

RDK 公开文档没有 DMSDK 的说明,是否有 S100 版本只能问迈尔威视。官方同类先例是 D457 + librealsense:SDK 需要改源码、并对 /dev/video* 做软链接适配,说明这条路可行但 SDK 侧要自己改,M4-G 的节点名和 vc 不能套 D457。

按顺序推进:① link lock 与 0x40/0x11 可达 → ② 加串器 ops 能跑通(这是当前最大缺口)→ ③ 先只点亮 VC0 ToF 单流,确认 video 节点和格式 → ④ 再加 VC1。有一个待核实点想提前说明:官方已点亮 sensor 只有 raw10/raw12/yuv422,ToF 的 RAW8/0x2a 是否被 camsys 接受需要看驱动支持列表,如果 v4l2-ctl 拿不到该格式,问题在这一层而不是 VC 映射。

参考:Camera 点亮(serdes_ops、dtbo 字段、D457 双流示例)、Camsys 使用方式(V4L2 ko 加载)。拿到 FPGA 的 0x2000 语义(整机开流还是分路)和原厂 MAX96717 初始化序列后贴给我,我帮你对一遍 ser 侧该改哪些点位;要做项目级联调可走 DGP 项目对接与技术支持。

1. 同一 link 的 VC0 RAW8 + VC1 YUV422 → 两个 video 节点

框架层面可行。Camera 点亮 的 serdes_ops 里,get_pipe_id(vc_id) 注释写的是“通过 virtual channel 查解串器是否还有空余 pipe,返回 pipe id(0–3),d457 sensor 出流前使用”,set_pipe_ex(dev, sen_dev, pipe, vc_id, data_type) 按每路 pipe 单独配 VC 和 datatype;同页 dtbo 示例中 D457 就是同一个 ser_a/dser 上 vc0、vc1 两个节点接同一个 mipi_csi4,出两路 video。所以不必一路独占一个解串器输入口。

两处要在源码里确认,否则会卡住:

  • max96712_set_pipe_ex 的实现有没有把 pipe 分配写死。MAX96712 只有 4 个 pipe,这条 link 要用 2 个,看实现是否支持同 link 多 pipe。
  • RAW8(datatype 0x2a)在 camsys/vid_v4l2 的格式表里有没有对应 fourcc。官方“已点亮 sensor”只有 raw10/raw12/yuv422(见 Camsys),没有 RAW8 先例;这一层不通时 v4l2-ctl 会直接报格式不支持,与 VC 映射无关。

2. MAX96717

按你查到的 SERDES_PRODUCT 只有 MAX9295A/MAX9295D:V4L2 serdes 层按产品枚举分发 ops,MAX96717 没有对应实现。我上次说“文档里解析 MAX96717”给不出可引用出处,S100 手册里也检索不到该条目,请以源码为准。没有公开补丁,两条路:新增 product 枚举 + ser 驱动(结构仿 max9295a,寄存器序列取原厂 initSerDer.txt 的加串器段);或逐条比对后复用 max9295a 的 ops——同族但 pipe/VC 映射和 MIPI 使能位不保证一致。你查的是 V4L2 侧 include/media/i2c,顺便确认 HBN 侧加串器驱动目录里有没有另一套 96717 实现。

3. dtso 骨架(照官方 D457 双流示例改)

/dts-v1/; /plugin/;
/ { fragment@1 { target-path = "/soc/i2c@39450000/";   /* 换成 I2C-3 实际节点路径 */
  __overlay__ { status = "okay";
    m4g_tof: m4g@11 { compatible = "xxx,m4g"; reg = <0x11>; def-addr = <0x11>;
        width = <2560>; height = <960>; data_type = <0x2a>; lane_num = <4>; vc_id = <0>;
        d-robotics,serdes-ser-device = <&ser_a>; d-robotics,serdes-dser-device = <&dser>;
        status = "okay";
        port { m4g_tof_ep: endpoint {
            remote-endpoint = <&mipi_csi4_from_sensor_0>; virtual-channel = <0>; }; }; };
    m4g_rgb: m4g@12 { /* reg=<0x12>、def-addr=<0x11>、data_type=<0x1e>、vc_id=<1>、
        endpoint 接 mipi_csi4_from_sensor_1、virtual-channel=<1> */ };
  }; }; };
  • reg 是映射后地址,def-addr 是器件实际 I2C 地址(同页基础 dts 示例里同义字段写作 addr)。两个节点不能都写 reg = <0x11>,否则 i2c client 地址冲突,后 probe 的那个失败。
  • lane_num 是 sensor→加串器的 lane 数,不是解串器到 SoC 的 CSI lane;vc_id 是解串器送 SoC 的虚拟通道。cam-type 是 D457 驱动在解析、且要与 data_type 匹配的字段,你的驱动是否使用由自己决定。

初始化顺序照文档:两个节点各自 set_ctx;link 相关那串(dser init → setup_link → remote_contrl_get → ser map_addr → remote_contrl_put → ser init → ser set_pipe → dser set_pipe → clear_mfp/enable_mfp(reset))只让主节点执行一次,第二路只做 set_ctx + get_pipe_id(1) + set_pipe_ex(pipe, 1, 0x1e),否则会重复地址重映射。开流时 enable_mfp(ser_dev, mfp_trigger) + dser set_stream(..., 1)。

4. FPGA 0x11

没有现成驱动,它属相机侧控制,最省事是放在 M4-G 的 sensor 驱动里(该 subdev 的 i2c client 就是 0x11):s_stream 里写 0x2000 开关流,触发走 enable_mfp。模板:V4L2 侧照 AR0820 那个 gmsl sensor 驱动结构(含 ser_dev/dser_dev/g_ctx),subdev ops 骨架照 imx219。注意 0x2000 是 16 位寄存器地址,regmap 默认 8 位地址宽度,要显式配。

5. DMSDK

RDK 公开文档没有 DMSDK 的说明,是否有 S100 版本只能找迈尔威视确认。官方同类先例是 D457 + librealsense:需要改 SDK 源码并对 /dev/video* 做软链接,说明这条路能走但 SDK 侧要自己改,M4-G 的节点名和 VC 不能套 D457。

推进顺序:link lock 与 0x40/0x11 可达 → 加串器 ops 跑通(当前最大缺口)→ 先只点亮 VC0 ToF 单流、确认 v4l2-ctl 能出该格式 → 再加 VC1。把原厂 MAX96717 初始化序列和 FPGA 0x2000 的语义(整机一起开流还是分路使能,这决定两个节点 s_stream 会不会互相打断)贴上来,我帮你对一遍 ser 侧该改的点位;要把 GMSL link/VC 与 DMSDK 一起做项目级联调,可走 DGP 项目对接与技术支持。