同时挂载二维码模块与4G模块时,导致4G模块连不上网都是USB设备)

article/2025/9/20 2:26:08

一、BUG现象

今天公司设备出现一个问题,在RK3399上的USB上插着三个设备,分别是4G模块、二维码模块与身份证模块,在这三个设备同时插在设备上时再开机,会出现4G模块连不上网络的情况,无论怎么插拔4G模块都无法联网。而这时把二维码模块拔出,只留身份证模块与4G模块,并重启开机,则可以正常的上网,4G模块通信正常,此时再把二维码模块重新插回,也工作正常。

此时我非常的迷茫,甚至想跑路。。。。。。

二、分析原因

在冷静的分析一番后,我发现一个问题在二维码模块挂载后,无论怎么去挂载4G模块都是失败的,而只要是4G模块比二维码模块先挂载就不会有问题,初步的分析是二维码模块与4G模块的挂载冲突造成的。所以下面来分析这两个设备的挂载。

2.1 二维码模块

二维码模块在挂载后会在/dev下生成ttyACM0节点,ACM并不是设备生成的,而是内核分配的名字含义如下:

USB CDC ACM(虚拟串口)

  • CDC-ACM (Abstract Control Model 抽象控制模型)允许任何通信设备提供串行通信接口(例如发送和接收AT命令的调制解调器设备)。该设备类型是在PSTN(Public Switched Telephone Network)中定义的。
  • CDC-ACM驱动程序将USB设备作为虚拟调制解调器或虚拟COM端口暴露给操作系统。驱动程序可以通过ACM(通过不同通道分离数据和AT命令)或通过串行仿真(按原样传递AT命令和作为数据流的一部分)发送数据和AT命令。

什么是ttyACM?

USB 实施者论坛组织已经描述了符合通信设备类 (CDC) 的设备应如何将自己呈现给 USB 主机。 USB 实现者论坛还指定了 CDC 子类应如何操作,包括那些旨在通过公共交换电话网络 (PSTN) 相互通信的设备。这些被称为调制解调器,因为数据在发送端经过调制操作,将比特转换为可以通过电话线传输的模拟信号,然后通过接收端的解调操作将模拟信号转换回原始位。

要与调制解调器讨论,主机 USB 驱动程序必须使用现有控制模型之一。例如,直接线路控制模型控制主机和调制解调器之间如何通过音频类接口交换数据,主机负责调制、解调、数据压缩(如V.42bis)和纠错(如如 V.42)。这种模型被一些USB软调制解调器使用,它们非常便宜,因为它们大多包含一个DSP芯片和一些放大和线路适配层。

另一个控制模型,恰当地命名为抽象控制模型或 ACM,让调制解调器硬件执行模拟功能,并要求它支持 ITU V.250(以前也称为 Hayes)命令集,无论是在数据流或作为单独的控制流通过通信类接口。当命令与数据流中的数据复用时,诸如 Hayes 302(也称为“1 sec +++ 1 sec”)或 TIES(没人记得)之类的转义序列必须允许主机将调制解调器放入命令模式。

在需要通过 USB 与计算机交换数据的支持 USB 的嵌入式微控制器上进行开发时,很容易使用几乎所有操作系统都支持的标准化通信方式。这就是为什么大多数人选择使用 ACM 实现 CDC/PSTN(您是否注意到 /dev/ttyACM0 的 Linux 内核驱动程序名为 cdc_acm?),因为它是交换原始数据的最简单方法。

但是强制性的 V.250 命令集呢?它几乎从未在此类设备中实现,但由于主机没有理由自行生成 V.250 命令,因此设备将永远不必回答它们。假装嵌入式设备是调制解调器是与其通信的最简单方式,即使它可能永远不会执行任何调制或解调任务。 Linux 不会知道该设备在撒谎,而是将其显示为 /dev/ttyS0。

源代码位置为cdc_acm.c中:

截图

在有ttyACM设备挂载后,就会调用到acm_probe()中

截图

当处理完成后会就打印出ACM的编号。

