【EC200N-CN——Linux驱动移植】问题回顾

news2025/4/11 22:29:25

【EC200N-CN——Linux驱动移植】问题回顾

  • 1)、开发回顾
      • 一、问题回顾与解决过程
      • 二、核心原理分析
        • 1. **USB设备识别的关键:VID/PID**
        • 2. **为什么之前不生成`ttyUSB`节点?**
        • 3. **为什么添加PID后就能生成节点?**
      • 三、日志关键信息解读
        • 1. **USB设备识别日志**
        • 2. **端点(Endpoint)配置修正**
        • 3. **网络接口注册**
        • 4. **串口节点生成**
      • 四、技术细节详解
        • 1. **为什么能通过`ttyUSB2`发AT指令?**
        • 2. **为什么能通过`usb0`上网?**
        • 3. **为什么不需要修改内核配置?**
      • 五、总结与拓展
        • 1. **问题根源**
        • 2. **EC200N-CN的接口功能**
        • 3. **测试验证方法**
        • 4. **潜在优化方向**
  • 2)开发中遇到问题的详细解析(重点!)
      • 一、核心问题解析
        • 1. **为什么初始状态下直接插上EC200N-CN模块就能上网(`ping www.baidu.com`),但不能发短信/打电话?**
        • 2. **为什么添加`USB_DEVICE(0x2C7C, 0x6002)`后功能正常?**
      • 二、专业术语全称与解释
        • 1. **关键术语解析**
        • 2. **其他重要概念**
      • 三、日志逐行分析
        • 1. **USB设备检测**
        • 2. **速度警告**
        • 3. **端点配置修复**
        • 4. **网络接口注册**
        • 5. **串口节点生成**
      • 四、总结
        • 1. **功能实现流程**
        • 2. **关键结论**

1)、开发回顾

一、问题回顾与解决过程

问题背景
IMX8开发板运行Linux 5.4内核,插入EC200N-CN模块后,仅生成usb0网络接口,但未生成串口节点(如ttyUSB0ttyUSB1等),导致无法通过AT指令控制模块(如打电话、发短信)。

最终解决方案
在Linux内核的option.c(路径:/home/hugo/IMX8/Kernel/Linux-5.4.70/drivers/usb/serial/opticon.c)驱动代码中的usb_device_id option_ids[]数组,添加EC200N-CN的USB设备标识符:

{ USB_DEVICE(0x2C7C, 0x6002) }, // EC200N-CN的VID/PID
{ USB_DEVICE_AND_INTERFACE_INFO(0x2C7C, 0x6002, 0xff, 0xff, 0xff) }

在这里插入图片描述

添加后,模块插入时生成ttyUSB0ttyUSB1ttyUSB2节点,并可通过usb0上网。


二、核心原理分析

1. USB设备识别的关键:VID/PID

VID(Vendor ID):厂商标识符(Quectel的VID是0x2C7C)。
PID(Product ID):产品标识符(EC200N-CN的PID是0x6002)。
驱动匹配规则:内核通过VID/PID匹配对应的驱动程序。若未在驱动代码中声明支持的VID/PID,设备将无法被正确驱动。

2. 为什么之前不生成ttyUSB节点?

原因:原内核的option.c驱动未包含EC200N-CN的PID 0x6002,导致内核误认为该设备不需要串口驱动,仅加载了网络驱动(cdc_ether)。
结果:仅生成usb0网络接口,无串口节点。

3. 为什么添加PID后就能生成节点?

驱动绑定:添加PID后,内核的option驱动会主动接管设备,并为每个串口接口创建ttyUSB节点。
多接口设备:EC200N-CN是一个复合设备,包含:
接口1cdc_ether(网络功能,生成usb0)。
接口2/3/4:串口功能(生成ttyUSB0ttyUSB1ttyUSB2)。


三、日志关键信息解读

1. USB设备识别日志
[ 2671.047488] usb 1-1.3: new full-speed USB device number 11 using ci_hdrc

含义:检测到USB设备插入,总线位置为1-1.3,设备号为11

2. 端点(Endpoint)配置修正
[ 2671.168245] usb 1-1.3: config 1 interface 1 altsetting 1 endpoint 0x83 has invalid maxpacket 512, setting to 64

