Skip to main content
通用串行总线(USB)是一项行业标准,允许在各类电子设备之间进行数据交换和电力传输。它可以以不同速度运行,例如 1.5 Mbps 的低速、12 Mbps 的全速、480 Mbps 的高速、5 Gbps 的 SuperSpeed 以及 10 Gbps 的 SuperSpeed Plus。 Qualcomm SoC 上的 USB 由 Synopsys DesignWare® Core SuperSpeed USB 3.x 驱动,并连接到两个 PHY:通过 UTMI 接口连接 USB2 PHY,通过 PIPE 接口连接 USB3 PHY。这些 PHY 连接到物理 Type-C 端口,实现与外部世界的通信。 以下是 USB 的关键硬件组件。
  • USB 控制器
    • 主控制器是 Synopsys DesignWare Core SuperSpeed USB 3.x 控制器(Gen1/Gen2)。
      • 两个用于 USB SuperSpeed 和 DisplayPort 的 Qualcomm 多用途 PHY(QMP)实例。
      • 用于高速 USB 的 Synopsys PHY。
    • 副控制器是 Synopsys DesignWare Core 高速 USB 2.0 控制器。
      • 用于高速 USB 的 Synopsys PHY
    • 第三控制器是 Synopsys DesignWare Core 高速 USB 2.0 控制器。
      • 用于高速 USB 的 Synopsys PHY。
    • Dragonwing IQ-9075 具有三个 USB 控制器(主 USB 3.2、副 USB 3.2、第三 USB 2.0)
  • Synopsys DesignWare Core SuperSpeed USB 3.x 控制器特性
    • Synopsys DesignWare Core SuperSpeed USB 3.x 控制器是符合 USB SuperSpeed 规范的控制器,可配置为以下方式之一:
      • 仅外设(Peripheral-only)配置
      • 仅主机(Host-only)配置
      • 双角色(Dual-role)配置
    • 支持所有传输类型(控制、批量、中断和同步传输)
    • 支持 SuperSpeed 批量流(bulk streams)
    • 符合可扩展主机控制器接口(xHCI)规范
    • 主机模式支持 SuperSpeed(5 Gbps)、高速(480 Mbps)、全速(12 Mbps)和低速(1.5 Mbps)操作。
    • 设备模式支持 SuperSpeed(5 Gbps)、高速(480 Mbps)和全速(12 Mbps)操作,最多支持 16 个双向端点(包括控制管道 ep0)。
    • 链路电源管理
  • USB PHY 访问方法
    • 通过 AHB2PHY 的寄存器级接口,用于执行 PHY 相关操作。
  • USB Type-C
    • 使用 PM7325B PD 控制器支持 USB Type-C 和电力传输(Power Delivery)。
    • 完全符合 USB Type-C 3.0 电力传输规范。
    • 在传输控制器确定所连接链路伙伴的 Type-C 方向、角色和模式后,支持根据 UCSI 框架更新 PM7325B 软件驱动。
    • 仅用于主 USB 控制器。

时钟

下表列出了 USB 控制器以及高速和 SuperSpeed PHY 正常工作所需的时钟和工作频率。 表: USB 控制器时钟 表: 高速 PHY 时钟 表: SuperSpeed PHY 时钟

电压轨

下表列出了高速(HighSpeed)和 SuperSpeed PHY 所需的电压轨。 表: USB 电压轨 Dragonwing IQ-9075 USB 电压轨
  • HS PHY:L7A(0.88 V)、L6C(1.8 V)、L9A(3.3 V)
  • SS PHY:L1C、L7A

中断

下表列出了 USB 控制器用于通知事件的各种中断。 表: USB 控制器中断

互连

下表列出了 USB 控制器使用的各种互连。 表: USB 互连

使用时钟控制复位 USB 控制器

下表列出了用于 USB 控制器和 PHY 的复位方法。 表: USB 时钟复位方法

使用寄存器进行 USB 控制器软件复位

下表列出了用于复位 USB 控制器的寄存器选项。 表: USB 控制器复位 Dragonwing IQ-9075 控制器复位寄存器
  • HS:GCC_USB2_PHY_PRIM_BCR
  • SS:GCC_USB3_PHY_PRIM_BCR/ GCC_USB3PHY_PHY_PRIM_BCR
  • GCC_USB3_PHY_TERT_BCR
  • USB30_PRIM_GDSC
  • USB30_SEC_GDSC
  • USB20_PRIM_GDSC
