初步實現使用pppd連線GPRS上網
轉載地址:https://blog.csdn.net/hybruce/article/details/40619843
(寫這篇部落格的目的為了以後能自己翻閱,也方便大家學習,提出改進意見)
背景:先說說移植這玩意的背景吧!公司需要做關於GPRS和S3C2416之間的驅動,便想到了使用現在成熟的PPP協議。目前用的GPRS為四頻的SIM900,通過COM1與S3C2416連線,COM0為S3C2416的除錯介面。設計硬體時需要注意的是SIM900為LVTTL電平,而S3C2416為TTL電平,通過串列埠連線時兩者之間串連一個510歐姆的電阻即可。
在接觸2416之前,做的畢業設計是利用SIM900A+STM32實現GPRS功能的,所以對GPRS除錯有了一定的瞭解,發現用AT指令來除錯GPRS還是有一定的雞肋,使用成熟的上層協議會事半功倍。
基礎:首先熟悉Linux基礎知識是必須的,其次要對網路知識有一定的瞭解,不然在涉及到網路程式設計時很容易遇到基本的問題,DNS,IP,公網,內網等等。我研究過一段時間的網路知識,考了全網網工四級,所以網路方面還是有一定的概念的。在大三到大四期間,也學過很長時間的Linux基礎知識,雖說那時候效率很低,但是慢慢摸索也懂得了一些。
硬體連線: S3C2416核心板為君益興的Helper2416核心板 2416與SIM900通過COM1連線
好了,開始進入正題:
PPP移植步驟
①修改Linux核心,讓其支援PPP(Linux核心需在2.6以上)
(1) 在linux原始碼根目錄下檢視自己的linux核心版本。
(2) 進入圖形介面模式: make menuconfig ARCH=arm
②下載並編譯PPP套件,將所需檔案放入嵌入式根檔案系統對應目錄。
(1) PPP套件下載連結地址 ftp://ftp.samba.org/pub/ppp (筆者下載的是ppp-2.4.7)
(2) 將ppp-2.4.7解壓 tar zxvf ppp-2.4.7.tar.gz
(3) 進入解壓目錄,配置交叉編譯PPP套件。
-
#.configure
-
#make CC=/Software/arm-jyxtec-linux-gnueabi/bin/arm-linux-gcc(指定交叉編譯路徑)
(4) 編譯成功後,將PPP套件安裝至嵌入式系統中。
-
cp $(ppp-2.4.7)/chat/chat /home/roofs/bin
-
cp $(ppp-2.4.7)/pppd/pppd /home/roofs/bin
-
cp $(ppp-2.4.7)/pppdump/pppdump /home/roofs/bin
-
cp $(ppp-2.4.7)/pppstats/pppstats /home/roofs/bin
(/home/roofs/bin為筆者的嵌入式根檔案系統共享的NFS所在位置的bin目錄)
(5) 在嵌入式檔案系統的etc目錄下建立ppp資料夾,並拷貝相關檔案至此。
-
(/home/bruce/samba_share/etc)#mkdir ppp
-
(/home/bruce/samba_share/etc)#cp $(ppp-2.4.7)/etc.ppp/* /home/roofs/etc/ppp
③ 相關指令碼準備
(1) GPRS啟動指令碼
檔名:dial-on.sh
存放位置:/home/roofs/bin
-
#!/bin/sh
-
#define dial_on function
-
dial_on()
-
{
-
#test if pppd is running
-
pppd_stat=`ifconfig|grep ppp|wc -l|cut -b 7-7`
-
if [ $pppd_stat -gt 0 ]
-
then
-
echo "ppp connection's already started."
-
else
-
#close ethernet interface
-
ifconfig eth0 down
-
#ppp start
-
pppd modem /dev/ttySAC1 115200 nocrtscts lock connect "chat -v -f /etc/ppp/gprs-connect" user "" noauth debug defaultroute
-
# pppd配置說明:
-
# ttyS1:連線GPRS模組SIM900的串列埠
-
# 115200:GPRS的撥號速率
-
# nocrtscts:無流控
-
# lock:鎖定裝置
-
# connect “chat ???? ???? /etc/ppp/gprs-connect”:GPRS連線指令碼檔案
-
# user “”:使用者名稱,這裡是無
-
# noauth:無需認證
-
# debug:輸出除錯資訊
-
# defaultroute:此撥號連線作為預設路由
-
echo "ppp is starting"
-
fi
-
}
-
#dial on gprs
-
dial_on
-
#wait for ppp's init
-
sleep 5
-
pppd_stat=`ifconfig|grep ppp|wc -l|cut -b 7-7`
-
if [ $pppd_stat -eq 0 ]
-
then
-
echo "trying 2nd time to call ppp"
-
dial_on
-
sleep 5
-
fi
-
pppd_stat=`ifconfig|grep ppp|wc -l|cut -b 7-7`
-
if [ $pppd_stat -eq 0 ]
-
then
-
echo "pppd error!"
-
echo "please check pppd's config files"
-
fi
-
#open ethernet interface
-
ifconfig eth0 up
-
#end
(2) GPRS連線配置檔案 (關於配置撥號指令碼可參考SIM900官方指導手冊,內有詳細介紹撥號設定)
檔名:gprs-connect
存放位置:/home/roofs/etc/ppp
-
TIMEOUT 30
-
ABORT "BUSY"
-
ABORT "ERROR"
-
ABORT "NO CARRIER"
-
'' AT
-
OK ATS0=0
-
OK ATE0V1
-
OK AT+CGDCONT=1,"IP","CMNET"
-
OK ATD*99***1#
-
CONNECT ''
(3) 其實到這裡為止,一個簡單的PPP協議棧就搭建完成了,當然最重要的就是除錯過程,要除錯成可行的的確是很不容易的,筆者自己也摸索了很久,所以各位要有耐心,做Linux的研究就是這樣,探索+前人的總結。直接執行dial-on.sh,檢視是否已經連線上PPP,嘗試ping某個可ping通的IP地址。如下圖所示:
(4) 其實現在如果去Ping域名的話,是ping不通的,返回bad address。那麼需要修改/etc/resolv.conf,新增域名解析器的服務地址。比如我用的是浙江嘉興的移動號,就去找浙江嘉興移動的DNS,改掉儲存再去ping就可以了。
(5) 接下來會去研究關於PPP登入方式和PPP斷線檢測自動撥號的問題。期待大家一起討論!
相關文章
- 在ARM+LINUX上使用pppd拔號上網(GPRS)流程Linux
- Linux系統下使用pppd撥號上網Linux
- FileReader初步使用實現上傳圖片預覽效果
- Django使用channels實現Websocket連線DjangoWeb
- 遠端連線Kali Linux使用PuTTY實現SSH遠端連線Linux
- 使用iwctl連線無線網路
- Android判斷裝置是否開啟WIFI、GPRS資料連線AndroidWiFi
- 同時使用有線網上內網、無線網上外網內網
- win10乙太網已連線無法上網 win10連線正常但是上不了網Win10
- not in 用外連線實現
- linux gprs模組 sim800a 晶片 ppp撥號上網Linux晶片
- 使用commons-pool2實現FTP連線池FTP
- 使用雲伺服器,如何實現Rdesktop連線?伺服器
- 前端使用 Konva 實現視覺化設計器(12)- 連線線 - 直線前端視覺化
- win10系統連線不上無線網Win10
- 使用連線池連線資料庫,能不能建立多個連線池?因為我們現在的系統要實現多個網站的管理資料庫網站
- 前端使用 Konva 實現視覺化設計器(19)- 連線線 - 直線、折線前端視覺化
- 無公網ip 實現外網免費連線內網ssh(22)埠內網
- 使用EF 連線 資料庫 SQLserver、MySql 實現 CodeFirst資料庫ServerMySql
- socketserver實現多使用者連線簡單程式碼Server
- 無線網路連線不上的問題彙總
- [譯] Go 實現百萬 WebSocket 連線GoWeb
- Swoole MySQL 連線池的實現MySql
- 實現一個redis連線池Redis
- Python實現MySQL連線池PythonMySql
- ofbiz 連線池如何實現?
- mysql的jdbc連線java實現MySqlJDBCJava
- 資料庫連線池實現資料庫
- 全連線神經網路的原理及Python實現神經網路Python
- Python網路程式設計實現TCP和UDP連線Python程式設計TCPUDP
- 網路連線出現意外錯誤
- window10怎麼連線wifi_win10連線wifi上網的方法WiFiWin10
- Linux 伺服器使用 SSH 連線 實現免登陸Linux伺服器
- 使用MySQL的遞延Join連線實現高效分頁 - AaronMySql
- Openlayers初步實現地圖功能地圖
- 前端使用 Konva 實現視覺化設計器(15)- 自定義連線點、連線最佳化前端視覺化
- OpenStack 網路實現(上)
- win10連線不上網路印表機怎麼辦 為什麼連線不上印表機Win10