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

t7xx 驱动程序是一个为 Linux 或 Chrome OS 平台开发的 WWAN PCIe 主机驱动程序,用于主机平台和联发科 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(调制解调器信息处理中心)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 调试桥) “一种用于跟踪连接到或运行在给定主机开发机器上的 Android 设备和模拟器实例的机制,采用 ADB 协议”