標籤:mode 帶來 命令 ppp協議 tle 核心 eth 4.6 rip
本文轉載自:http://blog.csdn.net/hanmengaidudu/article/details/17028383
一 開發環境簡介
內容 |
說明 |
3G模組 |
華為EM820W(WCDMA) |
3G SIM卡 |
中國聯通3G卡 |
嵌入式Linux版本 |
linux-2.6.37 |
主機開發環境 |
Ubutun 10.04 |
二 主要步驟
1 |
向linux核心中添加3G模組驅動(USB轉串口的option驅動)和ppp網路通訊協定的支援 |
2 |
交叉編譯ppp-2.4.4原始碼 將撥接所需的兩個應用程式pppd和chat拷貝到開發板/usr/sbin檔案夾下, 編寫ppp撥號指令碼wcdma、wcdma-chat-connect、wcdma-chat-disconnect並存放在/etc/ppp/peers目錄下。將DNS寫入到/etc/resolv.conf檔案中 |
3 |
執行“pppd call wcdma”命令進行撥號 |
三 配置3G模組驅動和ppp網路通訊協定棧
首先進入make menuconfig介面
1 配置3G模組驅動
圖 1
1首先選擇Device Drivers
圖2
2進入USB support
圖 3
進入USB support之後一直往下直到找到圖3並選擇USB轉串口
圖4
最後選擇USB driver for GSM and CDMA modems到此3G卡驅動已經添加完畢
主要是添加了driver/usb/serial/option.c和driver/usb/serial/usb_wwan.c
兩個檔案,儘管驅動添加了,但是這僅僅只是一個usb轉串口驅動,並不能作為網路裝置直接使用,此時就需要ppp網路通訊協定的支援,他將ttyUSB*等裝置類比成網路裝置使用也即(/dev/ttyUSB0<---->ppp0)
2 添加ppp協議
同樣也是進入make menuconfig介面
圖5
首先同樣也是進入驅動配置介面Device Drivers
圖6
6選擇網路裝置支援
圖7
7選擇ppp
到這一步驅動和協議就都已經配置成功了接下來就是編譯下載到板子
登入到linux, dmesg查看核心列印資訊
圖8
同時查看/dev/目錄下已經建立了
/dev/ttyUSB0,/dev/ttyUSB1,/dev/ttyUSB2,/dev/ttyUSB3,/dev/ttyUSB4,/dev/ttyUSB5
/dev/ppp等7個裝置檔案表明核心正確識別了EM820W3G模組
四 編寫ppp撥號指令碼
由於該撥號指令碼需要使用chat,pppd,等命令,所以需要下載ppp-2.4.4
下載成功之後首先便是編譯
1 編譯 ppp-2.4.4
./configure
Make CC=arm-none-linux-gnueabi-gcc
編譯成功後將編譯產生的chat,pppd,pppdump等命令拷貝到板子檔案系統的/usr/sbin目錄下邊去
2 編寫撥號指令碼
在板子檔案系統/etc/ppp/peers目錄下邊建立三個檔案如下
wcdma,chat-wcdma-connect,chat-wcdma-disconnect
wcdma設定檔內容
debug
nodetach
/dev/ttyUSB0
115200
usepeerdns
noauth
noipdefault
novj
novjccomp
noccp
defaultroute
ipcp-accept-local
ipcp-accept-remote
connect ‘/usr/sbin/chat -s -v -f /etc/ppp/peers/chat-wcdma-connect‘
disconnect ‘/usr/sbin/chat -s -v -f/etc/ppp/peers/chat-wcdma-disconnect‘
wcdma-chat-connect設定檔內容
TIMEOUT 5
ABORT ‘NO CARRIER‘
ABORT ‘ERROR‘
ABORT ‘NODIALTONE‘
ABORT ‘BUSY‘
ABORT ‘NO ANSWER‘
‘‘ \rAT
OK \rATZ
OK \rAT+CGDCONT=1,"IP","3GNET",,0,0
OK-AT-OK ATDT*99#
CONNECT \d\c
wcdma-chat-disconnect設定檔內容
ABORT"ERROR"
ABORT "NODIALTONE"
SAY"\nSending break to the modem\n"
‘‘ "\K"
‘‘"+++ATH"
SAY"\nGoodbay\n"
建立好撥號指令碼之後就是正式撥號了
pppd call wcdma&
(加上&符號主要是因為撥號成功後,程式會一直執行不退出,所以採用後台啟動並執行方式執行,假如有多個3G卡可能就會產生多個ttyUSB*的裝置檔案,同時會需要多個wcdma檔案此時可以採用pppd call wcdma1來為3G模組1進行ppp撥號),pppd call wcdma是作用是建立協議,並產生網路介面ppp0
撥號成功會出現如所示列印
圖9
出現9的列印後在/etc/resocv.conf中間添加DNS地址vi /etc/resolv.conf,加入內容:
nameserver 202.99.160.68
nameserver 202.99.166.4
使用ifconfig –a查看是否有ppp0的網路裝置
最後測試ppp0網路裝置是否能夠使用
Ping –I ppp0 www.baidu.com
能夠ping通就表示3G卡移植驅動成功
到此階段3G卡驅動已經移植完畢
五 調試
在移植該驅動時候出現過諸多問題
1 pppd call wcdma調用失敗
[email protected]:~# pppd call wcdma&
timeout set to 5 seconds
abort on (NO CARRIER)
abort on (ERROR)
abort on (NO DIALTONE)
abort on (BUSY)
abort on (NO ANSWER)
send (^MAT^M)
expect (OK)
AT^M^M
OK
-- got it
send (^MATZ^M)
expect (OK)
^M
ATZ^M^M
OK
-- got it
send(^MAT+CGDCONT=1,"IP","3GNET",,0,0^M)
expect (OK)
^M
AT+CGDCONT=1,"IP","3GNET",,0,0^M^M
ERROR
-- failed
Failed (ERROR)
Connect script failed
調用AT+CGDCONT=1,"IP","3GNET",,0,0^M^M
這個指令失敗,為了測試串口(命令發送通道)能否正常使用
在chat-wcdma-connect中間添加幾個其他的AT命令
比如 OK \rAT+CGMI (廠家認證請求,返回模組廠家資訊)
OK \rAT+CGSN (查看產品 IMEI 序號)
然後在調用pppd call wcdma&發現加上去的那幾條AT命令都能正常執行
這說明很可能是EM820W模組沒有正確識別SIM卡
後來我又添加了OK \rAT+CSQ指令(查看網路訊號品質)發現會調用失敗
得出初步結論凡是涉及到SIM卡相關的AT指令都會調用失敗,相反其他都能成功執行,這說明板子與EM820W模組之間是能夠正確互動資料的,
同時由於EM820W沒能識別SIM卡導致相關指令執行失敗
後來請教了相關人員,說我的測試方法不正確,我是利用pppd程式來判斷某些命令是否能夠正常執行,這樣就不能排除pppd程式是否能夠解析該命令所帶來的幹擾,所以改為使用一個更為純粹的辦法來進行測試了
Cat/dev/ttyUSB0&
echo “AT+CGSN”> /dev/ttyUSB0
echo “AT+CGMI”> /dev/ttyUSB0
echo “AT+CSQ” > /dev/ttyUSB0
觀察串口得到的response與pppd call wcdma一樣
所以還是覺得EM820W沒能正確識別SIM卡(不過以後測試還是需要選用正確的方法)
測試SIM卡電路的5根訊號線不管是否有SIM卡,5根線各自表現都是一樣的,這說明卻是沒有識別SIM卡,而且SIM_VCC和SIM_RESET的時序一樣,這和網上貼出的時序不一樣如所示,很明顯複位訊號要比VCC慢半拍
圖10
圖10
硬體工程師此時修改了電路,在SIM_RESET線上加了一個大電容,增加了些許延時
然後調用ppd call wcdma&
發現撥號成功了,同時使用ifconfig –a 命令出現了一個ppp0的網路裝置
接著使用ping –I ppp0 www.baidu.com進行測試,發現網路不通
哎 問題挺多
2 網路不通
網路不通的問題從一開始就覺得肯定與卡沒有關係了,很有可能是網路本身的問題,為了排除乙太網路口eth0的幹擾我進行了如下測試
Ifconfig eth0 down
pppd call wcdma&
Ifconfig eth0 up
Ping –I www.baidu.com
經過上面的折騰居然網路也通了,神奇。
上網查詢說是雙網卡造成的路由問題
果然在ppp0不通的時候route命令發現路由表如下
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref UseIface
10.64.64.64 * 255.255.255.255 UH 0 0 0 ppp0
192.168.7.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.7.1 0.0.0.0 UG 0 0 0 eth0
ppp0通的時候路由表如下
# route
Kernel IProuting table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.64.64.64 * 255.255.255.255 UH 0 0 0ppp0
192.168.7.0 * 255.255.255.0 U 0 0 0 eth0
default * 0.0.0.0 U 0 0 0 ppp0
由上面可以知道ppp0不通因為預設的路由是eth0的,這肯定不通啊
六 注釋
android 3G移植【轉】