背景知识
端点(Endpoint):USB设备的数据通道,分为输入(IN)和输出(OUT)。
maxpacket:单次传输的最大数据包大小。
问题:EC200N-CN的端点报告了不兼容的maxpacket=512(USB全速设备最大应为64)。
内核修复:自动将maxpacket修正为64,确保数据传输正常。

3. 网络接口注册
[ 2671.195854] cdc_ether 1-1.3:1.0 usb0: register 'cdc_ether' at usb-ci_hdrc.1-1.3

含义cdc_ether驱动接管网络接口,生成usb0,用于4G上网。

4. 串口节点生成
[ 2671.207914] option 1-1.3:1.2: GSM modem converter detected
[ 2671.216275] usb 1-1.3: GSM modem converter now attached to ttyUSB0

含义option驱动识别到串口接口,生成ttyUSB0ttyUSB1ttyUSB2节点。


四、技术细节详解

1. 为什么能通过ttyUSB2发AT指令?

AT指令:一种基于文本的命令协议,用于控制调制解调器(如拨号、发短信)。
串口分工
ttyUSB0:用于调制解调器控制(PPP拨号)。
ttyUSB1:用于GPS定位(如果模块支持)。
ttyUSB2:专用AT指令通道。

2. 为什么能通过usb0上网?

CDC-ECM模式:EC200N-CN通过USB模拟以太网卡,内核的cdc_ether驱动将其识别为usb0,提供TCP/IP网络功能。
直接联网:无需PPP拨号,插入后自动获取IP(需运营商支持)。

3. 为什么不需要修改内核配置?

默认配置已包含

CONFIG_USB_SERIAL=y          # 启用USB串口支持
CONFIG_USB_SERIAL_OPTION=y   # 启用option驱动(支持高通、华为等模块)
CONFIG_USB_NET_CDCETHER=y    # 启用CDC-ECM网络驱动

• 如果默认配置未启用这些选项,仍需通过menuconfig手动开启。


五、总结与拓展

1. 问题根源

EC200N-CN的PID未被内核驱动识别,导致串口功能未启用。添加PID后,驱动正确绑定设备,功能全部激活。

2. EC200N-CN的接口功能
接口功能对应节点
Interface 0CDC-ECM(网络)usb0
Interface 2调制解调器控制ttyUSB0
Interface 3辅助端口(调试)ttyUSB1
Interface 4AT指令端口ttyUSB2
3. 测试验证方法

AT指令测试

echo -e "AT\r\n" > /dev/ttyUSB2  # 发送AT指令
cat /dev/ttyUSB2                 # 查看响应(应返回"OK")

在这里插入图片描述
在这里插入图片描述

网络测试

ping www.baidu.com -I usb0       # 通过4G网络ping百度
4. 潜在优化方向

驱动补丁提交:将EC200N-CN的PID提交给Linux内核社区,避免后续用户手动修改。
电源管理:通过AT指令AT+CFUN=1启用模块全功能模式,确保网络稳定性。


2)开发中遇到问题的详细解析(重点!)

为什么直接插上EC200N-CN就能直接ping www.baidu.com了?但是却不能发短信和打电话?
难道是原本就可以发短信和打电话,只是因为没有设备节点(/dev/ ttyUSB0~2)去发送AT指令来发短信和打电话吗?

然后后面配置了下面两行代码才可以?

{ USB_DEVICE(0x2C7C, 0x6002) }, // EC200N-CN的VID/PID
{ USB_DEVICE_AND_INTERFACE_INFO(0x2C7C, 0x6002, 0xff, 0xff, 0xff) }, // 强制绑定到option驱动

下面还会详细分析这串打印的东西:
[ 2671.047488] usb 1-1.3: new full-speed USB device number 11 using ci_hdrc
[ 2671.160615] usb 1-1.3: not running at top speed; connect to a high speed hub
[ 2671.168245] usb 1-1.3: config 1 interface 1 altsetting 1 endpoint 0x83 has invalid maxpacket 512, setting to 64
[ 2671.178398] usb 1-1.3: config 1 interface 1 altsetting 1 endpoint 0xC has invalid maxpacket 512, setting to 64
[ 2671.195854] cdc_ether 1-1.3:1.0 usb0: register ‘cdc_ether’ at usb-ci_hdrc.1-1.3, CDC Ethernet Device, ae:0c:29:a3:9b:6d
[ 2671.207914] option 1-1.3:1.2: GSM modem (1-port) converter detected
[ 2671.216275] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB0
[ 2671.224051] option 1-1.3:1.3: GSM modem (1-port) converter detected
[ 2671.230833] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB1
[ 2671.238673] option 1-1.3:1.4: GSM modem (1-port) converter detected
[ 2671.245367] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB2