Dragonwing IQ-615 副 USB 控制器复位寄存器
  • GCC_USB20_SEC_BCR
  • GCC_QUSB2PHY_SEC_BCR
  • GCC_USB2_PHY_SEC_BCR

USB 控制器与 SoC 集成

USB 控制器的知识产权(IP)和 PHY 按下图所示集成到 SoC 中。 图:USB 控制器 PHY 与 SoC 集成USB 3.xcontrollerSoCType-C connectorAHB 2PHYDisplay port controllerSS0_1DPPHY (QMP)SS0_0DPPHY (QMP)EUDHS0PHY(SNPS)PipeUTMISSHS Synopsys DesignWare Core SuperSpeed USB 3.0 知识产权仅控制核心功能,而不控制设备规格,例如时钟、互连、稳压器和 GDSC。Synopsys DesignWare Core 知识产权被嵌入在 Qscratch 封装器(知识产权和软件驱动)内部,该封装器负责在探测(probe)、挂起或恢复状态期间管理所需资源(时钟、互连、中断、GDSC 和稳压器)。这两个驱动共存以确保 USB 功能正常。 有关 USB Qscratch 封装器驱动的信息,请参阅 https://github.com/torvalds/linux/blob/master/drivers/usb/dwc3/dwc3-qcom.c。有关控制器核心驱动的信息,请参阅 https://github.com/torvalds/linux/blob/master/drivers/usb/dwc3/core.c

xHCI 支持

xHCI 规范描述了 USB 2.0 及更高版本的寄存器级主机控制器接口。USB 控制器符合 xHCI 规范,在主机模式下支持 SuperSpeed(5 Gbps)、高速(480 Mbps)、全速(12 Mbps)和低速(1.5 Mbps)操作。 Linux 标准 xHCI 驱动用于在主机模式下操作 USB 控制器。

USB Type-C 连接器系统软件接口(UCSI)

注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 USB Type-C 功能。

USB 特性

Qualcomm 芯片硬件 SoC 允许在双角色设备(DRD)模式下工作。DRD 同时支持设备和主机角色。设备动态检测应切换到的角色,并相应地对控制器进行编程。支持自动挂起(autosuspend)功能,可在拔出线缆时关闭 USB 控制器。支持视频、音频、网络共享、文件传输、媒体传输和充电等功能接口。 表: USB 特性:Linux

运行时电源管理

可以根据您的需求启用运行时电源管理功能。LPM 支持已作为 https://lore.kernel.org/all/20231017131851.8299-1-quic_kriskura@quicinc.com/ 的一部分添加。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 USB Type-A 端口的运行时电源管理。 默认情况下,运行时的 USB 挂起和恢复处于禁用状态。要启用这些功能,请运行以下命令:
默认自动挂起延迟设置为 5 秒。要更改延迟,请运行以下 sysfs 命令:
在角色切换期间,DWC3 控制器进入挂起状态、切换 GDSC 并复位控制器,以确保主机模式外设枚举成功。 在主机模式下,为使远程唤醒生效,需根据您的需求为 xHCI 接口、USB 根集线器和已连接的外设启用唤醒(wake-up)和自动挂起。
注意:主机控制器驱动(HCD)设备生成 xhci-hcd.X.auto 值,其中 X = 0、1、2。它表示连接到 USB 的设备数量。已连接的设备列在 /sys/bus/platform/devices/xhci-hcd.X.auto/usb1/<node number> 下。<node number> 值取决于连接到 USB 端口的设备数量。 要为 LS 光电鼠标启用远程唤醒,请运行以下命令:
要检查运行时状态,请运行以下命令:
为避免在组合(composition)切换中挂起,请通过运行以下命令移除活动的 UDC 以重新绑定组合:

软件特性

软件支持以下 USB 特性。 表: USB 软件特性

USB 架构

