用于 MTK PCIe T700 5G 调制解调器的 t7xx 驱动

t7xx 驱动程序是一个 WWAN PCIe 主机驱动程序,专为 Linux 或 Chrome OS 平台开发,用于主机平台与联发科 (MediaTek) T700 5G 调制解调器之间通过 PCIe 接口进行数据交换。该驱动程序公开了一个符合 MBIM 协议 [1] 的接口。任何前端应用程序(例如 Modem Manager)都可以轻松管理 MBIM 接口,以实现与 WWAN 的数据通信。该驱动程序还提供了一个通过 AT 命令与联发科调制解调器交互的接口。

基本用法

在未管理时,MBIM 和 AT 功能处于非活动状态。t7xx 驱动程序提供代表 MBIM 和 AT 控制信道的 WWAN 端口用户空间接口,并且不参与其功能的管理。用户空间应用程序的任务是检测端口枚举并启用 MBIM 和 AT 功能。

此类用户空间应用程序的示例包括

  • mbimcli(包含在 libmbim [2] 库中),以及

  • Modem Manager [3]

管理应用程序需要执行以下操作来建立 MBIM IP 会话:

  • 打开 MBIM 控制信道

  • 配置网络连接设置

  • 连接到网络

  • 配置 IP 网络接口

管理应用程序需要执行以下操作来发送 AT 命令和接收响应:

  • 使用 UART 工具或专用用户工具打开 AT 控制信道

Sysfs

驱动程序向用户空间提供 sysfs 接口。

t7xx_mode

sysfs 接口为用户空间提供了设备模式的访问权限,该接口支持读写操作。

设备模式

  • unknown 表示设备处于未知状态

  • ready 表示设备处于就绪状态

  • reset 表示设备处于重置状态

  • fastboot_switching 表示设备处于 fastboot 切换状态

  • fastboot_download 表示设备处于 fastboot 下载状态

  • fastboot_dump 表示设备处于 fastboot 转储状态

从用户空间读取以获取当前设备模式。

::

$ cat /sys/bus/pci/devices/${bdf}/t7xx_mode

从用户空间写入以设置设备模式。

::

$ echo fastboot_switching > /sys/bus/pci/devices/${bdf}/t7xx_mode

t7xx_debug_ports

sysfs 接口为用户空间提供了启用/禁用调试端口的访问权限,该接口支持读写操作。

调试端口状态

  • 1 表示启用调试端口

  • 0 表示禁用调试端口

当前支持的调试端口 (ADB/MIPC)。

从用户空间读取以获取当前调试端口状态。

::

$ cat /sys/bus/pci/devices/${bdf}/t7xx_debug_ports

从用户空间写入以设置调试端口状态。

::

$ echo 1 > /sys/bus/pci/devices/${bdf}/t7xx_debug_ports

管理应用程序开发

驱动程序和用户空间接口如下所述。MBIM 协议在 [1] 移动宽带接口模型 v1.0 勘误表-1 中有详细描述。

MBIM 控制信道用户空间 ABI

/dev/wwan0mbim0 字符设备

驱动程序通过实现 MBIM WWAN 端口向 MBIM 功能公开 MBIM 接口。控制信道管道的用户空间端是 /dev/wwan0mbim0 字符设备。应用程序应使用此接口进行 MBIM 协议通信。

分段

用户空间应用程序负责根据 MBIM 规范进行所有控制消息的分段和重组。

/dev/wwan0mbim0 write()

管理应用程序发出的 MBIM 控制消息不得超过协商的控制消息大小。

/dev/wwan0mbim0 read()

管理应用程序必须接受最大为协商控制消息大小的控制消息。

MBIM 数据信道用户空间 ABI

wwan0-X 网络设备

t7xx 驱动程序公开了类型为“wwan”的 IP 链路接口“wwan0-X”用于 IP 流量。Iproute 网络实用程序用于创建“wwan0-X”网络接口并将其与 MBIM IP 会话关联。

在建立 SessionId 大于 0 的 MBIM IP 会话之前,用户空间管理应用程序负责创建新的 IP 链路。

例如,为 SessionId 为 1 的 MBIM IP 会话创建新的 IP 链路

ip link add dev wwan0-1 parentdev wwan0 type wwan linkid 1

驱动程序将自动把“wwan0-1”网络设备映射到 MBIM IP 会话 1。

AT 端口用户空间 ABI

/dev/wwan0at0 字符设备

驱动程序通过实现 AT WWAN 端口公开 AT 端口。控制端口的用户空间端是 /dev/wwan0at0 字符设备。应用程序应使用此接口发出 AT 命令。

fastboot 端口用户空间 ABI

/dev/wwan0fastboot0 字符设备

驱动程序通过实现 fastboot WWAN 端口公开 fastboot 协议接口。fastboot 信道管道的用户空间端是 /dev/wwan0fastboot0 字符设备。应用程序应使用此接口进行 fastboot 协议通信。

请注意,驱动程序需要重新加载才能导出 /dev/wwan0fastboot0 端口,因为设备在进入 fastboot_switching 模式后需要进行冷复位。

ADB 端口用户空间 ABI

/dev/wwan0adb0 字符设备

驱动程序通过实现 ADB WWAN 端口公开 ADB 协议接口。ADB 信道管道的用户空间端是 /dev/wwan0adb0 字符设备。应用程序应使用此接口进行 ADB 协议通信。

MIPC 端口用户空间 ABI

/dev/wwan0mipc0 字符设备

驱动程序通过实现 MIPC (Modem Information Process Center) WWAN 端口公开诊断接口。MIPC 信道管道的用户空间端是 /dev/wwan0mipc0 字符设备。应用程序应使用此接口进行 MTK 调制解调器诊断通信。

联发科的 T700 调制解调器支持 3GPP TS 27.007 [4] 规范。

参考文献

[1] MBIM (移动宽带接口模型) 勘误表-1

[2] libmbim “一个基于 glib 的库,用于与支持移动接口宽带模型 (MBIM) 协议的 WWAN 调制解调器和设备进行通信”

[3] Modem Manager “一个由 DBus 激活的守护进程,用于控制移动宽带 (2G/3G/4G/5G) 设备和连接”

[4] 规范 # 27.007 - 3GPP

[5] fastboot “一种与引导加载程序通信的机制”

[6] ADB (Android Debug Bridge) “一种机制,用于跟踪通过 ADB 协议连接到或运行在给定主机开发机器上的 Android 设备和模拟器实例”