一、核心问题解析

1. 为什么初始状态下直接插上EC200N-CN模块就能上网(ping www.baidu.com),但不能发短信/打电话?

网络功能(usb0
• EC200N-CN模块默认启用了 CDC-ECM模式Communication Device Class - Ethernet Control Model)。
CDC-ECM:一种USB协议,允许设备模拟成以太网卡,内核的cdc_ether驱动会自动识别并创建usb0接口。
直接联网:只要SIM卡正常且运营商支持,插入模块后即可通过usb0直接访问互联网,无需额外配置。

短信/电话功能缺失原因
AT指令依赖串口:发送短信/电话需要通过AT指令Attention Commands)控制模块进行操作,但是AT指令必须通过设备节点/dev/ttyUSB2,通过串口(如ttyUSB2)的方式发送给4G模块才行,所以就i是没有设备节点。
初始驱动未匹配
◦ 未添加VID/PID时,内核的option驱动(USB串口通用驱动)无法识别EC200N-CN的串口接口。
◦ 结果:仅加载网络驱动(cdc_ether),未生成ttyUSB节点,导致无法发送AT指令。

2. 为什么添加USB_DEVICE(0x2C7C, 0x6002)后功能正常?

驱动匹配机制
VID/PIDVendor ID/Product ID):内核通过这两个16进制数值唯一标识USB设备。
• 添加0x2C7C(Quectel厂商ID)和0x6002(EC200N-CN产品ID)后,option驱动会主动绑定设备。
结果:驱动为每个串口接口生成ttyUSB节点(如ttyUSB2用于AT指令),使短信/电话功能可用。


二、专业术语全称与解释

1. 关键术语解析
术语全称解释
GSM modem (1-port)Global System for Mobile Communications Modem支持GSM网络的调制解调器,"1-port"表示驱动为每个接口分配一个串口(实际可能有多个接口)。
cdc_etherCDC Ethernet Control ModelUSB协议的一种,允许设备模拟以太网卡,提供TCP/IP网络功能。
option驱动USB Serial Option DriverLinux内核中用于支持高通、华为等厂商USB调制解调器的通用串口驱动。
ci_hdrcChipIdea High-Speed Dual-Role ControllerIMX8芯片的USB控制器驱动,负责管理USB主机/设备模式切换。
altsettingAlternate SettingUSB接口的备选配置,用于切换接口的不同工作模式(如不同传输速率)。
endpointUSB EndpointUSB设备的数据通道,每个端点有方向(IN/OUT)和传输类型(控制/批量/中断/等时)。
2. 其他重要概念

AT指令Attention Commands,用于控制调制解调器的文本指令集(如ATD10086拨打电话)。
maxpacket:USB端点单次传输的最大数据包大小(单位:字节)。
ttyUSB:Linux中USB串口设备的命名规则,tty表示"Teletype Terminal",USB表示接口类型。


三、日志逐行分析

1. USB设备检测
[ 2671.047488] usb 1-1.3: new full-speed USB device number 11 using ci_hdrc

1-1.3:设备在USB总线上的位置(总线1-端口1.3)。
full-speed:USB 1.1速度(12 Mbps),非高速(High-Speed, 480 Mbps)。
ci_hdrc:IMX8的USB控制器驱动已接管设备。

2. 速度警告
[ 2671.160615] usb 1-1.3: not running at top speed; connect to a high speed hub

原因:EC200N-CN工作在USB 1.1模式,但连接到了USB 2.0或3.0控制器。
建议:使用USB 2.0集线器避免兼容性警告(实际不影响功能)。

3. 端点配置修复
[ 2671.168245] usb 1-1.3: config 1 interface 1 altsetting 1 endpoint 0x83 has invalid maxpacket 512, setting to 64
[ 2671.178398] usb 1-1.3: config 1 interface 1 altsetting 1 endpoint 0xC has invalid maxpacket 512, setting to 64

endpoint 0x83:端点地址(0x83表示IN端点,编号3)。
maxpacket=512:USB全速设备端点最大应为64字节,内核自动修正为64。
影响:避免因数据包过大导致传输错误。

