【EC200N-CN——Linux驱动移植】问题回顾
1)、开发回顾
一、问题回顾与解决过程
问题背景:
IMX8开发板运行Linux 5.4内核,插入EC200N-CN模块后,仅生成usb0网络接口,但未生成串口节点(如ttyUSB0、ttyUSB1等),导致无法通过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) }

添加后,模块插入时生成ttyUSB0、ttyUSB1、ttyUSB2节点,并可通过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,导致内核误认为该设备不需要USB转串口驱动option,仅加载了网络驱动(cdc_ether)。
• 结果:仅生成usb0网络接口,无串口节点/dev/ttyUSB。
3. 为什么添加PID后就能生成节点?
• 驱动绑定:添加PID后,内核的option驱动会主动接管设备,并为每个串口接口创建ttyUSB节点。
• 多接口设备:EC200N-CN是一个复合设备,包含:
• 接口1:cdc_ether驱动(网络功能,生成usb0)。
• 接口2/3/4:USB转串口option驱动(生成ttyUSB0、ttyUSB1、ttyUSB2)。
三、日志关键信息解读
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

最低0.47元/天 解锁文章
616

被折叠的 条评论
为什么被折叠?