截图

截图

2.2 4G模块

4G模块在内核中的显示为ttyUSBx,

2.2.1什么是ttyUSB?

有时,嵌入式微控制器不带有硬件 USB 接口。虽然可以使用纯软件USB 堆栈,但 CPU 的额外限制和通常较小的存储空间通常会导致电路板设计人员包含专用的 UARTUSB 桥接器。一些供应商,例如 FTDIProlific,以几欧元的价格出售专用芯片。

这些供应商选择不向主机撒谎,让芯片宣布自己是 USB 调制解调器,而实际上它们不是。每个供应商都定义了自己的(通常是专有的)协议,其中的命令允许控制芯片的功能,例如设置波特率或控制用于实现硬件流控制的附加信号。

如果可行,Linux 会将具有相似功能的设备分组到相同的默认设备或接口名称下。例如,您计算机上的 UART(如果有)将被命名为 /dev/ttyS0/dev/ttyS1,即使其中一个是传统的 16550芯片,另一个是 MAX3100 SPI 控制的 UART。同样,提供 UART-over-USB 功能的设备被命名为 /dev/ttyUSB0/dev/ttyUSB1 等,即使它们实际上使用不同的设备驱动程序。

也就是说ttyUSBuartUSB设备。

在drivers/usb/serial/bus.c中ttyUSB设备接入会进入此,并打印log:

三、处理方法

因为是二维码模块先挂载后导致4G模块连不上网络,所以就先时4G模块先行挂载,然后再挂载二维码模块,处理方法是在cdc_acm.cacm_probe中添加延时函数:

截图

实验成功,方法有点暴力。


http://chatgpt.dhexx.cn/article/OCayLY6C.shtml

相关文章

工业4G路由器 小体积4G LTE通信模块转有线转WiFi充电桩视频安防监控物联网路由器上网CPE

4G LTE代表第四代长期演进,这是一种用于通过蜂窝网络提供高速数据传输的无线通信技术。它是移动网络技术的最新标准,提供比其前身3G更快的数据传输速度。它广泛用于移动设备、物联网设备和机器对机器通信。 近年来,随着物联网技术的快速发展…

如何在飞腾平台使用4G模块拨号上网

经常看到在笔记本上可以通过插无线网卡进行wifi连接上网,鲜有使用4G模块进行上网的。但是在某些场景下,没有wifi信号,要如何解决上网问题呢?一般可以通过usb共享手机网络,或者外接4G网卡进行上网。通常在windows 平台上…

windows10使用4G模块上网

1、硬件配置 1)华为4G模块:HUAWEI ME909s-821 2)PCIE转USB开发板 3)联通4G手机SIM卡 4)装有windows10的电脑 2、软件环境 下载安装华为4G模块驱动:http://www.ddooo.com/softdown/73296.htm 3、环境搭建…

实现4G模块EC20在linux系统下的拨号上网

前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。 1.实验目的: 实现4G模块EC20在linux系统下的拨号上网…

4G无线模块 电力通信模块

4G无线模块TD210,标准通讯接口及协议,电力规约、环保212、MODBUS-RTU协议等,通过串口的形式采集各种电力参数,电压,电流,有功功率,无功功率,有功电度,无功电度&#xff0…

thinkpad x270 加装内置4G模块实现移动上网的记录

手上有一个thinkpad x270,固态硬盘,运行流畅,看到新出产的x1、x13标配4G上网,不免心中有点馋,因此计划对x270加装4g模块。 通过观看拆机视频,发现这货与x250等机型一样,有一个m.2 key B 的接口…

Ubuntu下使用4g模块、4G模组上网,USB接口,图形界面

Ubuntu下4g上网配置。 一、接入网卡并查看。 msubuntu:~$ l /dev/ttyU* /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 msubuntu:~$Interface Description: Interface Description DM InterfaceDiagnose portNMEA InterfaceFor GPS NMEA message outpu…

树莓派搭载EC200U 4G模块(USB网卡上网和PPP拨号上网)

