1.修改2.6.30内核选项, http://blog.csdn.net/bingxuebage/article/details/8809061 make menuconfig Device drivers -> Networking device support -> PPP(point to point protocol) support 我选了以下模块(以M方式即module方式) PPP support for async serial ports PPP support for sync tty ports PPP Deflate compression PPP BSD-Compress compression SLIP(serial line) support 之后编译:make && make install && make modules && make modules_install 得到了几个ko形式的内核库文件,拷贝它们到ARM目标板上,并在/etc/init.d/rcS中动态加载: insmod /etc/ppp/slhc.ko insmod /etc/ppp/ppp_generic.ko insmod /etc/ppp/ppp_async.ko insmod /etc/ppp/ppp_synctty.ko insmod /etc/ppp/ppp_deflate.ko insmod /etc/ppp/bsd_comp.ko insmod /etc/ppp/slip.ko 注意加载顺序,我记得好象必须把slhc.ko先加载
2. 移植ppp与连接网络过程, 1) ppp2.4.4 源码编译过程
#./configure #make CC=arm-linux-gcc 注意指定arm-linux-gcc的路径,或是直接用绝对路径指定 需要拷贝到ARM目标板的文件有: pppd pppdump pppstatus chat 2 ) 脚本准备 有4个脚本需要准备,一个是规则文件/etc/ppp/gprs-connect-chat,一个是参数文件/etc/ppp/peers/gprs, 还有认证文件:pap-secret和chap-secret。(其实我这里只用到了pap-secret, 至于chap-secret 没有有到。anyhow,把它们全创建上) (1) 脚本 #gprs-connect-chat: TIMEOUT 15 ABORT '\nBUSY\r' ABORT '\nNO ANSWER\r' ABORT '\nRINGING\r\n\r\nRINGING\r' #'' AT #'OK-+++\c-OK' ATH0 TIMEOUT 40 '' \rAT OK AT+FLO=0 #这个是GC864-DUAL-V2特别要设置的,就是要关闭流控 OK ATS0=0 OK ATE0V1 OK AT+CGDCONT=1,"IP","CMNET" #连接中国移动cmnet网 OK ATDT*99***1# CONNECT '' (2) 脚本gprsoptions #/etc/ppp/peers/gprsoptions # Usage: root>pppd call gprsoptions /dev/ttyS4 115200 nocrtscts modem #noauth #auth #-pap #+chap lock debug nodetach #hide-password usepeerdns noipdefault defaultroute user cmnet #user smsong 0.0.0.0:0.0.0.0 ipcp-accept-local #ipcp-accept-remote #lcp-echo-failure 12 #lcp-echo-interval 3 noccp #novj #novjccomp persist connect '/etc/ppp/chat -s -v -f /etc/ppp/gprs-connect-chat' (3) 认证文件pap-secrets 根据需要来改 /etc/ppp # cat pap-secrets # Secrets for authentication using PAP # client server secret IP addresses cmnet * cmnet * (4) 认证文件 chap-secrets 根据需要来修改,现在暂时没用到 /etc/ppp # cat chap-secrets # Secrets for authentication using CHAP # client server secret IP addresses '' * '' *
3) 调用过程 ifconfig eth0 down //先关闭有线网卡,以免与拔号初始化冲突 /etc/ppp/pppd call gprs& //启动/etc/ppp/peers/gprs脚本 ifconfig eth0 up //重新开有线网卡 来看连接的显示日志内容: /etc/ppp # ./pppd call gprs& /etc/ppp # timeout set to 15 seconds abort on (\nBUSY\r) abort on (\nNO ANSWER\r) abort on (\nRINGING\r\n\r\nRINGING\r) timeout set to 40 seconds send (^MAT^M) expect (OK) AT^M^M OK -- got it
send (AT+FLO=0^M) expect (OK) ^M AT+FLO=0^M^M OK -- got it
send (ATS0=0^M) expect (OK) ^M ATS0=0^M^M OK -- got it
send (ATE0V1^M) expect (OK) ^M ATE0V1^M^M OK -- got it
send (AT+CGDCONT=1,"IP","CMNET"^M) expect (OK) ^M ^M OK -- got it
send (ATDT*99***1#^M) expect (CONNECT) ^M ^M CONNECT -- got it
send (^M) Serial connection established. using channel 1 Using interface ppp0 Connect: ppp0 <--> /dev/ttyS4 Warning - secret file /etc/ppp/pap-secrets has world and/or group access sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x13a5663d> <pcomp> <accomp>] rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x13a5663d> <pcomp> <accomp>] rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <auth pap> <magic 0xcf150100> <pcomp> <accomp>] sent [LCP ConfAck id=0x1 <asyncmap 0x0> <auth pap> <magic 0xcf150100> <pcomp> <accomp>] Warning - secret file /etc/ppp/pap-secrets has world and/or group access sent [PAP AuthReq id=0x1 user="cmnet" password=<hidden>] rcvd [PAP AuthAck id=0x1 "Welcome!"] Remote message: Welcome! PAP authentication succeeded 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 [IPCP ConfReq id=0x1 <addr 192.168.202.0>] sent [IPCP ConfAck id=0x1 <addr 192.168.202.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 ConfNak id=0x2 <addr 10.176.120.186> <ms-dns1 218.201.96.130> <ms-dns3 211.137.191.26>] sent [IPCP ConfReq id=0x3 <addr 10.176.120.186> <ms-dns1 218.201.96.130> <ms-dns3 211.137.191.26>] rcvd [IPCP ConfAck id=0x3 <addr 10.176.120.186> <ms-dns1 218.201.96.130> <ms-dns3 211.137.191.26>] local IP address 10.176.120.186 remote IP address 192.168.202.0 primary DNS address 218.201.96.130 secondary DNS address 211.137.191.26
4) 查看网络设置与ping实验 /etc/ppp # ifconfig 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)
ppp0 Link encap:Point-to-Point Protocol inet addr:10.176.120.186 P-t-P:192.168.202.0 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:64 (64.0 B) TX bytes:82 (82.0 B) 来ping 一下看看 /etc/ppp # ping www.163.com -c 3 PING www.163.com (221.204.240.161): 56 data bytes 64 bytes from 221.204.240.161: seq=0 ttl=46 time=466.873 ms 64 bytes from 221.204.240.161: seq=1 ttl=46 time=435.762 ms 64 bytes from 221.204.240.161: seq=2 ttl=46 time=414.000 ms
--- www.163.com ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 414.000/438.878/466.873 ms
3.其它问题
1 ) 设置DNS地址 /etc/ppp 下会由拔号自动产生resolv.conf 文件, 但它和 /etc/resolv.conf 并不是同一个文件,所以有的时候不能解析DNS。 一个好办法是,首先保证存在/etc/resolv.conf, 然后在/etc/ppp下创建软链接ln -s /etc/ppp/resolv.conf /etc/resolv.conf 这样在拔号成功后,在/etc/resolv.conf中会有类似以下内容: nameserver 218.201.96.130 nameserver 211.137.191.26 2) 只能ping IP地址,不能ping域名的现象 在busybox的命令帮助页面有这样一段话: 引用: LIBC NSS When used with glibc, the BusyBox 'networking' applets will similarly require that you install at least some of the glibc NSS stuff (in particular, /etc/nsswitch.conf, /lib/libnss_dns*, /lib/libnss_files*, and /lib/libresolv*). 于是把arm-linux工具链的lib目录下的 libnss_dns* , libnss_files* , libresolv* 拷贝到ARM目标板的/lib下。可以ping域名啦 /etc/ppp # ping www.163.com PING www.163.com (221.204.240.161): 56 data bytes 64 bytes from 221.204.240.161: seq=0 ttl=46 time=641.269 ms 64 bytes from 221.204.240.161: seq=1 ttl=46 time=435.801 ms 64 bytes from 221.204.240.161: seq=2 ttl=46 time=446.776 ms 64 bytes from 221.204.240.161: seq=3 ttl=46 time=381.381 ms 64 bytes from 221.204.240.161: seq=4 ttl=46 time=468.495 ms
--- www.163.com ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 381.381/474.744/641.269 ms
3) 如何实现拔号与中国联通的3G 联网? 换用TELIT公司的UC864-E, 使用USB连接方式。指定串口为ttyUSB0 对于ppp方面,只需要更改4个脚本中的少量内容 a. 更改options脚本 把gprsoptions更名为g3options, 把里面的这一行参数/dev/ttyS4 更改为/dev/ttyUSB0, 把connect '/etc/ppp/chat -s -v -f /etc/ppp/gprs-connect-chat' 更改为connect '/etc/ppp/chat -s -v -f /etc/ppp/g3-connect-chat' b. 更改chat脚本 TIMEOUT 15 ABORT '\nBUSY\r' ABORT '\nNO ANSWER\r' ABORT '\nRINGING\r\n\r\nRINGING\r' #'' AT #'OK-+++\c-OK' ATH0 TIMEOUT 40 '' \rAT OK AT+FLO=0 OK ATS0=0 OK ATE0V1 OK AT+CGDCONT=1,"IP","UNINET" #UNINET是代表中国联通网的意思 #OK AT+CGDCONT=1,"IP","CMNET" OK ATDT*99***1# CONNECT c. 更改pap-secrets # Secrets for authentication using PAP # client server secret IP addresses #cmnet * cmnet * #如果是中国移动GPRS就用cmnet uninet * uninet * #如果是中国联通3G就用uninet
d. 更改chap-secrets 同上pap-secrets
|