首页
/ OpenWrt中Huawei NCM调制解调器驱动问题的分析与解决

OpenWrt中Huawei NCM调制解调器驱动问题的分析与解决

2025-05-09 18:04:03作者:秋泉律Samson

在OpenWrt 24.10版本中,用户报告了使用Huawei E3306等NCM调制解调器时出现的接口设置失败问题。本文将深入分析该问题的根源,并提供完整的解决方案。

问题现象

当用户尝试在OpenWrt系统中配置NCM类型的wwan接口时,系统日志显示以下错误信息:

Interface 'wwan_ncm' is setting up now
' does not exist or is not an array/objectifd: wwan_ncm: WARNING: Variable 'huawei
wwan_ncm: Unsupported modem

根本原因分析

经过技术分析,发现问题出在/lib/netifd/proto/ncm.sh脚本的第93行。该行代码负责通过gcom工具从调制解调器获取制造商信息,但在处理返回结果时存在两个关键问题:

  1. 换行符处理不完善:调制解调器返回的文本中包含Windows风格的换行符\r\n,而脚本仅考虑了Linux风格的\n

  2. 空行处理缺陷:某些Huawei调制解调器(如E3372h)会在响应开头返回一个空行,导致awk错误地将回车符^M识别为制造商名称

解决方案

针对上述问题,我们提供两种解决方案:

方案一:简单过滤法

修改/lib/netifd/proto/ncm.sh第93行,添加tr命令过滤特殊字符:

manufacturer=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk 'NF && $0 !~ /AT\+CGMI/ { sub(/\+CGMI: /,""); print tolower($1); exit; }' | tr -d '\r\n')

方案二:全面处理法(推荐)

使用更完善的awk处理方式,同时兼容两种换行符并正确处理空行:

manufacturer=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk -v RS='\r?\n' 'NF && $0 !~ /AT\+CGMI/ { sub(/\+CGMI: /,""); print tolower($1); exit; }')

技术背景

NCM(Network Control Model)是USB调制解调器的一种通信协议标准。OpenWrt通过huawei_cdc_ncm内核模块支持Huawei设备的NCM功能。当系统识别到Huawei调制解调器时,会创建wwan0网络接口,然后通过ncm.sh脚本完成后续配置。

影响范围

该问题影响以下设备:

  • Huawei E3306
  • Huawei E3372系列(s/h型号)
  • 其他使用类似通信协议的Huawei调制解调器

验证方法

用户可以通过以下命令验证问题是否解决:

ubus call network.interface.wwan_ncm status | jsonfilter -e '@.up'

返回值为true表示接口已成功启动。

总结

OpenWrt系统中NCM协议支持对Huawei调制解调器的文本响应处理存在不足,导致接口配置失败。通过修改ncm.sh脚本中的文本处理逻辑,可以完美解决这一问题。建议用户采用方案二的修改方式,以获得更好的兼容性。

登录后查看全文
热门项目推荐
相关项目推荐