完整适配LUCI界面的Openwrt中EC20的QMI拨号

目前4G模块应用已经非常普及,跟之前的3G不同,3G基本使用ppp拨号,usbserial驱动,Linux内核自带支持,此应用非常简单。

4G模块由于速率较高,usbserial驱动性能满足不了,因此4G的拨号方式就发生了变化。基本方式有,PPP,NDIS,QMI等。

此文介绍QMI方式,所谓QMI即Qualcomm Message Interface,因此只限于使用高通芯片的4G模块。

工作主要分为三个方面:Kernel驱动适配,应用层拨号程序,Openwrt拨号适配脚本。

首选,介绍Kernel驱动适配:

主要就是按照EC20官方文档来修改几个地方,interface屏蔽以及RAW IP。

建议在Openwrt中修改,做成patch方式,便于管理。以下是我做好的patch,可直接使用。

--- a/drivers/net/usb/qmi_wwan.c	2018-08-16 00:13:02.000000000 +0800
+++ b/drivers/net/usb/qmi_wwan.c	2019-01-22 10:59:14.000000000 +0800
@@ -76,6 +76,25 @@ struct qmimux_priv {
 	u8 mux_id;
 };
 
+#if 1 //Added by Quectel 
+#include <linux/etherdevice.h> 
+struct sk_buff *qmi_wwan_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) 
+{ 
+	 if (dev->udev->descriptor.idVendor != cpu_to_le16(0x2C7C)) 
+		return skb; 
+	 // Skip Ethernet header from message 
+	 if (skb_pull(skb, ETH_HLEN)) { 
+		return skb; 
+	 } else { 
+		dev_err(&dev->intf->dev, "Packet Dropped "); 
+	 } 
+	 // Filter the packet out, release it 
+	 dev_kfree_skb_any(skb); 
+	 return NULL; 
+} 
+#endif
+
+
 static int qmimux_open(struct net_device *dev)
 {
 	struct qmimux_priv *priv = netdev_priv(dev);
@@ -740,6 +759,23 @@ static int qmi_wwan_bind(struct usbnet *
 	}
 	dev->net->netdev_ops = &qmi_wwan_netdev_ops;
 	dev->net->sysfs_groups[0] = &qmi_wwan_sysfs_attr_group;
+	
+#if 1 //Added by Quectel
+	 if (dev->udev->descriptor.idV
  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值