Qualcomm USB 软件架构大致由两个组件组成,一个基于纯上游(upstream),另一个是包含部分待合入特性相关更改的沙箱(sandbox)。纯上游部分直接取自最新的稳定内核长期支持版本(LTS)6.6.2。该架构使用 Yocto(4.0 版)配方(recipe)来创建二进制文件。 图:USB 软件架构/dev/ffs-xxx//dev/ffs-xxx//dev/ffs-xxx//sys/kernel/config/usb_gadget/…/sys/bus/usb/…Function driverFunction driverGadget frameworkconfigfs, UDC coreDevice controller driverClassdriverClassdriverUSB coreHost controller driverdwc3-qcomDWC3 core driversFemto phy driverQMP phy driverUCSIPMIC GLINKPM7325BaDSP corecharger firmwareVBUS, CC, D+,D-HSSS/sys/class/typec/port0/…Dual-role class driverType-C role swapdiag-routerport-bridgeadbd.serviceUSB peripheral mode configurationRuntime power management controlUser-space servicesVFSKernel-spaceType-C connector 沙箱实现了以下 Qualcomm 特有特性。

USB 接口

USB 支持多种接口来传输音频、视频、调试信息和网络共享。以下每种 USB 接口的通信协议各不相同,除标准 USB 协议外还各自拥有专属协议。
  • Android 调试桥(ADB)
  • 诊断(diag)
  • 大容量存储
  • 远程网络驱动接口规范(RNDIS)
    • RNDIS 是 Microsoft 为动态即插即用 I/O 总线(如 USB)上的网络设备开发的规范。
    • 内核驱动:它使用上游 Linux 内核中的 f_rndis 驱动,直接与网络接口或网络栈通信。
  • 网络控制模型(NCM)
    • NCM 是一种协议,旨在提供比 RNDIS 更先进的特性和能力。
    • 它常见于 USB 设备必须处理高要求网络任务的应用中。
  • USB 音频类 2(UAC2)
    • UAC2 是管理 USB 音频设备与计算机之间通信的标准。
    • UAC2 支持更高的音频数据传输速率,从而改善音频质量并降低延迟。
  • USB 视频类(UVC)
    • UVC 是一项标准,定义了视频流设备(如网络摄像头)如何通过 USB 与计算机通信。
    • UVC 为视频设备提供即插即用功能。

USB 工具

下表列出了几个常用的 USB 工具。 表: USB 工具及下载详情

配置 USB 引导加载程序

可以使用 Qualcomm DeviceTree 编辑器(QDTE)工具修改引导加载程序中用于调优高速和 SuperSpeed USB 信号质量的设备树参数。 QDTE 工具通过编辑 xbl_config.elf 文件来配置设备树二进制 blob,如下图所示。有关如何配置设备树 blob 的更多信息,请参阅 QDTE 部分。Linux 主机上的设备树文件路径为 /boot_images/boot/Settings/Soc/<Chipset>/Core/WiredConnectivity/USB/usb.dtsi 图:设备树布局 下表列出了用于调优 HS-USB PHY 和 SS USB PHY 信号质量的属性。 表: USB 配置属性

配置 USB 摄像头

Qualcomm Linux 设备为符合 USB 视频类(UVC)标准的 USB 网络摄像头提供驱动支持。Linux 内核的 uvcvideo 驱动支持摄像头。有关 uvcvideo 驱动的更多信息,请参阅 https://www.kernel.org/doc/html/v4.19/media/v4l-drivers/uvcvideo.html uvcvideo 驱动将这些摄像头暴露为 V4L2 视频设备,可通过字符设备节点(如 /dev/videoX)访问。 在用户空间中,应用程序可以使用 v4l2src GStreamer 插件管理 USB 摄像头,该插件与 Qualcomm 智能多媒体 SDK(IM SDK)捆绑提供。或者,Yavta(yet another V4L2 test application)等程序可直接与 V4L2(Video4Linux2)接口交互,以测试和控制摄像头设备。 当前版本默认不包含 Yavta 程序。要在主机设备上获取并交叉编译 Yavta,请执行以下操作:
  1. 可以使用以下任一方法建立交叉编译环境。
    • 方法 1:要设置交叉编译环境,请运行以下命令。
    • 方法 2:要设置交叉编译环境,请运行以下命令:
      1. 下载交叉编译器。
      2. 解压交叉编译器。
      3. 通过运行以下命令设置交叉编译环境。
  2. 克隆 Yavta 仓库并切换目录。
  3. 交叉编译该工具。
  4. 要将 Yavta 推送到 Qualcomm Linux 硬件 SoC,请执行以下操作:
    1. 以宽容(permissive)模式打开 SSH shell 或使用 ADB shell。有关如何运行 SSH 的更多信息,请参阅使用 SSH 部分。
    2. 挂载文件系统。
    3. 使用 SCP 或类似工具传输文件。 例如,scp yavta root@10.92.162.185:/usr/bin
    4. 为 Yavta 分配执行权限。

