最近项目需要在arm板上装一块3G的无线模块,于是查了很多资料,弄了很久才发现是资料中出了些问题,故将整个调试过程写成博客,以后方便查阅。
一、3G模块
现在手上的这块模块是龙尚U7309系列(o(╯□╰)o,没有打广告)的,淘宝上这个系列好像都没得买了。以前没接触过这类东西,于是各种查找资料……
二、移植步骤
简单说一下这个模块的拨号流程,具体原理性的知识不作展开。这个模块通过USB接口与开发板相连接,在连接过后会在 /dev目录下生成3个串口设备节点,一般是ttyUSB0,ttyUSB1与ttyUSB2,然后我们需要通过ppp对这几个设备进行拨号即可。
但是有些开发板上会识别并将模块上的USB转换为串口,并可以进行ppp拨号,但是也有很多arm并没有现成的功能,需要我们自己去移植。下面是针对最杯具的情况进行说明。
1、添加USB转串口支持
首先将arm开发板启动,将模块通过USB连接至开发板,如果/dev目录下出现了ttyUSB0,ttyUSB1与ttyUSB2,那么恭喜你可以直接跳过该步骤。如果没有的话,linux会打印出相关的信息,其中包括模块的制造商与产品号,idVendor=1c9e, idProduct=9603,记下这两个号,后面会用到。
接下来需要对内核进行编译,需要开发板上运行内核的源码,当然也可以单独对内核模块进行编译,因为后面需要ppp模块,这里采用编译整个内核。在编译内核之前需要对个别文件进行修改,修改的文件为/linux/drivers/usb/serial/option.c。
然后,在编译内核的时候选上与USB转串口相关的选型,与PPP拨号相关的,注意是编译进内核,是编译成模块。然后重新编译内核即可。
2、编译ppp程序
要在arm板上进行ppp拨号,还需要pppd程序与chat等程序,这里我选择自己进行交叉编译。这里版本号为ppp-2.4.5,一开始使用ppp-2.4.1进行编译没有成功,换用了2.4.5很顺利的就编译成功了。
首先下载ppp-2.4.5.tar.gz解压,然后进入解压后的文件夹目录,执行以下配置及编译语句。执行前将交叉工具链添加至.bashrc并进行同步。
./configure
make CC=arm-linux-
之后将chat、pppd、pppdump、pppstats目录下对应的可执行文件拷贝出来,放置在开发板中的/bin目录(先执行pppd,看会不会出现乱码,有的话就对了,如果按Ctrl+C关不掉乱码,就只能另开一个终端啦~有些开发板chat是放置在/usr/sbin目录,具体可以看拨号出错提示)。
3、添加拨号脚本
以上各种准备好之后,我们只要准备好拨号脚本就行了。这里我给出的是联通的拨号脚本。
首先如果/etc下没有ppp目录,那么新建一个,之后的ppp目录下需要有chat目录与peer目录。
chat目录新建gprs-connect-chat与gprs-disconnect-chat文件,文件内容如下。
gprs-connect-chat:
TIMEOUT 15
ABORT 'NO CARRIER'
ABORT 'ERROR'
ABORT 'NODIALTONE'
ABORT 'BUSY'
ABORT 'NO ANSWER'
"" 'AT'
OK AT+CGDCONT=1,"IP","3gnet",,0,0
OK 'ATDT*99#'
CONNECT ''
gprs-disconnect-chat:
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\nSending break to the modem\n"
'' "\k"
'' "+++ATH"
SAY "\nGood bye\n"
peer目录下新建cdma_gprs文件,文件内容如下,如果需要调试,请将nodetach与debug前的‘#’去掉。
cdma_gprs:
lock
/dev/ttyUSB2
115200
#nodetach
crtscts
modem
#debug
usepeerdns
noipdefault
defaultroute
user "3gnet"
password "card"
noauth
novj
novjccomp
noccp
ipcp-accept-local
0.0.0.0:0.0.0.0
ipcp-accept-remote
connect '/usr/sbin/chat -v -s -f /etc/ppp/chat/gprs-connect-chat'
disconnect '/usr/sbin/chat -v -s -f /etc/ppp/chat/gprs-disconnect-chat'
之后只要执行pppd call cdma_gprs即可,如果拨号失败,将cdma_gprs文件中的/dev/ttyUSB2更改为/dev/ttyUSB0或者/dev/ttyUSB1重新尝试。出现
primary DNS address 一个IP
secondary DNS address 一个IP
说明拨号成功。此时如果只能ping通IP的话,查看是否是DNS配置错误,或者关闭以太网卡重新尝试。