ppp在linux下的编译和安装
生活随笔
收集整理的這篇文章主要介紹了
ppp在linux下的编译和安装
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我的編程環(huán)境是vmware + fedora9, ARM目標(biāo)板為ATMEL 9G45,LINUX內(nèi)核2.6.30, GPRS模塊為TELIT公司的GC864-DUAL-V2,使用3線制串口連接(TXD RXD GND)
1.修改2.6.30內(nèi)核選項(xiàng) ,
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
得到了幾個(gè)ko形式的內(nèi)核庫文件,拷貝它們到ARM目標(biāo)板上,并在/etc/init.d/rcS中動(dòng)態(tài)加載:
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與連接網(wǎng)絡(luò)過程,?
1) ppp2.4.4 源碼編譯過程
pppd
pppdump
pppstatus
chat
2 ) 腳本準(zhǔn)備
有4個(gè)腳本需要準(zhǔn)備,一個(gè)是規(guī)則文件/etc/ppp/gprs-connect-chat,一個(gè)是參數(shù)文件/etc/ppp/peers/gprs, 還有認(rèn)證文件:pap-secret和chap-secret。(其實(shí)我這里只用到了pap-secret, 至于chap-secret 沒有有到。anyhow,把它們?nèi)珓?chuàng)建上)
(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? #這個(gè)是GC864-DUAL-V2特別要設(shè)置的,就是要關(guān)閉流控
OK ATS0=0
OK ATE0V1
OK AT+CGDCONT=1,"IP","CMNET" #連接中國移動(dòng)cmnet網(wǎng)
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) 認(rèn)證文件pap-secrets 根據(jù)需要來改
/etc/ppp # cat pap-secrets?
# Secrets for authentication using PAP
# client server secret IP addresses
cmnet * cmnet *
(4) 認(rèn)證文件 chap-secrets 根據(jù)需要來修改,現(xiàn)在暫時(shí)沒用到
/etc/ppp # cat chap-secrets?
# Secrets for authentication using CHAP
# client server secret IP addresses
'' * '' *
3) 調(diào)用過程
ifconfig eth0 down //先關(guān)閉有線網(wǎng)卡,以免與拔號初始化沖突
/etc/ppp/pppd call gprs& //啟動(dòng)/etc/ppp/peers/gprs腳本
ifconfig eth0 up //重新開有線網(wǎng)卡
來看連接的顯示日志內(nèi)容:
/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) 查看網(wǎng)絡(luò)設(shè)置與ping實(shí)驗(yàn)
/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 ) 設(shè)置DNS地址
/etc/ppp 下會由拔號自動(dòng)產(chǎn)生resolv.conf 文件, 但它和 /etc/resolv.conf 并不是同一個(gè)文件,所以有的時(shí)候不能解析DNS。
一個(gè)好辦法是,首先保證存在/etc/resolv.conf, 然后在/etc/ppp下創(chuàng)建軟鏈接ln -s /etc/ppp/resolv.conf /etc/resolv.conf
這樣在拔號成功后,在/etc/resolv.conf中會有類似以下內(nèi)容:
nameserver 218.201.96.130
nameserver 211.137.191.26
2) 只能ping IP地址,不能ping域名的現(xiàn)象
在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*).
于是把a(bǔ)rm-linux工具鏈的lib目錄下的 libnss_dns* , libnss_files* , libresolv* 拷貝到ARM目標(biāo)板的/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) 如何實(shí)現(xiàn)拔號與中國聯(lián)通的3G 聯(lián)網(wǎng)?
換用TELIT公司的UC864-E, 使用USB連接方式。指定串口為ttyUSB0
對于ppp方面,只需要更改4個(gè)腳本中的少量內(nèi)容
a. 更改options腳本
把gprsoptions更名為g3options, 把里面的這一行參數(shù)/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是代表中國聯(lián)通網(wǎng)的意思
#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 * #如果是中國移動(dòng)GPRS就用cmnet
uninet * uninet ?* #如果是中國聯(lián)通3G就用uninet
d. 更改chap-secrets
同上pap-secrets
1.修改2.6.30內(nèi)核選項(xiàng) ,
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
得到了幾個(gè)ko形式的內(nèi)核庫文件,拷貝它們到ARM目標(biāo)板上,并在/etc/init.d/rcS中動(dòng)態(tài)加載:
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與連接網(wǎng)絡(luò)過程,?
1) ppp2.4.4 源碼編譯過程
#./configure
#make CC=arm-linux-gcc 注意指定arm-linux-gcc的路徑,或是直接用絕對路徑指定
需要拷貝到ARM目標(biāo)板的文件有:pppd
pppdump
pppstatus
chat
2 ) 腳本準(zhǔn)備
有4個(gè)腳本需要準(zhǔn)備,一個(gè)是規(guī)則文件/etc/ppp/gprs-connect-chat,一個(gè)是參數(shù)文件/etc/ppp/peers/gprs, 還有認(rèn)證文件:pap-secret和chap-secret。(其實(shí)我這里只用到了pap-secret, 至于chap-secret 沒有有到。anyhow,把它們?nèi)珓?chuàng)建上)
(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? #這個(gè)是GC864-DUAL-V2特別要設(shè)置的,就是要關(guān)閉流控
OK ATS0=0
OK ATE0V1
OK AT+CGDCONT=1,"IP","CMNET" #連接中國移動(dòng)cmnet網(wǎng)
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) 認(rèn)證文件pap-secrets 根據(jù)需要來改
/etc/ppp # cat pap-secrets?
# Secrets for authentication using PAP
# client server secret IP addresses
cmnet * cmnet *
(4) 認(rèn)證文件 chap-secrets 根據(jù)需要來修改,現(xiàn)在暫時(shí)沒用到
/etc/ppp # cat chap-secrets?
# Secrets for authentication using CHAP
# client server secret IP addresses
'' * '' *
3) 調(diào)用過程
ifconfig eth0 down //先關(guān)閉有線網(wǎng)卡,以免與拔號初始化沖突
/etc/ppp/pppd call gprs& //啟動(dòng)/etc/ppp/peers/gprs腳本
ifconfig eth0 up //重新開有線網(wǎng)卡
來看連接的顯示日志內(nèi)容:
/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) 查看網(wǎng)絡(luò)設(shè)置與ping實(shí)驗(yàn)
/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 ) 設(shè)置DNS地址
/etc/ppp 下會由拔號自動(dòng)產(chǎn)生resolv.conf 文件, 但它和 /etc/resolv.conf 并不是同一個(gè)文件,所以有的時(shí)候不能解析DNS。
一個(gè)好辦法是,首先保證存在/etc/resolv.conf, 然后在/etc/ppp下創(chuàng)建軟鏈接ln -s /etc/ppp/resolv.conf /etc/resolv.conf
這樣在拔號成功后,在/etc/resolv.conf中會有類似以下內(nèi)容:
nameserver 218.201.96.130
nameserver 211.137.191.26
2) 只能ping IP地址,不能ping域名的現(xiàn)象
在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*).
于是把a(bǔ)rm-linux工具鏈的lib目錄下的 libnss_dns* , libnss_files* , libresolv* 拷貝到ARM目標(biāo)板的/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) 如何實(shí)現(xiàn)拔號與中國聯(lián)通的3G 聯(lián)網(wǎng)?
換用TELIT公司的UC864-E, 使用USB連接方式。指定串口為ttyUSB0
對于ppp方面,只需要更改4個(gè)腳本中的少量內(nèi)容
a. 更改options腳本
把gprsoptions更名為g3options, 把里面的這一行參數(shù)/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是代表中國聯(lián)通網(wǎng)的意思
#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 * #如果是中國移動(dòng)GPRS就用cmnet
uninet * uninet ?* #如果是中國聯(lián)通3G就用uninet
d. 更改chap-secrets
同上pap-secrets
總結(jié)
以上是生活随笔為你收集整理的ppp在linux下的编译和安装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: a5d2启动分析
- 下一篇: NVIDIA狂清库存!RTX 4090/