4. 网络接口注册
[ 2671.195854] cdc_ether 1-1.3:1.0 usb0: register 'cdc_ether' at usb-ci_hdrc.1-1.3, CDC Ethernet Device, ae:0c:29:a3:9b:6d

usb0:生成的网络接口名称。
ae:0c:29:a3:9b:6d:随机生成的MAC地址(若模块未提供固定地址)。

5. 串口节点生成
[ 2671.207914] option 1-1.3:1.2: GSM modem (1-port) converter detected
[ 2671.216275] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB0
[ 2671.224051] option 1-1.3:1.3: GSM modem (1-port) converter detected
[ 2671.230833] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB1
[ 2671.238673] option 1-1.3:1.4: GSM modem (1-port) converter detected
[ 2671.245367] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB2

1-1.3:1.2:设备总线位置和接口编号(接口2)。
ttyUSB0~ttyUSB2:三个串口节点,分别用于不同功能:
ttyUSB0:调制解调器控制(PPP拨号)。
ttyUSB1:调试或辅助通道。
ttyUSB2:AT指令通道(用于发短信/打电话)。


四、总结

1. 功能实现流程
  1. 插入模块 → 内核检测到USB设备,但未匹配串口驱动。
  2. 加载cdc_ether驱动 → 创建usb0,支持上网。
  3. 在option.c源文件添加VID/PIDoption驱动绑定设备,生成ttyUSB节点。
  4. 通过ttyUSB2发送AT指令 → 控制模块发短信/打电话。
2. 关键结论

CDC-ECM模式:模块默认支持,无需配置即可上网。
AT指令依赖串口:必须通过ttyUSB节点通信,驱动未匹配时节点缺失。
内核驱动的VID/PID匹配:是激活串口功能的核心条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2330277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

构建k8s下Helm私有仓库与自定义Chart开发指南

#作者:程宏斌 文章目录 自定义helm模板1、开发自己的chare包2、调试chart3、安装chart 自定义helm模板 https://hub.helm.sh/ 1、开发自己的chare包 [rootmaster ~]# helm create mychare //创建一个名为mychare的chare包 [rootmaster ~]# tree -C mychare/ //以…

【7】C#上位机---Modbus RTU 界面设计与封装

C#上位机---Modbus通讯 1 Modbus RTU 通讯1.1 RS485串口与串行通信(Serial Communications)1.2 Modbus RTU协议1.3 Modbus RTU主从模式1.4 Modbus 主从站模拟调试2 Modbus RTU 界面设计与封装2.1 温度控件的类属性2.2 C#封装Modbus实现通讯2.3 C#封装Modbus TRU通用类2.4 上位…

【嵌入式学习6】多任务版TCP服务器

目录 如何实现: 客户端1.0版本: 服务端: 客户端2.0版本: thread.join() 是一个线程同步方法,用于主线程等待子线程完成。当你调用 thread.join() 时,主线程会阻塞,直到调用 join() 的子线程…

每天认识一个设计模式-外观模式:化繁为简的接口魔法

