3G上网卡在Liunx系统上实现上网的过程

  1 前言
最近因项目需要将3G
上网卡挂接到Linux的网关平台,经过一段时间的研究,基本将整个挂
接过程弄清,在此贴出来与大家共享  2 正文
首先,我们来了解一下3G上网卡的组成: USB+USB转串口芯片+3G无线模块
从这样的组成我们基本可以了解3G
无线模块对外提供的接口是串口,外部通过向此串口发送AT
指令控制其上网、发短信、打电话等操作。而我们要与其通讯则必须要驱动中间的
USB
转串口芯片。因为拆不开止网卡,看不到USB转串口芯片的型号,因此我只能猜测了,目前市面上比较通用的USB转串口芯片为PL2101、PL2303等,因此我进入menuconfig,进行如下配置:  Device Drivers ---> USB support ---> USB Serial Converter support ---> <M> USB Serial Converter support [*] USB Generic Serial Driver <M> USB CP2101 UART Bridge Controller <M> USB Prolific 2303 Single Port Serial Driver
配置好以后,我们需用要为此USB设备创建设备文件接点,因为TBS系统用的是ROM文件系统,不能动态创建,因此只能是预先在/dev/目录下将设备文件创建好。我们将其添加至tools/common_mkdev.sh文件中,让其在编译的过程中创建
 
mknod -m 600 ttyUSB0 c 188 0 (在PC的linux环境中自动挂载时发现它的主设备号始终为188) mknod -m 600 ttyUSB1 c 188 1
mknod -m 600 ttyUSB2 c 188 2
mknod -m 600 ttyUSB3 c 188 3 mknod -m 600 ttyUSB4 c 188 4 mknod -m 600 ttyUSB5 c 188 5 mknod -m 600 ttyUSB6 c 188 6 mknod -m 600 ttyUSB7 c 188 7 先进行编译,下载至目标板,此时在目标板上的 /lib/modules/2.6.18.8/kernel/drivers/usb/serial/应该可以看到有一个usbserial.ko
的内核模块。在/dev目录下也应该可以看到ttyUSB0~ttyUSB7,我们暂时先不加载 usbserial.ko模块,先插上3G modem,看看USB总线的挂载信息  # cat proc/bus/usb/devices T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10
Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 2.06 S: Manufacturer=Linux 2.6.18.8 ohci_hcd S: Product=AR7100
OHCI S: SerialNumber=ar7100_usb C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:
If#=
0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I)
Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01
Dev#= 3 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=02(comm.) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0e8d ProdID=0003 Rev= 1.00 S:
Manufacturer=MediaTek Inc S: Product=MT6225 S: SerialNumber=536663104082920 C:* #Ifs= 2
Cfg#= 1 Atr=80 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00
Prot=00
Driver=(none) E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms I: If#= 1 Alt= 0 #EPs= 1 Cls=02(comm.)
Sub=02 Prot=01 Driver=(none) E: Ad=83(I) Atr=03(Int.) MxPS= 16 Ivl=3ms T:
Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 2 B: Alloc= 0/800
us ( 0%), #Int= 0, #Iso= 0 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01
MxPS=64
#Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 2.06 S: Manufacturer=Linux 2.6.18.8 ehci_hcd S: Product=AR7100 EHCI S: SerialNumber=AR7100_usb
C:*
#Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=256ms
以上信息中除开两个hub信息,中间的应该就是我插入的3G模块的信息了,从信息中可以看
到Driver=(none),目前它还没找到合适的驱动,Vendor=0e8d ProdID=0003,我们需用要用这两个值做为
usbserial.ko的加载参数,现在开始加载usbserial.ko了 #modprobe usbserial
vendor=0x0e8d product=0x0003
usbcore: registered
new driver usbserial drivers/usb/serial/usb-serial.c: USB Serial support registered for generic usbserial_generic 2-2:1.0: generic converter detected usb 2-2: generic converter now attached to ttyUSB0
usbserial_generic 2-2:1.1: generic converter detected usbserial_generic 2-2:1.1: Generic device with no
bulk out,
not allowed.
usbserial_generic: probe of 2-2:1.1 failed with error -5 usbcore: registered new driver
usbserial_generic drivers/usb/serial/usb-serial.c: USB Serial Driver core 从以上信息可以看到驱动已经准确加载,并且将设备依附到了ttyUSB0上面,这就是我们后面需要的usb转换成的串口了。
  完成以上工作就可以开始进行拨号操作了,预先在/etc/ppp/
