移远EC20是一个兼容性比较强的4G模块。我入手的这个是EC20 R2.1版本,pcie接口的,这个版本是增强版,支持最高150Mbps的下载速率,而普通的EC20只有100Mbps下载速率。这个是全功能版本的,外观如下:

要让4G模块上网,必须设置驱动。目前较新的openwrt基本上已经加入了该模块的支持,如果没有成功驱动则必须要另外注入驱动。下面就是修改源码,File : [KERNEL]/drivers/usb/serial/option.c,加入如下代码

staticconst struct usb_device_id option_ids[] = {
#if 1 //Added by Quectel
{ USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */
{ USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */
{ USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */
{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */
{ USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */
#endif

另外还要装一些内核插件。主要有以下几个:

Kmod -usb-core
Kmod -usb-net
     >> kmod-usb-net-qmi-wwan
     >> kmod-usb-net-rndis
Kmod-usb-ohci     //这个选项一定要勾选,否则可能无法在系统中查看设备
Kmod-usb-serial
Kmod-usb-serial-option
Kmod-usb-serial-wwan
kmod-usb-uhci
Kmod-usb2

EC20有4种上网模式,可以通过如下指令切换模式。

cat /dev/ttyUSB2 &
echo -e "AT+QCFG=\"usbnet\",0\r\n" > /dev/ttyUSB2   #设定模式0-3
echo -e "AT+CFUN=1,1\r\n" >/dev/ttyUSB2             #重启模块

四种模式分别为:

  • 0 RMNET接口,通过QMI工具发的QMI命令,获取公网IP。
  • 1 ECM接口,通过标准的CDC-ECM发起data call,是发送标准的ECM命令,获取局域网ip。
  • 2 MBIM接口,Mobile Broadband Interface Model,正宗的移动宽带接口模型,专门用于3G/4G/5G模块的,只在win8以上的windows上使用。
  • 3 RNDIS接口,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡获取局域网ip。

在openwrt下能用的主要是013模式,其中Rmnet模式的qmi拨号设置非常繁琐,需要在源码注入多处驱动,还要自编译拨号程序,所以就没有试,网上有相关教程。设置比较简单是ECM、RNDIS模式,这两种模式在设置上没什么区别,都是获取的局域网IP,就是安装的插件不一样。上面建议的插件已经都包含了两种模式所需。
在luci->网络->接口,设置wan接口,在物理设置选项卡里面设置,发现多了一项硬件接口(usb0,或者wwan),选中它,保存并应用设置,过一会儿就会发现路由器wan口获取到了192.168..的局域网IP地址。通过设置wan6口有可能可以获取ipv6,在ec20模块需要设置:

echo -e "AT+CGDCONT=1,\"IPV4V6\",\"3gnet\"\r\n" > /dev/ttyUSB2   #设置上下文
echo -e "AT+CGACT=1,1\r\n" > /dev/ttyUSB2     #激活上下文
echo -e "AT+CFUN=1,1\r\n" >/dev/ttyUSB2