前提条件:获取图像格式和尺寸

无论是通过 Yavta 还是 GStreamer 配置 USB 摄像头,以下步骤都是必需的。
  1. 要了解枚举详情,请插入 USB 摄像头并运行以下命令。
    将显示以下输出。
  2. 从串行控制台识别创建为 /dev/videoX 的 USB 摄像头视频节点。
    注意1-1/1-1:1.0 值会根据所连接的 USB 设备而变化。 将显示以下输出。
  3. 要使用 Yavta 查看支持的输出格式和尺寸,请运行以下命令:
    其中 X 值取决于节点。 例如:
    将显示以下输出。
  4. 从步骤 3 中选择所需的图像格式和尺寸。

使用 Yavta 配置 USB 摄像头

前提条件:确保已交叉编译 Yavta,并已确定输出格式和尺寸。
  • 要选择 1280x720 输出尺寸、30 fps 的 MJPEG 格式,在 /tmp/ 下捕获 10 帧、文件名为 testmjpeg-00000*.bin,请运行以下命令。
    将显示以下输出。
  • 要选择 1280x960 输出尺寸、30 fps 的 YUV 格式,在 /tmp/ 下捕获 10 帧,生成的文件名为 testyuv-00000*.bin,请运行以下命令。
    注意:使用命令 #setenforce 0 启用宽容(Permissive)模式。 将显示以下输出。

在 Qualcomm IM SDK 中使用 GStreamer 配置 USB 摄像头

Qualcomm IM SDK 使用 GStreamer(一个开源多媒体框架)在多媒体和机器学习领域提供易用的 API 和插件。有关安装 Qualcomm IM SDK 的信息,请参阅快速入门部分。 Qualcomm IM SDK 包含 v4l2src 插件,它允许以选定格式接收来自 USB 摄像头的输入。waylandsink 插件负责在 Wayland 显示器上渲染视频输出。 注意:前提条件:
  1. 要为 Wayland 显示器设置环境变量,请在串行控制台中运行以下命令。
  2. 使用 GStreamer 命令将摄像头视频流传输到 UI。确保设置了正确的设备 ID(/dev/videoX),并根据 USB 摄像头检测结果选择正确的格式。 注意:在 GStreamer 中,YUYV 颜色格式被称为 YUY2。因此,在设置管线时必须指定 YUYV 格式,并在 caps filter 中使用 YUY2
    • 对于 720p,请运行以下命令:
      将显示以下输出。
    • 对于 1080p,请运行以下命令:

自定义 USB 设备

本节介绍 USB 软件中各种配置和自定义的要求。

包含 diag 和 ADB 接口的 USB 组合示例 shell 脚本

通过 QUSB 服务更改 USB 组合

usb.service/usr/bin/qusb 处启动 QUSB 服务,为用户提供配置 USB gadget 的灵活性。它完全免除了通过 configfs 手动执行命令来初始化 USB 的麻烦。 前提条件:通过运行以下命令启用 SELinux。
示例:

启用和配置 UVC 用例