文章目录 一、EC200U模块4G模块介绍二、USB转串口驱动设置(1)打开树莓派的串口(2)lsusb是否有EC200U模块(3)添加 VID 和 PID 信息 三、USB网卡驱动上网四、PPP协议(1)PPP协议介绍1.1…

配置 4G 模块为WAN口上网

配置 4G 模块为WAN口上网 将Linux板卡配置为交换机或路由器,提供类似路由器的上网功能。这里以4G网卡作为WAN进行上网。 一、使用网桥上网 1. 配置4G模块为默认网关 先配置好4G模块为默认路由网关。 这里需要先将4G模块配置为路由模式。4G模块路由模式和网卡模…

safeAreaLayoutGuide

https://www.jianshu.com/p/9d68a220983b Safe Area Layout Guide对应的SafeArea特性使用(DeploymentTarget9.0及后) 解决方案: 1. DeploymentTarget 9.0及后 2. DeploymentTarget 8.0

Safety-0

写在前面 好记性不如烂笔头,很多知识久了不用会渐渐生疏,故此以文章的形式进行记录。但干干的知识点又不符合本人的风格,故此产生了Safety,一个主要用于记录学习Mybatis和SpringBoot的项目。 Safety 是基于Mybatis实现的加解密插…

NetworkSecurity

一、CSRF 参考链接 1.定义 (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF&#…

Web端安全测试--IBM Security AppScan Standard 工具使用手册

1、工具的使用原理 1.1工作原理 (1)通过探索了解整个web页面结果(2)通过分析,使用扫描规则库对修改的HTTP Request进行攻击尝试(3)分析 Response 来验证是否存在安全漏洞 1.2 AppScan的工作过…

【Safety】简介

XSS 涉及面试题:什么是 XSS 攻击?如何防范 XSS 攻击?什么是 CSP? XSS是什么 XSS 简单点来说,就是攻击者想尽一切办法将可执行的代码注入到网页中 XSS分类边界 XSS 可以分为多种类型,但是总体上认为分为两…

Electron Security Warning (Insecure Content-Security-Policy) 告警解决

Electron Security Warning (Insecure Content-Security-Policy) 告警解决 Electron的Console控制台出现如下告警时: 是安全策略的设置告警,意思是内容安全策略没有设置,或者使用了unsafe-eval的安全设置。如果想要不出现上述告警&#xff…

AppScan,web安全测试

操作手册 登录到站点 扫描过程中有提示登录的,就手动登录 待自动扫描结束后,再手动探索,在被测web页面上手动探索结束后点击确定记录你手动提交的请求,然后【继续仅测试】,等待测试结束 结果分析、生成报告 问题默认是…

SafetyNet使用机器学习策略的真实世界自动驾驶车辆的安全规划(一)

本文主要是SafetyNet的框架概述。 1. 前言 文中提到了传统的决策规划的方法,主要有基于规则的方法和基于学习的方法。该论文提出了一种新的方法(文章自己说是新的,最主要的原因是该方法在洛杉矶进行了道路测试。) 但是这里的Fal…

【译】Using the SafetyNet API (使用SafetyNet API)

该SafetyNet Attestation API是谷歌播放服务的API,任何开发人员都能以获得一定程度的保证,使用他们的应用程序正在运行的设备是“CTS兼容。” CTS代表兼容性测试套件,这是测试套件设备必须在发布前通过,才能包含Google Play服务。…

GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

1.Goole在今年6月份出的新政策,不在使用safetynet,而使用Play Integrity API。 2.项目本身没有使用过safetynet。 3.使用了firebase。查阅资料,解决方案如下: implementation platform(com.google.firebase:firebase-bom:30.2.…

SafetyNet 漏洞rootutils 利用

1、https://developers.google.com/android/guides/setup 添加SatetyNet 服务 2、https://developers.google.cn/android/reference/com/google/android/gms/safetynet/SafetyNet API 3、https://koz.io/inside-safetynet/ https://blog.csdn.net/gulinxieying/art…