一、參考網址
6、腳本示例
二、技術細節
1、ppp撥號的必要條件
2、pppd執行需要用到動態鏈接庫
libpcap.so libpcap.so.1 libpcap.so.1.8.1
在buildroot目錄下:output/target/usr/lib
三、實現步驟
1、內核編譯添加支持ppp網絡設備驅動, 截圖如下:
執行腳本:linux/BSP/A7/kernel/A7-linux-src-4.14/build.sh
生成的內核zImage存放目錄:linux/BSP/A7/kernel/A7-linux-src-4.14/kernel-output/zImage 或 linux/BSP/A7/kernel/A7-linux-src-4.14/arch/arm/boot/zImage
用file命令查看zImage文件信息,如下:
zImage: Linux kernel ARM boot executable zImage (little-endian)
2、buildroot下編譯pppd和chat 應用程序
執行腳本:linux/BSP/ROOTFS/buildroot/v2017.08/build.sh, 截圖如下:
生成的文件目錄: linux/BSP/ROOTFS/buildroot/v2017.08/output/target/usr/sbin, 其有如下可執行程序: chat pppd pppdump pppoe-discovery pppstats
把這些程序拷貝到開發板的相應目錄下(/usr/sbin),並添加可執行權限
把生成的動態鏈接庫(output/target/usr/lib)拷貝到相應目錄下/usr/lib,因為執行pppd會用到:libpcap.so libpcap.so.1 libpcap.so.1.8.1
3、增加撥號腳本
1)在開發板添加新目錄:/etc/ppp/peer
2 ) 通過hfs,把移遠提供的腳本(linux-ppp-scripts_V1.2文件夾)拷貝到/etc/ppp/peer目錄下:
quectel-ppp quectel-chat-connect quectel-chat-disconnect quectel-ppp-kill quectel-pppd.sh readme
把ip-up腳本拷貝到/etc/ppp目錄下
所有腳本增加可執行權限
4、搭建硬件測試環境
1)斷開RTU集中器的ARM與GPRS模塊的串口連接
2)編寫一個小程序拷貝到RTU集中器上,可以控制GPRS模塊的電源
3)把gprs模塊的串口與A7開發板的TX3、RX3和GND相連
4)控制GPRS模塊上電
5、修改腳本的串口名稱或者APN
1) 修改腳本quectel-ppp中的串口名稱為/dev/ttymxc2(實際連接串口名稱)
開發板串口測試,在開發板上輸入如下命令:
stty -F /dev/ttymxc2 115200
echo Test > /dev/ttymxc2 (測試發送,在電腦上用串口調試器監視)
cat /dev/ttymxc2 (測試接收)
2) 在 quectel-chat-connect 腳本里可修改APN
6、運行及測試
1)運行命令:
pppd call quectel-ppp &
2)運行結果,如下截圖:
[root@fonda peers]# pppd call quectel-ppp & [root@fonda peers]# pppd options in effect: debug # (from /etc/ppp/peers/quectel-ppp) nodetach # (from /etc/ppp/peers/quectel-ppp) dump # (from /etc/ppp/peers/quectel-ppp) noauth # (from /etc/ppp/peers/quectel-ppp) user test # (from /etc/ppp/peers/quectel-ppp) password ?????? # (from /etc/ppp/peers/quectel-ppp) remotename 3gppp # (from /etc/ppp/peers/quectel-ppp) /dev/ttymxc2 # (from /etc/ppp/peers/quectel-ppp) 115200 # (from /etc/ppp/peers/quectel-ppp) lock # (from /etc/ppp/peers/quectel-ppp) connect chat -s -v -f /etc/ppp/peers/quectel-chat-connect # (from /etc/ppp/peers/quectel-ppp) disconnect chat -s -v -f /etc/ppp/peers/quectel-chat-disconnect # (from /etc/ppp/peers/quectel-ppp) nocrtscts # (from /etc/ppp/peers/quectel-ppp) modem # (from /etc/ppp/peers/quectel-ppp) hide-password # (from /etc/ppp/peers/quectel-ppp) novj # (from /etc/ppp/peers/quectel-ppp) novjccomp # (from /etc/ppp/peers/quectel-ppp) ipcp-accept-local # (from /etc/ppp/peers/quectel-ppp) ipcp-accept-remote # (from /etc/ppp/peers/quectel-ppp) ipparam 3gppp # (from /etc/ppp/peers/quectel-ppp) noipdefault # (from /etc/ppp/peers/quectel-ppp) ipcp-max-failure 30 # (from /etc/ppp/peers/quectel-ppp) defaultroute # (from /etc/ppp/peers/quectel-ppp) usepeerdns # (from /etc/ppp/peers/quectel-ppp) noccp # (from /etc/ppp/peers/quectel-ppp) abort on (BUSY) abort on (NO CARRIER) abort on (NO DIALTONE) abort on (ERROR) abort on (NO ANSWER) timeout set to 30 seconds send (AT^M) expect (OK) AT^M^M OK -- got it send (ATE0^M) expect (OK) ^M ATE0^M^M OK -- got it send (ATI;+CSUB;+CSQ;+CPIN?;+COPS?;+CGREG?;&D2^M) expect (OK) ^M ^M Quectel^M EC20F^M Revision: EC20CEHCR06A02M1G^M ^M SubEdition: V03^M ^M +CSQ: 24,99^M ^M +CPIN: READY^M ^M +COPS: 0,0,"CHINA MOBILE",7^M ^M +CGREG: 0,1^M ^M OK -- got it send (AT+CGDCONT=1,"IP","3gnet",,0,0^M) expect (OK) ^M ^M OK -- got it send (ATD*99#^M) expect (CONNECT) ^M ^M CONNECT -- got it Script chat -s -v -f /etc/ppp/peers/quectel-chat-connect finished (pid 298), status = 0x0 Serial connection established. using channel 1 Using interface ppp0 Connect: ppp0 <--> /dev/ttymxc2 sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x4827b4fe> <pcomp> <accomp>] rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x71f3af97> <pcomp> <accomp>] sent [LCP ConfAck id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x71f3af97> <pcomp> <accomp>] rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x4827b4fe> <pcomp> <accomp>] rcvd [LCP DiscReq id=0x1 magic=0x71f3af97] rcvd [CHAP Challenge id=0x1 <4003ccc71a6535e1f787fb38456a6f5e>, name = "UMTS_CHAP_SRVR"] sent [CHAP Response id=0x1 <2ebf1a489416e080a2dc61cc525fae82>, name = "test"] rcvd [CHAP Success id=0x1 ""] CHAP authentication succeeded CHAP authentication succeeded sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>] rcvd [IPCP ConfReq id=0x0] sent [IPCP ConfNak id=0x0 <addr 0.0.0.0>] rcvd [IPCP ConfNak id=0x1 <addr 10.34.181.249> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>] sent [IPCP ConfReq id=0x2 <addr 10.34.181.249> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>] rcvd [IPCP ConfReq id=0x1] sent [IPCP ConfAck id=0x1] rcvd [IPCP ConfAck id=0x2 <addr 10.34.181.249> <ms-dns1 120.196.165.7> <ms-dns2 221.179.38.7>] Could not determine remote IP address: defaulting to 10.64.64.64 local IP address 10.34.181.249 remote IP address 10.64.64.64 primary DNS address 120.196.165.7 secondary DNS address 221.179.38.7 Script /etc/ppp/ip-up started (pid 301) Script /etc/ppp/ip-up finished (pid 301), status = 0x0
3)ifconfig 查看虛擬網口
4)使用ps查看pppd守護進程
5) ping外網測試
四、多路串口復用
1、必備資料
1)源碼:gsm0710muxd_bp.c和Makefile
2)說明文檔:《Quectel_Android&Linux_CMUX_Driver_User_Guide_V1.1.pdf》
2、目的
用1個物理串口,模擬出多個串口;如1路串口用於ppp撥號,另1路串口用於AT指令測試(檢測信號強度、IMEI、ICCID和模塊信息)
3、步驟
1)修改Makefile, 使用交叉編譯器編譯,生成可執行程序gsm0710muxd_bp
2)執行程序:/usr/bin/gsm0710muxd_bp -s /dev/ttymxc7 -b 115200 -n 3
3)在/dev/chn目錄下會生成1、2、3,如下圖:
4)多路串口復用OK