USB 视频设备类(亦称 USB 视频类或 UVC)是一种 USB 设备类,用于描述能够进行视频流传输的设备,例如网络摄像头、数码摄像机、转码器、模拟视频转换器和静态图像相机。 USB 视频类规范的最新修订版为 v1.5。USB 实施者论坛(USB implementers forum)在 v1.5 中描述了基本协议和不同的负载格式。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 UVC 用例。 测试 UVC 的工具和流程如下:
  • UVC gadget(设备侧):这是一个用于测试 f_uvc 功能驱动的示例应用程序。它打开由 uvc_gadget 创建的视频节点,并以指定的帧率发送 MJPEG 帧。该应用程序需为 DUT 交叉编译。 注意:确保主机上已安装交叉编译 64 位 Arm® 技术编译器所需的软件包和工具。
    1. 可以使用以下任一选项建立交叉编译环境。
      • 选项 A:运行以下命令。
      • 选项 B:要设置交叉编译环境,请运行以下命令:
        1. 下载交叉编译器。
        2. 解压交叉编译器。
        3. 通过运行以下命令设置交叉编译环境。
    2. 要构建 UVC gadget 工具,请执行以下操作。
      1. 克隆 uvc-gadget 仓库。
      2. 修改 Makefile 以进行静态构建。
      3. arm64 交叉编译以生成 uvc‑gadget 可执行文件。
  • UVC 查看器(主机侧):要接收 UVC 数据,请在计算机上打开任意 USB 网络摄像头应用程序。
    1. 要进行验证,将 UVC gadget 应用程序和示例图像文件推送到设备,请执行以下操作:
      1. 以宽容模式打开 SSH shell 或使用 ADB shell。有关如何运行 SSH 的更多信息,请参阅使用 SSH 部分。
      2. 挂载文件系统。
      3. 使用 SCP 或类似工具传输文件。 例如,scp uvc-gadget root@10.92.175.138:/usr/bin
      4. 分配执行权限。
    2. 切换到任意 UVC 组合(90DF 或 90CB)。例如,
只有当用户空间视频应用程序打开时,USB 才会以 UVC 组合枚举。要触发 USB 枚举,请通过控制台(串行控制台或 SSH shell,或使用 ADB shell)启动 uvc_gadget 应用程序。
  • YUYV
    1. image-720.yuv 图像文件推送到 /root/etc
    2. 使用 uvc-gadget 工具验证 image-720.yuv 图像。
      • 其中 X 表示组合切换后创建的新视频节点
      • 其中 -f 为格式,取值如下:
        • 0 = V4L2_PIX_FMT_YUYV
        • 1 = V4L2_PIX_FMT_MJPEG
  • MJPEG
    1. image-720.jpg 图像文件推送到 /root/etc
    2. 使用 uvc-gadget 工具验证 image-720.jpg 图像。
      • 其中 X 表示组合切换后创建的新视频节点
      • 其中 -f 为 <format>,取值如下:
        • 0 = V4L2_PIX_FMT_YUYV
        • 1 = V4L2_PIX_FMT_MJPEG
  • 有关用法信息,请运行以下命令。
    将显示以下输出。

UAC 用例

USB 音频使用同步、中断和控制传输。所有音频数据均使用同步传输方式传输。中断传输用于传递音频时钟可用性的相关信息,控制传输用于设置音量和请求采样率。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 UAC 用例。 要进行验证,请选择包含 UAC 功能的 USB 组合。
要进行捕获或播放,请使用 rootfs 中提供的 tinyutils 应用程序,例如 tinyplay/tinycap。当 UAC 驱动绑定成功后,该应用程序会打开在 /dev/snd/ 中创建的 PCM 节点。 以下是一些示例命令。
  • 在 Linux 主机上列出声卡。
  • 播放音频文件。
    • 要从设备向主机播放音频,请推送具有匹配音频配置的 file.wav 文件。以下是示例配置。
      输出:
      输出:
      输出:
      输出:
      输出:
      输出:
      注意:要修改音频配置,请在将 USB 组合设置为 90CA 之前调整上述参数。
    • 在 SSH shell 上运行以下命令,或使用 ADB shell。
      将显示以下输出。
    • 在 Linux 主机上使用 arecord 等应用程序运行以下命令以捕获音频。
  • 录制音频文件。
    • 在 Linux 主机上使用 aplay 等应用程序运行以下命令以播放音频。
    • 在设备的 SSH shell 上运行以下命令,或使用 ADB shell。
      将显示以下输出。

USB 电力传输中的数据角色交换

数据角色交换(DR_SWAP)是使用 USB Type-C 连接器在端口伙伴之间交换 DFP(主机)和 UFP(设备)角色。电源角色交换(PR_SWAP)在端口伙伴之间交换源(source)和汇(sink)角色。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持使用 Type-C 连接器进行数据和电源角色交换。
  • 数据角色
    • 要将数据角色从主机交换为设备,请运行以下命令:
      将显示以下输出。
      将显示以下输出。
    • 要将数据角色从设备交换为主机,请运行以下命令:
      将显示以下输出。
      将显示以下输出。
  • 电源角色
    • 要将电源角色从汇交换为源,请运行以下命令:
      将显示以下输出。
      将显示以下输出。
    • 要将电源角色从源交换为汇,请运行以下命令:
      将显示以下输出。
      将显示以下输出。

