嵌入式 hi3518c,3g-sincom5360e平台pppd成功拨号联通3G示例

我的平台是HI3518C,3G模块是SINCOM,我的脚本是:

root@njqy:/etc/ppp/peers# cat wcdma
debug
nodetach
lock
/dev/ttyUSB3
115200
crtscts
usepeerdns
noauth
noipdefault
novj
novjccomp
noccp
defaultroute
ipcp-accept-local
ipcp-accept-remote
user "3gnet"
connect 'chat  -v  "" "AT" "" "ATDT*99# CONNECT"'
lcp-max-configure 3

注:有时候还可以是ttyUSB* 的可读权限问题哦

下面是转摘的内容:

一. 环境
 
1. 开发板内核:linux kernel 2.6.14
 
2. 3G卡片:HUAWEI E1750
 
二. 相关工具与库文件下载
 
1. usb_modeswitch-1.0.6.tar.bz2(
http://www.draisberghof.de/usb_modeswitch/)
 
建议下载较新版本,如果怕麻烦就下载与我一样的版本,下同。
 
Usb_modeswitch是对USB设备的工作模式进行转换一种万能工具,当然这种宝贝,只有在linux下才能体现其巨大的作用。随着移动通信,无线通信的发展,越来越多的设备被制作成USB接口,像一些无线网卡,3G数据卡等等。这些设备的厂家一般都会提供windows 下驱动,这些设备在第一次插上机子的时候,它们处于CDROM+闪存模式,可以从中提供驱动程序安装驱动,在驱动程序安装完成后,驱动会转换成3G模式,此时就会出现usb modem设备,目前的3G卡片全都是这样,这就是所谓的“ZeroCD”。
 
而在linux下我们可没有那么好的待遇,厂家一般不会给我们提供linux下面的驱动,而目前的内核还不能自动识别并驱动。所以我们需要用usb_modeswitch这个工具来进行模式转换,设备模式依赖usb-storage和usbserial模式,所以,在开发板上需要有这两种模块的支持,设备并能够正常工作于这两种模式下。
 
2.usb_modeswitch-current_data.tar.bz2(
http://www.draisberghof.de/usb_modeswitch/)
 
这个包里包括提供给UDEV的驱动设备信息,和很多设备使用usb_mdoeswitch进行转换模式时需要配置的参数。下载它用于参考。
 
3. libusb-1.0.6.tar.bz2 (
http://sourceforge.net/projects/libusb/files/libusb-1.0/)
 
Libusb才是我们的真正骨干力量,提供给usb_modeswitch一套系统API,所以,自然usb_modeswitch这个包工头要想工作,肯定不能离开libusb这个工人为其服务。
 
4.libusb-compat-0.1.3.tar.bz2 (
http://www.linuxfromscratch.org/blfs/view/svn/general/libusb-compat.html
 
libusb分为0.1和1.0两年版本,而1.0版本与0.1有较大的不同,并不向下兼容,必须依赖libusb-compat。
 
三. 交叉编译usb_modeswitch
 
1. 交叉编译 libusb
 
A. 解压并进入libusb-1.0.6目录,建立子目录install用于存放最后生存的库文件与头文件。
 
[[email protected]]# mkdir install
 
B. 配置并生成Makefile文件
 
[[email protected]]#./configure --build=i686-linux --host=arm-linux --prefix=/home/Anson/libusb-1.0.6/install
 
C. [[email protected]]#make

D. [[email protected]]# make install
 
2. 设置PKG_CONFIG_PATH环境变量,以使我们后面的编译能够顺利找到libusb库
 
A.设置环境变量
 
[[email protected]]# export PKG_CONFIG_PATH=/home/Anson/libusb-1.0.6/install/lib/pkgconfig:$PKG_CONFIG_PATH
 
B.查看是否设置正确
 
[[email protected]]#echo $PKG_CONFIG_PATH
 
3. 交叉编译lib_compat
 
与上面编译libusb的方法类似:
 
A.[[email protected]]#.mkdir install
 
B . [[email protected]]#./configure --build=i686-linux --host=arm-linux --prefix=/home/Anson/libusb-compat-0.1.3/install
 
C. [[email protected]]#make
 
D. [[email protected]]#make install
 


说明:如果此时出现"-Wno-pointer-sign"、"-fvisibility=hidden"这类错误,则是由于编译器版本过低不支持导致的,可以直接在Makefile和libusb/Makefile文件中删除这些编译选项即可。
 


4. 交叉编译usb_modeswitch
 
A.修改Makefile文件
 
修改STRIP和CC选项为:
 
STRIP = arm-xxx-linux-strip
 
CC = arm-xxx-linux-gcc
 
B. 可以将上面的libusb和libusb-compat的库和头文件拷贝到交叉编译器的lib和include目录下,或者直接加上编译选项指令库的路径即可如下:
 
INCLUDEDIR = /home/anson//libusb-1.0.6/install/include/libusb-1.0
 
LIBDIR = /home/anson/libusb-1.0.6/install/lib
 
$(PROG): $(OBJS)
 
$(CC) $(CCFLAGS) -I $(INCLUDEDIR) -L $(LIBDIR) -o $(PROG) $(OBJS)
 
这里的usb.h就是libusb-compat目录下的,如果没有usb.h,usb_modeswitch是编译不过去的。
 
C. make
 


5. 编辑usb_modeswitch目录下的usb_modeswitch.conf文件,加入以下内容:
 

 

 

DefaultVendor= 0x12d1
 
DefaultProduct= 0x1446
 
TargetVendor = 0x12d1
 
TargetProduct= 0x1001
 
MessageContent="55534243000000000000000000000011060000000000000000000000000000"
 
MessageEndpoint=0x01
 
CheckSuccess=5
 
HuaweiMode=0 (特别注意这个参数,我在开发板上的麻烦就出在这个参数上面)
 

 


6. 将上面生成的libusb动态库拷贝到开发板的库目录下,将上面生成的usb_modeswitch可执行程序和usb_modeswitch.conf配置文件下载到开发板某目录下。

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-03/33430.htm

 

四. 交叉编译3G卡片驱动
 
1. 编译 3G模块的驱动option.ko
 
在内核源码包中找到usb的3G驱动文件 driver//usb/serial/option.c在其中加入3G卡片的 HUAWEI_VENDOR_ID 0x12D1和HUAWEI_PRODUCT_E1750 0x1446。然后修改Kconfig将option编译成模块。将编译生成的option.ko下载到开发板中并使用insmod加载。
 
五. 加载驱动
 
1. 挂载usb虚拟文件系统:mount -t usbfs usbfs /proc/bus/usb/
 
2. 弹出3G卡片的cdrom: eject /dev/cdroms/cdrom0
 
3. 现在就可以使用usb_modeswitch –W –c ~/usb_modeswitch.conf切换3G卡片的模式了。此时会出现一些信息,你会看到转换成3G模式后的几个串口信息,ttyUSB0, ttyUSB1, ttyUSB2,如下:
 
option 1-1:1.0: Option 3G data card converter detected
usb 1-1: Option 3G data card converter now attached to ttyUSB0
option 1-1:1.1: Option 3G data card converter detected
usb 1-1: Option 3G data card converter now attached to ttyUSB1
option 1-1:1.2: Option 3G data card converter detected
usb 1-1: Option 3G data card converter now attached to ttyUSB2
 
如果没有使用udev,就不会自动生成这些结点,所以需要手动创建这些字符节点。
 
mknod /dev/usb/ttyUSB0 c 188 0

mknod /dev/usb/ttyUSB1 c 188 1

mknod /dev/usb/ttyUSB2 c 188 2
 
此时你可以在/dev/usb/tts下面找到生成了3个节点1,2,3.如果在PC上面使用发行版,一般都会使用udev做/dev下面的节点,这样子就可以直接在/etc/udev/rules.d/下面添加相应的设备信息和处理就可以了,但是由于开发板上并没有udev,它会生态太多设备节点,对嵌入式开发资源有较大浪费,这里,根据提示信息说明driver在X1地址处找到了Y1设备,它在/dev下面的节点叫Z1,所以此时我们需要手动创建。我的意思就是说这个节点本身已经注册了相应的ioctl了,只是设备节点没有生成而以,所以这时手动创建是完全没有问题的。
 
4. 使用串口的测试工具发送AT指令测试几个串口是否可用。
 
六. 交叉编译pppd拨号工具,并编写拨号脚本
 
1. 交叉编译pppd拨号工具(这里不详细讲解,可参考后续文章的详细说明)
 
2. 编写拨号脚本,与GPRS的拨号脚本类似。
 
A. 联通WCDMA-HSDPA:
 
(1)wcdma:
 

 

debug
 
nodetach
 
lock
 
/dev/ttyUSB0
 
115200
 
user "card"
 
password "card"
 
crtscts
 
show-password
 
usepeerdns
 
noauth
 
noipdefault
 
novj
 
novjccomp
 
noccp
 
defaultroute
 
ipcp-accept-local
 
ipcp-accept-remote
 
connect '/usr/sbin/chat -s -v -f chat-wcdma-connect'
 
disconnect '/usr/sbin/chat -s -v -f chat-wcdma-disconnect'
 

 


(2) chat-wcdma-connect:
 

 

TIMEOUT 5
 
ABORT 'NO CARRIER'
 
ABORT 'ERROR'
 
ABORT 'NO DIALTONE'
 
ABORT 'BUSY'
 
ABORT 'NO ANSWER'
 
'' \rAT
 
OK \rATZ
 
OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
 
OK-AT-OK ATDT*99#
 
CONNECT \d\c
 


(3) chat-wcdma-disconnect
 

 

ABORT "BUSY"
 
ABORT "ERROR"
 
ABORT "NO DIALTONE"
 
SAY "\nSending break to the modem\n"
 
'' "\K"
 
'' "+++ATH"
 
SAY "\nGoodbay\n"
 

 


B. 移动TD-CDMA

(1)td:
 

 

debug
 
logfile /var/log/pppd.log
 
lock
 
/dev/ttyUSB0
 
115200
 
user "card"
 
password "card"
 
crtscts
 
connect '/usr/sbin/chat -v -t3 -f td-connect-chat'
 
disconnect '/usr/sbin/chat -s -v -f td-disconnect-chat'
 
show-password
 
usepeerdns
 
noauth
 
noipdefault
 
novj
 
novjccomp
 
noccp
 
defaultroute
 
ipcp-accept-local
 
ipcp-accept-remote
 

 


(2) td-connect-chat:
 

 

ABORT 'NO CARRIER'
 
ABORT 'ERROR'
 
ABORT 'NO DIALTONE'
 
ABORT 'BUSY'
 
ABORT 'NO ANSWER'
 
'' \rATZ
 
OK-AT-OK ATD#777
 
CONNECT \d\c
 

 


(3) td-disconnect-chat:
 

 

ABORT "BUSY"
 
ABORT "ERROR"
 
ABORT "NO DIALTONE"
 
SAY "\nSending break to the modem\n"
 
'' "\K"
 
'' "+++ATH"
 
SAY "\nGoodbay\n"
 

 

 


C. 电信CDMA1x
 
(1) cdma1x:
 

 

debug
 
nodetach
 
lock
 
/dev/ttyUSB0
 
115200
 
user "card"
 
password "card"
 
crtscts
 
show-password
 
usepeerdns
 
noauth
 
noipdefault
 
novj
 
novjccomp
 
noccp
 
defaultroute
 
ipcp-accept-local
 
ipcp-accept-remote
 
connect '/usr/sbin/chat -s -v -f cdma1x-connect-chat'
 
disconnect '/usr/sbin/chat -s -v -f cdma1x-disconnect-chat'
 


(2) cdma1x-connect-chat:
 

 

TIMEOUT 5
 
ABORT 'NO CARRIER'
 
ABORT 'ERROR'
 
ABORT 'NO DIALTONE'
 
ABORT 'BUSY'
 
ABORT 'NO ANSWER'
 
'' \rATZ
 
OK \rAT\^PREFMODE=2
 
OK-AT-OK ATD#777
 
CONNECT \d\c
 


(3) cdma1x-disconnect-chat:
 

 

ABORT "BUSY"
 
ABORT "ERROR"
 
ABORT "NO DIALTONE"
 
SAY "\nSending break to the modem\n"
 
'' "\K"
 
'' "+++ATH"
 
SAY "\nGoodbay\n"
 


D. 电信CDMA2000-EVDO
 
(1) evdo:
 

 

debug
 
nodetach
 
lock
 
/dev/ttyUSB0
 
115200
 
user "card"
 
password "card"
 
crtscts
 
show-password
 
usepeerdns
 
noauth
 
noipdefault
 
novj
 
novjccomp
 
noccp
 
defaultroute
 
ipcp-accept-local
 
ipcp-accept-remote
 
connect '/usr/sbin/chat -s -v -f evdo-connect-chat'
 
disconnect '/usr/sbin/chat -s -v -f evdo-disconnect-chat'
 


(2)evdo-connect-chat:
 

 

TIMEOUT 5
 
ABORT 'NO CARRIER'
 
ABORT 'ERROR'
 
ABORT 'NO DIALTONE'
 
ABORT 'BUSY'
 
ABORT 'NO ANSWER'
 
'' \rATZ
 
OK-AT-OK ATD#777
 
CONNECT \d\c
 


(3)evdo-disconnect-chat:
 

 

ABORT "BUSY"
 
ABORT "ERROR"
 
ABORT "NO DIALTONE"
 
SAY "\nSending break to the modem\n"
 
'' "\K"
 
'' "+++ATH"
 
SAY "\nGoodbay\n"
 


3. 使用pppd拨号 :pppd file td(wcdma/evdo/cdma1x)
 
4. 此时将会使用脚本中设置的端口进行拨号,如果成功后会获得IP地址,电信的3G卡片获取的是外网IP地址,而其它则是获取的一个内网IP,将获取到的DNS添加到/etc/resolv.conf.中,并使用route添加一条默认路由,ping一下外网的地址,如果能够ping通,则说明完成了本篇的工作了,电信,移动,联通有的网络会禁ping,所以ping不通,所以这果,就需要使用自己的测试工具,发送tcp/udp包,确定是否成功完成本篇工作。
 
七. 可参考文章:
 
1.
http://www.linuxidc.com/Linux/2011-03/33431.htm
 
2.
http://www.linuxidc.com/Linux/2011-03/33432.htm

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-03/33430p2.htm

 

 

你可能感兴趣的:(嵌入式 hi3518c,3g-sincom5360e平台pppd成功拨号联通3G示例)