本文主要介绍在Linux平台下进行中兴ME3720无线4G模块的驱动移植,并采用PPP的拨号方式进行拨号接通上网络。
该驱动主要包括本身系统的usb转串口驱动,和中兴提供的ndis口驱动,以及系统支持ndis口驱动需要加载的usbnet驱动。以下将按照从内核编译到应用层实现拨号连网的顺序来介绍:
在内核的编译配置支持USB转串口驱动之前,由于需要添加该无线模块产品的VID和PID,需要先找到内核源码文件option.c(一般路径在..\drivers\usb\serial\optopn.c),比较旧的linux版本,则是usb-serial.c中,路径相同。
在源码中添加中兴产品的VID(0x19d2)以及ME3720型号的PID(0x1529),如下:
添加PID和VID后,就可以在内核编译配置中添加编译该usb转串口驱动了,配置如下:
在内核文件夹下输入命令make menuconfig
device drivers-->usb support-->usb serial converter support
选中如下组件:
USB driver for GSM and CDMA modems
编译内核,即支持该驱动了。
由于之后应用层上采用的拨号方式为ppp拨号方式,需要系统先支持该拨号方式,配置如下:
在内核文件夹下输入命令make menuconfig
device drivers-->
[*]Network device support -->
将以上全部选上;编译内核即可。
该驱动实际上也是系统内核中本身有的,这里需要将其编译成.ko的形式,如下:
在内核文件夹下输入命令make menuconfig
device drivers --> Network device support --> usb Network Adapters
选中如下组件:
编译得到usbnet.ko
一般中兴会提供ndis口驱动的源代码包,如下:
直接make编译即可得到cdc_encap.ko和cdc_ether.ko
得到以上三个.ko文件后,需要在系统启动项中进行加载这三个.ko文件,不过注意加载的顺序必须按照如下的加载顺序:
insmod usbnet.ko
insmod cdc_encap.ko
insmod cdc_ether.ko
至此,驱动便加载完成。
开机后若加载成功完成,会看到如下信息:
当插入无线模块后,会打印出如下信息:
输入以下命令可看到如下信息:
输入ifconfig -a 可看到如下信息:
有以上现象,则说明驱动加载成功完成。
这一点在1.2中已经阐述如何配置支持。
如果配置支持成功,则可以看到以下现象:
/proc/devices下有:
/dev 下有:
(1)、下载ppp的源码包ppp-2.4.7.zip,然后运行以下命令:
tar zxvf ppp-2.4.7.zip
cd ppp-master
./configure
make CC=arm-none-linux-gnueabi-gcc
这里的CC后的交叉编译工具根据芯片的不同而采用不同的工具。编译后有四个是我们所需要的,分别是chat/下的“chat”,pppd/下的“pppd”,pppdump/下的“pppdump”,pppstats/下的“pppstats”。需要将这四个文件都放到文件系统的/usr/sbin/目录下。
(2)、建立三个文件夹:
mkdir /etc/ppp;
mkdir /etc/ppp/peers;
mkdir /etc/ppp/chat;
(3)、脚本准备:
一般ppp拨号需要4个重要的脚本:规则文件、参数文件和两个认证文件pap-secret、chap-secret。
I、认证文件pap-secret、chap-secret
一般两个认证文件的内容是一样的,只是文件名不同以支持PAP方式和CHAP方式
这两个文件放在/etc/ppp下;
认证文件内容有四项:
呼叫者名称 服务器名称 呼叫者口令 与呼叫者关联的IP地址
其中,服务器名称和与呼叫者关联的IP地址可以为*,表示没有限制,可以是任何服务器和任何IP;电信卡的用户名和口令一般为[email protected],vnet.mobi;
如下:
pap-secret:
#/etc/ppp/pap-secrets # Secrets for authentication using PAP # client server secret IP addresses ####### redhat-config-network will overwrite this part!!! (begin) ########## ####### redhat-config-network will overwrite this part!!! (end) ############ [email protected] * "vnet.mobi" *
chap-secret:
#/etc/ppp/pap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
####### redhat-config-network will overwrite this part!!! (begin) ##########
####### redhat-config-network will overwrite this part!!! (end) ############
[email protected] * "123456" *
II、规则文件
规则文件对于各种无线模块以及不同的运营商,内容会有所不同,针对中兴ME3720,需要参考其AT命令指南,进行AT命令呼叫。且我使用的是电信卡,如下:
TIMEOUT 10
ABORT 'NO CARRIER'
ABORT 'ERROR'
ABORT 'NODIALTONE'
ABORT 'BUSY'
ABORT 'NO ANSWER'
'' \rAT
OK \rATZ
OK-AT-OK ATDT*99#
CONNECT \d\c
规则文件的名字可以自定义,这里定义为chat-ppp0-connect。放在/etc/ppp下。
III、参数文件
参数文件影响和控制ppp连接,包括哪个串口,串口波特率,使用的规则文件名,认证的用户名等,如下:
debug
nodetach
lock
#使用的串口
/dev/ttyUSB1
#串口波特率
115200
#认证的用户名
user [email protected]
show-password
usepeerdns
nocrtscts
noauth
noipdefault
novj
novjccomp
noccp
#表示把服务器指定的服务器IP地址作为默认路由
defaultroute
#表示接受服务器分配的本机IP地址
ipcp-accept-local
#表示接受服务器指定的服务器IP地址
ipcp-accept-remote
mtu 1492
mru 1492
0.0.0.0:0.0.0.0
#使用的规则文件
connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/chat-ppp0-connect'
参数文件的名字可以自定义,这里定义为ppp0,放在/etc/ppp/peers下。
上述四个脚本文件准备好了后,可以在Linux终端上输入pppd call /etc/ppp/ppp0 &进行拨号;
我这里是将该命令写到了4gCall-cd这个脚本中,然后运行该脚本;假如正常成功,应有如下信息:
最后拿到了ip地址和DNS地址,就算是成功了。‘
但是要能连接到网络上,还需要运行如下命令,添加ppp0路由:
route add default dev ppp0
这样机可以连通外网了。可以通过ping百度的ip地址来检测是否正常连上外网:
PS:可以在终端上直接发送AT命令给无线模块,查询一下信息状态等,比如:
cat /dev/ttyUSB1 &
echo “AT+CGMI” > /dev/ttyUSB1
第一条指令可将无线模块回复得内容打印出来,
第二条指令将命令“AT+CGMI”发送给无线模块
如上的命令“AT+CGMI”是查询厂家的意思,回复了是中兴。