使用 configfs 进行自定义

configfs 文件系统提供与 sysfs 相反的功能。多种接口可以配置 Linux USB gadget,每个接口代表一个 USB 功能。 qusb 可执行文件使用以下命令配置 configfs USB gadget。
  1. 创建 configfs 并挂载 functionfs
  2. 启动 adbd/diag 服务。
  3. configfs 与 USB gadget 应用程序绑定。
  4. 停止或解绑 USB gadget 应用程序。
  5. 设置 diag 和 ADB 组合。
  6. 列出可用的 USB 组合。
    USB 组合如下。
    • A4A1 NCM
    • 4EE7 ADB
    • 900E DIAG
    • 901C DIAG + UAC2
    • 901D DIAG + ADB
    • 9015 MASS_STORAGE + ADB
    • 9024 RNDIS + ADB
    • 902A RNDIS + MASS_STORAGE
    • 902B RNDIS + ADB + MASS_STORAGE
    • 902C RNDIS + DIAG
    • 902D RNDIS + DIAG + ADB
    • 902F RNDIS + DIAG + MASS_STORAGE
    • 9060 DIAG + QDSS + ADB
    • 908C NCM + ADB
    • 90CA DIAG + UAC2 + ADB
    • 90CB DIAG + UVC + ADB
    • 90CC DIAG + UAC2 + UVC + ADB
    • 90DF DIAG + UVC
    • 90E0 DIAG + UAC2 + UVC
    • F000 MASS_STORAGE
    • F00E RNDIS

验证 USB 设备

下表列出了验证 USB 设备和主机模式的各种方法。 表: USB 设备和主机模式验证

调试 USB 问题

本节提供获取调试日志的各种方法的信息。调试方法包括 regdumps、调试 ftracesconfigfs 节点。在调试低功耗模式进入/退出、SMMU 故障、无时钟访问等问题时,这些日志可提供事件和控制器状态详情的可见性。 注意:Dragonwing IQ-9075 和 Dragonwing IQ-8275 不支持 USB Type-C 功能。

跟踪 USB

debugfs 跟踪可深入查看 USB 线路上的每个事务。要查看跟踪列表,请运行以下命令。
注意:确保 debugfs 已挂载。如果未挂载,请运行以下命令挂载 debugfs
以下是可用于验证 xHCI/gadget 栈/USB Type-C 连接器系统软件接口(UCSI)中数据传输的跟踪。
要列出 xHCI/主机控制器驱动(HCD)中的跟踪,请运行以下命令。
以下是可用于验证 xHCI/HCD 中数据传输的跟踪。
要列出 USB 视频类(UVC)gadget 驱动的可用事件,请运行以下命令。
将显示以下输出。
要列出 UCSI 驱动中的可用事件,请运行以下命令。
将显示以下输出。

USB regdump

USB debugfs 提供以下信息。 注意a600000.usb 地址因芯片组而异。
  • 工作模式。
    示例输出:
  • 设备模式下所有端点的状态和传输环形缓冲区(TRB)队列。
  • 当前链路状态。
    示例输出。
  • 列表处理器(LSP)转储。
    示例输出:
示例输出:
regdump 命令提供以下寄存器的寄存器空间当前状态:
  • 设备模式寄存器,例如 DCTL、DSTS 和 DCFG
  • 全局寄存器,例如 GCTL 和 GSTS
示例输出:

使用 sysfs 查看主机模式的文件系统属性

要查看总线详情,请运行以下命令。
示例输出:
要列出当前目录的内容,请运行以下命令。
示例输出:
要查看有关 USB 设备的详细信息,请运行以下命令。
示例输出:

USB 示例

QCS6490:https://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts 有关 USB 驱动中 RPM 更改及其他示例的信息,请参阅 https://patchwork.kernel.org/project/linux-usb/list/?series=793939&archive=both 有关如何扁平化设备树的信息,请参阅 https://lore.kernel.org/all/af60c05b-4a0f-51b8-486a-1fc601602515@quicinc.com/https://lore.kernel.org/all/20231016-dwc3-refactor-v1-0-ab4a84165470@quicinc.com/ \