ME3760 是一款Mini PCI-E接口的LTE 模块,支持LTE TDD band38(2.6GHz),band39(1.9GHz),band40(2.3GHz); LTE FDD band7(2.6GHz),向下兼容TD-SCDMA A频段(2.1GHz)和F频段(1.9GHz)以及GSM900MHz,GSM1800MHz. 支持最大100M/50Mbps的理论上下行数据传输速率.
6.1内核文件修改
1. 增加具体设备驱动
文件:linux-2.6.35.3/drivers/usb/serial/option.c
找到如下行:
static struct usb_device_id option_ids[] = {}
在其下添加内容:
{ USB_DEVICE(0x19d2, 0x0199) }
2. Usb 串口驱动过滤 NDIS 接口
由于 usb 串口跟 ndis 都属于非标准 cdc 设备,需要防止 ndis 口被 usb 串口驱动加载导致 ndis 驱动无法顺利完成加载。
文件linux-2.6.35.3/drivers/usb/serial/usb-serial.c
找到 usb_serial_probe 函数,在函数中找到如下行:
type = search_serial_device(interface);
在其前面添加如下内容:
3.复制源码
把官方驱动包里的usb/cdc_ether.c cdc_encap_ok.c cdc_encap_ok.h三个文件复制到内核linux-2.6.35.3/drivers/net/usb目录下。
【注意】内核源代码本来就修改过这个文件,则不宜直接覆盖,请注意保留原来的修改。
4.修改Makefile文件
在linux-2.6.35.3/drivers/net/usb/下的Makefile
找到如下行:
obj-$(CONFIG_USB_USBNET) += usbnet.o
在其下添加内容:
obj-m += cdc_encap.o
5.修改cdc_ether.c 文件
方式一:按照下图所示注释掉所有语句,在有if语句后面加;
方式二:
717行: (以717这一处为例修改)
devdbg (dev, "no rx skb");
改成
netif_dbg(dev, timer, dev->net, "no rx skb");
【注】这都是调试信息,可以注释掉。
6.修改cdc_encap.c文件
添加如下红框中的头文件。
#include <linux/slab.h>
6.2编译内核
- 进入内核目录,执行 make menuconfig
- 依次进入 device drivers—>usb support—>usb serial converter support 将如下组件作为模块进行编译:USB driver for GSM and CDMA modems(添加usb转串口驱动)
- 依次进入 device drivers—>Network device support—>usb Network Adapters 将如下组件作为模块进行编译:Mutil-purpose USB Networking Framework(添加Ndis驱动)
- 重新编译并安装内核
$make uImage -j4 $make modules
5.加载模块
把drivers/net/usb/usbnet.ko cdc_encap.ko cdc_ether.ko三个模块复制到开发板上,然后按顺序加载,如下:
# insmod usbnet.ko
# insmod cdc_encap.ko
# insmod cdc_ether.ko
如果ME3760模块已经插在开发板上了,驱动安装成功后则会打印如下信息:
6.检查驱动
把ME3760模块插入开发板,执行如下命令:
$lsusb
>$ll /dev/ttyUSB*
$ ifconfig -a
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:64
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
can1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:64
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
eth0 Link encap:Ethernet HWaddr 00:04:00:00:00:00
inet addr:192.168.1.111 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:50 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8772 (8.5 KiB) TX bytes:0 (0.0 B)
eth1 Link encap:Ethernet HWaddr 00:04:00:00:00:01
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Base address:0x8000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb0 Link encap:Ethernet HWaddr 26:BB:59:1C:0D:AA
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb1 Link encap:Ethernet HWaddr AE:DE:12:C9:54:BD
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
【注】usb1是ME3760模块的网络名,不同模块可以不一样。
6.3 ME3760联网应用
2.3.1方式一:minicom拨号
步骤一:拨号获取IP地址
$minicom(进入拨号,在拨号前需要设置minicom,关于minicom用法请看[minicom移植笔记-点击进入](https://blog.csdn.net/u013162035/article/details/80363681)])
AT+CFUN=0
AT+CGDCONT=1,"IP"
AT+CFUN=1
AT+CREG=1
AT+CEREG=1
AT+CGACT=1,1
AT+ZGACT=1,1
拨号成功后会返回如下信息。 ![这里写图片描述](https://img-blog.csdn.net/20180519215556996?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMxNjIwMzU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 本4G网卡绑定在usb1上,因此需要映射到usb1上。 **步骤二:设置IP地址**
$ifconfig usb1 up
步骤三:设置网关
$ifconfig usb1 10.66.85.114 $route add default gw 10.66.85.114
步骤四:设置DNS
$vi /etc/resolve.conf
添加nameserver 8.8.8.8
【注】不添加DNS也可ping。
步骤五:测试
$ping www.baidu.com
成功后返回返回如下信息。
2.3.2方式二:microcom拨号
步骤一:拨号获取IP地址
$microcom -s 115200 /dev/ttyUSB0(进入拨号)
AT+CFUN=0
AT+CGDCONT=1,"IP"
AT+CFUN=1
AT+CREG=1
AT+CEREG=1
AT+CGACT=1,1
AT+ZGACT=1,1
拨号成功后会返回如下信息。 ![这里写图片描述](https://img-blog.csdn.net/20180519215853501?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMxNjIwMzU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 本4G网卡绑定在usb1上,因此需要映射到usb1上。 **步骤二:设置IP地址**
$ifconfig usb1 up
步骤三:设置网关
$ifconfig usb1 10.66.85.114 $route add default gw 10.66.85.114
步骤四:设置DNS
$vi /etc/resolve.conf
添加nameserver 8.8.8.8
【注】不添加DNS也可ping。
步骤五:测试
$ping www.baidu.com
成功后返回返回如下信息。
【注】microcom测试
microcom是在制作根文件系统时busybox里自带命令。-s指定波特率为115200,也可以在前面加 -t 7000(表示监听的时间为7000ms), 通过ctrl+x可以退出监听
使用串口工具向ME3760模块发送AT命令:
$ microcom -s 115200 /dev/ttyUSB0
发送AT,返回OK
发送AT+CSCS=?,返回+CSCS: (“GSM”,”HEX”,”UCS2”)
则表示ME3760模块已经可以正常工作了。
【注1】usb驱动文件
【注2】移植环境
虚拟机:Ubuntu12.04
开发板:IMX283-A9
内核:linux-2.6.35(版本不同可能会导致移植不成功)
4G模块:中兴ME3760(如果是其他模块,要支持USB,才可采用此法移植)