目录下建立两个文件内容分别如
下:
  #ppp-on exec /usr/sbin/pppd debug lock nodetach crtscts modem
/dev/ttyUSB0 115200 usepeerdns noauth noipdefault defaultroute user "" 0.0.0.0:0.0.0.0 lcp-echo-interval 120 asyncmap 0xa0000 connect /etc/ppp/ppp-on-chat &
  以上内容为启动
PPP
拨号进程,具体参数可参见帮助文档。在此不再敖述。  #ppp-on-chat /usr/sbin/chat -v \ TIMEOUT 25 \ ABORT '\nBUSY\r' \ ABORT '\nNO ANSWER\r' \ ABORT '\nNO CARRIER\r' \ ABORT
'\nRINGING\r\n\r\nRINGING\r' \ ABORT '\nUsername/Password Incorrect\r'\ SAY "Beginning...\n" \ ' ' AT \ 'OK-+++\c-OK' ATH0 \ ' ' AT \ OK
AT+CGDCONT=1,"IP","cmnet" \ OK ATD*99# \ CONNECT ' ' \ 此处的"cmnet"
是网络提供商提供的无线网络接入点,"cmnet"是中国移动提供的GPRS的公共接入点,
不同的网络代应商和不同的网络服务类型,接入点也各不相同。 此处的*99#
为拨号上网所需拨打的号码,类似于以前电话拨上网的
163/169  以上是PPPD拨号进程所需用要的PPP协商程序。  建立好后,启动
CPE,执行/etc/ppp/ppp-on:  # Beginning... Serial connection established. using channel 2 Using interface ppp0 Connect: ppp0 <--> /dev/ttyUSB0 sent [LCP ConfReq id=0x1
<asyncmap 0xa0000>
<magic 0xf7223fa9> <pcomp> <accomp>] rcvd [LCP ConfAck id=0x1 <asyncmap 0xa0000> <magic 0xf7223fa9> <pcomp>
<accomp>] rcvd [LCP ConfReq id=0x1 <asyncmap 0xa0000> <auth pap> <pcomp> <accomp>] No auth is possible sent [LCP
ConfRej
id=0x1 <auth
pap>] rcvd [LCP
ConfReq id=0x2 <asyncmap 0xa0000> <pcomp> <accomp>] sent [LCP ConfAck
id=0x2 <asyncmap 0xa0000> <pcomp> <accomp>] sent [LCP EchoReq id=0x0 magic=0xf7223fa9] sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15>] sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>] rcvd [LCP EchoRep id=0x0 magic=0x0] rcvd [LCP ProtRej id=0x0
80
fd 01 01
00 0c 1a 04 78 00 18 04 78 00] rcvd
[IPCP ConfReq id=0x1] sent [IPCP ConfNak id=0x1 <addr 0.0.0.0>] rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>] sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>] rcvd
[IPCP ConfReq id=0x2 <addr 0.0.0.0>] sent [IPCP ConfRej id=0x2 <addr
0.0.0.0>]
rcvd [IPCP ConfReq id=0x3] sent [IPCP ConfAck id=0x3] sent [IPCP
ConfReq id=0x2
<addr
0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>] sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
rcvd [IPCP ConfNak id=0x2 <addr 10.8.169.249> <ms-dns1 211.136.20.203> <ms-dns3 211.136.20.203>] sent [IPCP ConfReq

你可能感兴趣的:(3G上网卡在Liunx系统上实现上网的过程)