一、前言 在设计模式中,结构型设计模式处理类或对象组合,可助力构建灵活、可维护软件结构。此前探讨过组合模式(将对象组合成树形结构,统一处理单个与组合对象,如文件系统管理)和装饰器模式(动…

VLAN(虚拟局域网)

一、vlan概述 VLAN(virtual local area network)是一种通过逻辑方式划分网络的技术,允许将一个物理网络划分为多个独立的虚拟网络。每一个vlan是一个广播域,不同vlan之间的通信需要通过路由器或三层交换机 [!注意] vlan是交换机独有的技术,P…

Transformers without Normalization论文翻译

论文信息: 作者:Jiachen Zhu, Xinlei Chen, Kaiming He, Yann LeCun, Zhuang Liu 论文地址:arxiv.org/pdf/2503.10622 代码仓库:jiachenzhu/DyT: Code release for DynamicTanh (DyT) 摘要 归一化层在现代神经网络中无处不在…

题目练习之set的奇妙使用

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

网站提示“不安全“怎么办?原因分析与解决方法

引言:为什么浏览器会提示网站"不安全"? 当您访问某些网站时,浏览器可能会显示"不安全"警告。这通常意味着该网站存在安全风险,可能影响您的隐私或数据安全。本文将介绍常见原因及解决方法,帮助您…

如何利用AI智能生成PPT,提升工作效率与创意表现

如何利用AI智能生成PPT,提升工作效率与创意表现!在这个信息爆炸的时代,制作一份既专业又富有创意的PPT,已经不再是一个简单的任务。尤其是对于每天都需要做报告、做展示的职场人士来说,PPT的质量直接影响着工作效率和个…

【数据结构】图论存储革新:十字链表双链设计高效解决有向图入度查询难题

十字链表 导读一、邻接表的优缺点二、十字链表2.1 结点结构2.2 原理解释2.2.1 顶点表2.2.2 边结点2.2.3 十字链表 三、存储结构四、算法评价4.1 时间复杂度4.2 空间复杂度 五、优势与劣势5.1 优势5.2 劣势5.3 特点 结语 导读 大家好,很高兴又和大家见面啦&#xff…

.net6 中实现邮件发送

一、开启邮箱服务 先要开启邮箱的 SMTP 服务,获取授权码,在实现代码发送邮件中充当邮箱密码用。 在邮箱的 设置 > 账号 > POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务中,把 SMTP 服务开启,获取授权码。 二、安装库 安装 …

【Linux】命令和权限

目录: 一、shell命令及运行原理 (一)什么是外壳 (二)为什么要有外壳 (三)外壳怎么工作的 二、Linux权限的概念 (一)Linux的文件类型 (二)L…

22.OpenCV轮廓匹配原理介绍与使用

OpenCV轮廓匹配原理介绍与使用 1. 轮廓匹配的基本概念 轮廓匹配(Contour Matching)是计算机视觉中的一种重要方法,主要用于比较两个轮廓的相似性。它广泛应用于目标识别、形状分析、手势识别等领域。 在 OpenCV 中,轮廓匹配主要…

深入解析AI绘画技术背后的人工智能

在当今数字艺术领域,AI绘画作为一种新兴艺术形式,正迅速吸引着越来越多的创作者与爱好者。它不仅推动了艺术创作的边界,同时也改变了我们对创作与美的理解。本文将深入探讨AI绘画所依赖的人工智能技术,并分析其背后的原理与应用。…

browser-use开源程序使 AI 代理可以访问网站,自动完成特定的指定任务,告诉您的计算机该做什么,它就会完成它。

一、软件介绍 文末提供程序和源码下载 browser-use开源程序使 AI 代理可以访问网站,自动完成特定的指定任务,浏览器使用是将AI代理与浏览器连接的最简单方法。告诉您的计算机该做什么,它就会完成它。 二、快速开始 使用 pip (Py…

java虚拟机---JVM

JVM JVM,也就是 Java 虚拟机,它最主要的作用就是对编译后的 Java 字节码文件逐行解释,翻译成机器码指令,并交给对应的操作系统去执行。 JVM 的其他特性有: JVM 可以自动管理内存,通过垃圾回收器回收不再…

2025数字中国初赛wp

一,取证与溯源 镜像文件解压密码:44216bed0e6960fa 1.运维人员误删除了一个重要的word文件,请通过数据恢复手段恢复该文件,文件内容即为答案。 先用R-stuido软件进行数据恢复 得到 打开重要文件.docx全选发现有一条空白的被选中…

c#和c++脚本解释器科学运算

说明: 我希望用c#和c写一个脚本解释器,用于科学运算 效果图: step1: c# C:\Users\wangrusheng\RiderProjects\WinFormsApp3\WinFormsApp3\Form1.cs using System; using System.Collections.Generic; using System.Data; using System.Tex…

青蛙吃虫--dp

1.dp数组有关元素--路长和次数 2.递推公式 3.遍历顺序--最终影响的是路长&#xff0c;在外面 其次次数遍历&#xff0c;即这次路长所有情况都更新 最后&#xff0c;遍历次数自然就要遍历跳长 4.max时时更新 dp版本 #include<bits/stdc.h> using namespace std; #def…

LINUX 5 cat du head tail wc 计算机拓扑结构 计算机网络 服务器 计算机硬件

计算机网络 计算机拓扑结构 计算机按性能指标分&#xff1a;巨型机、大型机、小型机、微型机。大型机、小型机安全稳定&#xff0c;小型机用于邮件服务器 Unix系统。按用途分&#xff1a;专用机、通用机 计算机网络&#xff1a;局域网‘、广域网 通信协议’ 计算机终端、客户端…