匠芯创 D213ECX Luban SDK 适配移远 EC20 4G 模块完整指南

张开发
2026/5/31 10:51:59 15 分钟阅读
匠芯创 D213ECX Luban SDK 适配移远 EC20 4G 模块完整指南
一、引言最近在调试匠芯创D213Luban SDKLinux 5.10 内核开发板时测试了一款移远 EC20 4G 模块。EC20 是一款经典的 LTE Cat 4 模块支持 USB 接口在 Linux 下通常通过 CDC-ACM 或 QMI-WWAN 方式驱动。但在默认的 Luban SDK 中内核配置和驱动并不完全支持该模块导致插入模块后无法生成网络接口wwan0。经过一番调试我整理了一套完整的适配方案包括内核驱动配置USB 串口驱动修改解决接口冲突QMI 网络驱动优化PPP 拨号工具集成二、硬件准备开发板D213Luban SDK4G 模块移远 EC20或 EC20 R2.0 / EC21 / UC20 等连接方式EC20 通过 USB 接口连接到开发板通常使用 USB 端口或 Mini PCIe 转 USB 电路SIM 卡已激活且 APN 正确的 4G SIM 卡天线连接主天线和分集天线GNSS 可选三、软件适配概述本次适配涉及三大部分内核配置开启 PPP、USB 网络、USB 串口等必要选项。内核驱动修改修改 option.c、qcserial.c、qmi_wwan.c 等文件使内核能正确识别 EC20 的多个接口并避开冲突。用户空间工具在 Buildroot 中添加 pppd 拨号工具。四、详细修改步骤1. 内核配置修改make kernel-menuconfig(或者make km)中添加以下配置启用 PPP 协议、USB 网络及 USB 串口支持或者在 linux-5.10/arch/riscv/configs/d211_demo128_nand_defconfig 中添加然后拷贝到output/d211_demo128_nand/build/linux-5.10/.config# PPP 协议支持CONFIG_PPPyCONFIG_PPP_BSDCOMPyCONFIG_PPP_DEFLATEyCONFIG_PPP_FILTERyCONFIG_PPP_MPPEyCONFIG_PPP_MULTILINKyCONFIG_PPPOEyCONFIG_PPP_ASYNCyCONFIG_PPP_SYNC_TTYy# USB 网络驱动用于 QMI 接口CONFIG_USB_USBNETyCONFIG_USB_NET_QMI_WWANy# USB 串口驱动用于 AT 命令及数据通道CONFIG_USB_SERIALyCONFIG_USB_SERIAL_QUALCOMMyCONFIG_USB_SERIAL_OPTIONyCONFIG_USB_ACMy2. 驱动代码修改2.1 option.c添加模块 ID 并跳过网络接口在 drivers/usb/serial/option.c 中首先添加 EC20 系列模块的 VID/PIDstatic const struct usb_device_id option_ids[] {{ USB_DEVICE(0x05C6, 0x9090) }, // UC15{ USB_DEVICE(0x05C6, 0x9003) }, // UC20{ USB_DEVICE(0x05C6, 0x9215) }, // EC20{ USB_DEVICE(0x2C7C, 0x0125) }, // EC20 R2.0// ... 原有条目};关键修改在 option_attach 函数中对于 EC20/UC20 等模块跳过接口编号 ≥ 4 的接口因为这些接口用于网络功能QMI不应该被串口驱动绑定。static int option_attach(struct usb_serial *serial){// ... 原有代码// 跳过 UC20 的网络接口if (serial-dev-descriptor.idVendor cpu_to_le16(0x05C6) serial-dev-descriptor.idProduct cpu_to_le16(0x9003) serial-interface-cur_altsetting-desc.bInterfaceNumber 4)return -ENODEV;// 跳过 EC20 的网络接口if (serial-dev-descriptor.idVendor cpu_to_le16(0x05C6) serial-dev-descriptor.idProduct cpu_to_le16(0x9215) serial-interface-cur_altsetting-desc.bInterfaceNumber 4)return -ENODEV;// 跳过 EC20 R2.0 / EC21 / EC25 的网络接口if (serial-dev-descriptor.idVendor cpu_to_le16(0x2C7C) serial-interface-cur_altsetting-desc.bInterfaceNumber 4)return -ENODEV;// ... 原有代码}2.2 qcserial.c 与 qmi_wwan.c解决 ID 冲突原内核中0x05c6:0x9215 这个 ID 同时出现在 qcserial 和 qmi_wwan 的匹配表中会导致设备被错误绑定。解决方法是注释掉 qcserial 和 qmi_wwan 中的该条目统一交给 option 驱动处理。在 drivers/net/usb/qmi_wwan.c 中// { QMI_GOBI_DEVICE(0x05c6, 0x9215) }, // 注释该行{ QMI_FIXED_INTF(0x05c6, 0x9215, 4) }, // 保留这一行用于 QMI 网络在 drivers/usb/serial/qcserial.c 中// { USB_DEVICE(0x05c6, 0x9215) }, // 注释该行2.3 usb_wwan.c 与 cdc-acm.c添加零包处理某些 EC20 模块在 USB 传输时需要发送零包ZLP才能正确结束数据传输。我们在 USB 传输的 URB 标志中添加 URB_ZERO_PACKET。在 drivers/usb/serial/usb_wwan.c 的 usb_wwan_setup_urb 函数中if (dir USB_DIR_OUT) {struct usb_device_descriptor *desc serial-dev-descriptor;if (desc-idVendor cpu_to_le16(0x05C6) (desc-idProduct cpu_to_le16(0x9090) ||desc-idProduct cpu_to_le16(0x9003) ||desc-idProduct cpu_to_le16(0x9215)))urb-transfer_flags | URB_ZERO_PACKET;if (desc-idVendor cpu_to_le16(0x2C7C))urb-transfer_flags | URB_ZERO_PACKET;}在 drivers/usb/class/cdc-acm.c 中为特定设备添加相同标志if (usb_dev-descriptor.idVendor 0x1519 usb_dev-descriptor.idProduct 0x0020)snd-urb-transfer_flags | URB_ZERO_PACKET;2.4 usb-serial.c支持复位唤醒添加 reset_resume 回调确保系统从挂起恢复后 USB 串口能正常工作udriver-reset_resume usb_serial_resume;3. 用户空间工具配置在 Buildroot 配置中添加 pppd 拨号工具用于建立 PPP 连接。make menuconfig(或者make m)添加以下配置:或者修改 target/configs/d211_demo128_nand_defconfig 后拷贝到output/d211_demo128_nand/.configBR2_PACKAGE_PPPDyBR2_PACKAGE_PPPD_FILTERyBR2_PACKAGE_PPPD_RADIUSy五、验证与测试1. 检查 USB 设备识别插入 EC20 模块后执行 lsusb应看到类似输出ID 05c6:92152. 查看串口设备ls /dev/ttyUSB*应出现多个设备如 ttyUSB0AT 命令口、ttyUSB1数据传输口、ttyUSB2GPS 口等。若只有 ttyUSB0 到 ttyUSB3但缺少网络接口属正常——因为网络接口已被 QMI 驱动接管。3. 查看网络接口ifconfig -a应出现一个新的网络接口名为 wwan0 。4. 使用 PPP 拨号创建配置目录 /etc/ppp/peers/ 然后把附件中的wcdma wcdma-chat-connect wcdma-chat-disconnect拷贝进去。执行拨号pppd call wcdma成功后使用 ifconfig ppp0 查看分配的 IP并测试网络连通性ping 8.8.8.8六、常见问题及解决[td]现象可能原因解决方法lsusb 看不到设备USB 供电不足或硬件连接问题检查 USB 线缆、电源确保模块供电 3.8V~4.2V出现 ttyUSB0 但无法 AT 通信串口驱动未正确绑定确认 option 驱动是否加载lsmod | grep option没有 wwan0 接口QMI 驱动未加载或冲突检查 qmi_wwan 是否加载并确认 dmesg 有无错误PPP 拨号失败日志显示 LCP timeoutAPN 或用户名/密码错误核对运营商 APN如中国联通为 3gnet中国电信为 ctnet网络卡顿或断流USB 零包未开启确认修改的 URB_ZERO_PACKET 是否生效七、总结通过以上步骤成功在匠芯创 D213ECX Luban SDK 上适配了 EC20 4G 模块实现了 PPP 拨号上网。整个过程涉及内核配置、驱动代码优化和用户空间工具的整合。其中最关键的是正确处理 EC20 多接口特性避免串口驱动与网络驱动冲突并为特定 USB 传输添加零包标志。附件[attach]7548[/attach]

更多文章