3G 模塊驅(qū)動應(yīng)用開發(fā)總結(jié)
一:開發(fā)環(huán)境簡述:
內(nèi)容 |
說明 |
3G模塊: |
華為 EM 770W。WCDMA ) |
3G SIM 卡: |
中國聯(lián)通3G 卡(WO) |
嵌入式開發(fā)板: |
英貝特 MBS-SAM9G45 |
核心CPU |
ATMEL AT91SAM9G45 |
嵌入式linux 版本: |
linux2.6.30 |
主機(jī)開發(fā)環(huán)境: |
VMWARE 下安裝的 UBUNTU 10.04
|
二: 應(yīng)用步驟:
3G 模塊驅(qū)動應(yīng)用開發(fā)主要分一下3大步
1. |
向 linux 內(nèi)核中添加 3G模塊的驅(qū)動 (USB 轉(zhuǎn)串口 的驅(qū)動)和 PPP 協(xié)議的 支持,重新編譯下載內(nèi)核 |
2. |
對ppp-2.4.4 源碼進(jìn)行交叉編譯。
將撥號上網(wǎng)所需的兩個應(yīng)用程序pppd 和chat 拷貝到開發(fā)板 /usr/sbin 文件夾下,
將改好的腳本文件ppp-on , ppp-on-dialer 存放在 /etc/ppp 目錄下。
將 含有域名解析服務(wù)器地址的文件 resolv.conf 拷貝到 /etc目錄下 |
3. |
進(jìn)入 /etc/ppp 目錄 ,執(zhí)行 ./ppp-on。 進(jìn)行網(wǎng)絡(luò)測試 |
三: 開發(fā)工作主要內(nèi)容:
下面對開發(fā)工作進(jìn)行了進(jìn)一步細(xì)化:
1 |
向linux 內(nèi)核 添加 3G模塊的驅(qū)動 (USB 轉(zhuǎn)串口 的驅(qū)動) |
2 |
做一個應(yīng)用測試程序 測試 3G模塊的驅(qū)動 (USB 轉(zhuǎn)串口 的驅(qū)動) |
3 |
向 linux 內(nèi)核 中添加 PPP 協(xié)議的 支持 |
4 |
交叉編譯 撥號工具 pppd 和 chat |
5 |
配置 撥號的 腳本文件 |
6 |
測試網(wǎng)絡(luò)連接狀況 |
|
|
各項(xiàng)工作具體說明:
1. 向linux 內(nèi)核 添加 3G模塊的驅(qū)動 (USB 轉(zhuǎn)串口 的驅(qū)動)
參考 文檔《Usb Driver Configure.doc》
由于linux2.6.30 內(nèi)核支持 “USB driver for GSM and CDMA modems” ,所以不需要修改代碼,只修改 內(nèi)核配置即可。
Usb Configure
重新編譯內(nèi)核,修改配置如下:
Make menuconfig
加入對華為3G 模塊的支持
然后重新編譯,下載內(nèi)核。內(nèi)核的編譯和下載請參考開發(fā)板廠商提供的使用手冊《MBC-SAM9G45_Linux使用手冊.pdf》相關(guān)章節(jié)。
內(nèi)核啟動后,在開發(fā)板USB HOST1 口插上3G模塊的USB線,會有打印信息輸出:
usb 1-2: new high speed USB device using atmel-ehci and address 4
usb 1-2: configuration #1 chosen from 1 choice
option 1-2:1.0: GSM modem (1-port) converter detected
usb 1-2: GSM modem (1-port) converter now attached to ttyUSB0
option 1-2:1.1: GSM modem (1-port) converter detected
usb 1-2: GSM modem (1-port) converter now attached to ttyUSB1
option 1-2:1.2: GSM modem (1-port) converter detected
usb 1-2: GSM modem (1-port) converter now attached to ttyUSB2
查看設(shè)備節(jié)點(diǎn)ls /dev/tty*, 會發(fā)現(xiàn)USB虛擬成三串口,在文件系統(tǒng)節(jié)點(diǎn)如下/dev/ttyUSB0, /dev/ttyUSB1, /dev/ttyUSB2 ,這說明3G模塊驅(qū)動 已經(jīng)正確添加到內(nèi)核當(dāng)中。
我們 跟 3G 模塊交互 主要用的設(shè)備節(jié)點(diǎn)是 /dev/ttyUSB0
2. 做一個應(yīng)用測試程序 測試 3G模塊的驅(qū)動 (USB 轉(zhuǎn)串口 的驅(qū)動)
./test3g AT 向 /dev/ttyUSB0 寫入AT 查看回顯信息。
測試程序源代碼參考 huatest3g.c
3. 向 linux 內(nèi)核 中添加 PPP 協(xié)議的 支持
進(jìn)入內(nèi)核目錄下,執(zhí)行 make menuconfig 配置linux 內(nèi)核,添加 PPP 協(xié)議的支持
Device Drivers----àNet Device support
必須選中的項(xiàng)目:
<*> PPP (point-to-point protocol) support
[*] PPP multilink support (EXPERIMENTAL)
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
<*> PPP Deflate compression
<*> PPP BSD-Compress compression
然后重新燒寫新生成的內(nèi)核映象。
內(nèi)核啟動后會在/dev 下生成ppp 設(shè)備節(jié)點(diǎn)。
ls /dev/ppp -l
crw-rw---- 1 root root 108, 0 Jan 1 00:00 /dev/ppp
4. 交叉編譯 撥號上網(wǎng)需要的 撥號工具 pppd 和 chat
下載ppp-2.4.4源碼包,交叉編譯生成撥號所需的pppd和chat這兩個程序.
解壓源代碼包,進(jìn)入目錄,進(jìn)行交叉編譯,這里所用的板子的交叉編譯器是
#cd /root/gprs/ppp-2.4.1
#./configure
#make CC= /usr/local/arm-2007q1/bin/arm-none-linux-gnueabi-gcc
撥號所用到的程序就是ppp-2.4.4/pppd/下的pppd,和ppp-2.4.4/chat/下的chat程序
將交叉編譯出來的這 兩個應(yīng)用程序 拷貝到開發(fā)板 /usr/sbin 文件夾下 ,更改其屬性為可執(zhí)行文件。
5. 配置 撥號的 腳本文件
撥號上網(wǎng)需要的兩個配置文件ppp-on , ppp-on-dialer (存放位置 /etc/ppp)
紅色部分為修改的內(nèi)容
1)ppp-on配置文件的內(nèi)容:
# These are the parameters. Change as needed.
TELEPHONE=*99# # The telephone number for the connection
ACCOUNT= # The account name for logon (as in 'George Burns')
PASSWORD= # The password for this account (and 'Gracie Allen')
LOCAL_IP=0.0.0.0 # Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0 # Remote IP address if desired. Normally 0.0.0.0
NETMASK=255.255.255.0 # The proper netmask if needed
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyUSB0 115200 \
asyncmap 20A0000 escape FF kdebug 4 $LOCAL_IP:$REMOTE_IP \
noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
2)ppp-on-dialer配置文件的內(nèi)容:
#!/bin/sh
exec chat -v \
TIMEOUT 5 \
ABORT "BUSY" \
ABORT "ERROR" \
ABORT "NO CARRIER" \
'' \rAT \
OK 'AT+CGDCONT=1,"IP","3GNET"' \
OK 'ATDT*99#' \
CONNECT '' \
3):設(shè)置正確的域名解析服務(wù)器地址
將3G 模塊插到計(jì)算機(jī)上。查看 聯(lián)通3G 北京地區(qū)的域名解析服務(wù)器地址:
202.106.195.68 202.106.46.151
將 這兩個地址添加到 開發(fā)板 目錄:/etc/ resolv.conf 中
Vi /etc/ resolv.conf 內(nèi)容:
nameserver 202.106.195.68
nameserver 202.106.46.151
6. 應(yīng)用測試:
1) 連接好 硬件設(shè)備
2)進(jìn)入 /etc/ppp 目錄 ,執(zhí)行 ./ppp-on
3)執(zhí)行 ifconfig 可以看到 :
ppp0 Link encap:Point-to-Point Protocol
inet addr:172.16.231.7 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:94 (94.0 B) TX bytes:97 (97.0 B)
在/var/log/message 文件末尾可以看到 分配的IP 地址
local IP address 172.20.209.99
remote IP address 10.64.64.64
4)可以ping 外網(wǎng)測試:
Ping 61.135.169.105
Ping www.baidu.com
5) 可以 telnet bbs.newsmth.net
6) 可以從網(wǎng)站上GET 資源 wget ftp://ftp.denx.de/pub/u-boot/u-boot-1.3.4.tar.bz2
四:開發(fā)中出現(xiàn)的小問題及 解決辦?A