嵌入式Linux下3G無線上網路卡的驅動
核心:需要有以下模組:option usbserial usbstorage
主要是要在編譯核心的時候選中
[*] Network device support —>
<*> PPP (point-to-point protocol) support
<*> PPP BSD-Compress compression
<*> PPP Deflate compression
[*] PPP filtering
<*> PPP MPPE compression (encryption)
[*] PPP multilink support
<*> PPP over Ethernet
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
[*] USB support —>
<*> USB Modem (CDC ACM) support
[*] USB support —>
<*> USB Serial Converter support —>
<*> USB driver for GSM and CDMA modems
修改linux-2.6.21.x/drivers/usb/serial/option.c
#define HUAWEI_WENDIR_ID 0x12d1
#define HUAWEI_PRODUCT_ECxx 0x14ef
{USB_DEVICE(HUAWEI_WENDIR_ID,HUAWEI_PRODUCT_ECxx)} /*HUAWEI xxx*/
#make modules //編譯外掛模組
#make modules_install //安裝模組
#usbserial.ko,option.ko
模組編譯完後應將其複製到開發板上,並執行以下命令,否則會報找不到modules.dep
#depmod –a //建立模組的連結
#modprobe usbserial.ko
# modprobe option.ko
軟體4個:libusb、usb_modeswitch、pppd、usb-modeswitch-data(交叉編譯)
#lsusb、usb_modeswitch、(lib資料夾)、chat、pppd等移植到開發板。
這個資料包包含了usb_modeswitch所有支援的3G上網路卡的配置檔案。
1.在開發板上USB口插入3G上網路卡。
2.在開發板上輸入lsusb會出現以下結果,說明開發板與3G上網路卡硬體物理上連線成功,記下12d1:14ef這個數字,後邊用。
# lsusb
Bus 004 Device 002: ID 12d1:14ef HUAWEI XXXX(省略若干)
這裡若無lsusb命令,可以檢視/proc/bus/usb/devices下的響應裝置資訊。其中:
#cat /proc/bus/usb/devices
Vendor=12d1 ProdID=14ef
3.編輯usb_modeswitch目錄下的usb_modeswitch.conf檔案
# T-Mobile NL (Huawei xxx)
#
# Contributor: Alex Hermann
DefaultVendor= 0x12d1
DefaultProduct=0x14ef
TargetVendor= 0x12d1
TargetProduct= 0x1506
MessageContent=”55534243123456780000000000000011062000000100000000000000000000″
CheckSuccess=5
4.執行usb_modeswitch將3G上網路卡U盤模式轉換為modem模式
#./usb_modeswitch -c /etc/usb_modeswitch/usb_modeswitch.conf
Looking for target devices …
No devices in target mode or class found
Looking for default devices …
found matching product ID
adding device
Found device in default mode, class or configuration (1)
Accessing device 003 on bus 001 …
Getting the current device configuration …
OK, got current device configuration (1)
Using first interface: 0x00
Using endpoints 0x08 (out) and 0x87 (in)
Inquiring device details; driver will be detached …
Looking for active driver …
OK, driver found (“usb-storage”)
OK, driver “usb-storage” detached
SCSI inquiry data (for identification)
————————-
Vendor String: HUAWEI
Model String: Mass Storage
Revision String: 2.31
————————-
USB description data (for identification)
————————-
Manufacturer: HUAEI TECHNOLOGIES
Product: HUAWEI Mobile
Serial No.: not provided
————————-
Setting up communication with interface 0
Using endpoint 0x08 for message sending …
Trying to send message 1 to endpoint 0x08 …
OK, message successfully sent
Resetting response endpoint 0x87
Could not reset endpoint (probably harmless): -145
Resetting message endpoint 0x08
Could not reset endpoint (probably harmless): -19
Device is gone, skipping any further commands
Checking for mode switch (max. 20 times, once per second) …
Searching for target devices …
Found target device, now opening
Found correct target device
Mode switch succeeded. Bye.
螢幕會顯示一堆模式轉換資訊,之後會顯示成功
檢查是否轉換成功,執行lsusb,發現14ef變為1506,表示轉換成功。
5.檢視/dev下是否有一下裝置節點
#ls /dev/ttyUSB*
#/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 /dev/ttyUSB4
這裡根據切換後的提醒,建立相應的裝置節點。
6.硬體問題都解決了,開始撥號吧:(電信的撥號指令碼,聯通、移動的應該會變化,請google)
第一個檔案:wcdma (路徑/etc/ppp/peer/)
/dev/ttyUSB0
115200
nodetach
user “card”
password “card”
crtscts
show-password
usepeerdns
noauth
noipdefault
novj
novjccomp
noccp
defaultroute
ipcp-accept-local
ipcp-accept-remote
connect `chat -s -v -f /etc_ro/ppp/chat/wcdma-connect-chat`
disconnect `chat -s -v -f /etc_ro/ppp/chat/disconnect-chat`
第二個檔案:wcdma-connect-chat (路徑/etc/ppp/chat/)
ABORT `NO CARRIER`
ABORT `ERROR`
ABORT `NO DIALTONE`
ABORT `BUSY`
ABORT `NO ANSWER`
“
AT
OK
ATZ
OK
AT+CGDCONT=1,”IP”,”cmnet”,,0,0
OK-AT-OK ATDT*99***1#
CONNECT dc
電信指令碼
TIMEOUT 5
ABORT “DELAYED”
ABORT “BUSY”
ABORT “ERROR”
ABORT “NO DIALTONE”
ABORT “NO CARRIER”
“” AT
“OK-+++c-OK” ATH0
TIMEOUT 40
“” AT
OK ATDT#777
CONNECT “”
第三個檔案:disconnect-chat
ABORT “BUSY”
ABORT “ERROR”
ABORT “NO DIALTONE”
SAY “/nSending break to the modem/n”
“ “/K”
“ “+++ATH”
SAY “/nGoodbye/n”
執行指令碼撥號測試
#pppd call gprs
abort on (NO CARRIER)
abort on (ERROR)
abort on (NO DIALTONE)
abort on (BUSY)
abort on (NO ANSWER)
send (^MAT^M)
expect (OK)
^MT^M^M
OK
— got it
send (^MATZ^M)
expect (OK)
^M
^MATZ^M^M
OK
— got it
send (^MAT+CGDCONT=1,”IP”,”cmnet”,,0,0^M)
expect (OK)
^M
^MAT+CGDCONT=1,”IP”,”cmnet”,,0,0^M^M
OK
— got it
send (ATDT*99***1#^M)
expect (CONNECT)
^M
ATDT*99***1#^M^M
CONNECT
— got it
send (d)
Serial connection established.
Using interface ppp0
Connect: ppp0 <–> /dev/ttyUSB0
CHAP authentication succeeded: Welcome!!
CHAP authentication succeeded
Could not determine remote IP address: defaulting to 10.64.64.64
local IP address 10.109.28.39
remote IP address 10.64.64.64
primary DNS address 211.137.130.18
secondary DNS address 211.137.130.20
這時代表已經撥號成功,通過ifconfig命令可以看到有個ppp0,說明大功告成了
嘗試ping www.baidu.com,應該就通了。
7.PPPD指令碼分享
1. CHAT指令碼
一個簡單的chat指令碼有下面的結構:
“” AT
OK ATDT dialnumber
CONNECT “”
一個chat指令碼都是由字串對來組成的。前面的字串都是期望獲取的串,緊跟的是傳送的字串。這個指令碼每一項的具體含義是這樣的:
1) MODEM期望空字串。這句話的意思直接理解就是MODEM不管收到什麼字串,先發出字串AT;
2) 期望收到“OK”字串,然後傳送字串“ATDT dialnumber”
3) 如果收到“CONNECT”,就不再傳送,認為資料鏈路已建立連線。
這樣的chat指令碼是最簡單的,如果需要進行超時控制,就可以加入如下欄位:
TIMEOUT 10
如果要增加對特殊情況的處理,就加入下面欄位:
ABORT BUSY
ABORT NO ANSWER
ABORT RINGING
這三行語句的意思是:如果收到字串“BUSY”、“NO ANSWER”、“RINGING”就退出執行。
所以在考慮到各種特殊情況下,配置一個PPP連線的CHAT指令碼就可以像下面這樣:
TIMEOUT 30
ABORT BUSY
ABORT NO ANSWER
ABORT RINGING
“” AT
OK ATDT dialnumber
CONNECT “”
2.OPTIONS指令碼
OPTIONS指令碼的內容,為PPP連線指定了連線使用的裝置、使用的控制字元傳輸速率、指定了硬體加速、溢位控制等。
例如下面的options指令碼:
ttyS0 —- 指定連線使用的裝置,例如:ttyS0、ttyS1等
57600 —- 設定連線使用的控制字元傳輸速率,可以設定為57600、115200等
debug —- 如果需要加入除錯資訊,就加入引數debug
logfile /var/ ppplog —- 將連線過程中的資訊輸入到某個檔案中
mtu 1500
-detach
noipdefault —- 不使用預設IP就可以加入引數noipdefault
defaultroute
usepeerdns —- 使用伺服器端協商的DNS就可以設定引數usepeerdns
lcp-echo-failure 4 —- 當連續4次沒有收到發出的LCP回聲請求時,就認為伺服器端已不再響應,就退出執行。這裡的失敗次數可以靈活來決定。
-ccp —- 不使用壓縮控制協議
-vj —- 關掉式IP頭壓縮
-chap —- 不使用chap鑑權
-mschap-v2 —- 不使用mschap鑑權
user
hide-password
connect “/usr/bin/chat -v -t6 -f /var/ chat” —- 制定了要使用的chat指令碼的位置。加上引數-v 告訴 chat命令將其所有的輸出/入拷貝到系統記錄裡(通常是 /var/log/messages)。-t 6 指定了執行chat該命令的時間為6s。chat指令碼的位置可以位於/etc/目錄下,也可以位於/var下,這個可以更加需要靈活設定。
persist — 永久連結(自動重撥)
crtscts — 告訴ppp使用modem的硬體流量控制
modem — 使ppp使用DCD訊號來判斷連線是否正常,有無掉線現象
deflate — 使pppd使用defalte壓縮方式
idle — 設定了一個時間限制,當在300秒的時間內沒有資料傳送,就斷開連線
lock — 則建立一個鎖定檔案,其他程式在發現存在這個檔案後,就能得知相應的串列埠已經被使用。
demond — 引數告訴pppd停留在後臺,監視網路資料,一旦有要求就立即進行連網,超時後就斷開連線,但pppd仍然停留在後臺等待下次資料傳送
本文轉自 Linux_woniu 51CTO部落格,原文連結:http://blog.51cto.com/linuxcgi/1965298
相關文章
- linux網路卡驅動薦Linux
- 無線上網路卡和無線網路卡的區別
- linux下安裝Marvell Yukon網路卡驅動Linux
- linux檢視網路卡驅動Linux
- deepin linux的無線網路解決-網路卡驅動(手動)安裝Linux
- 如何為3G上網路卡安裝非廠方原裝驅動(通用驅動)的方法
- vmware虛擬網路卡驅動無法安裝
- win10怎樣安裝無線網路卡驅動_win10系統安裝無線網路卡驅動的步驟Win10
- linux下安裝無線網路卡Linux
- win10系統下無線網路卡驅動異如何解決Win10
- 手動安裝Linux網路卡驅動程式薦Linux
- 確定缺少驅動的網路卡
- Debian/Linux安裝 Realtek 8811cu無線網路卡驅動Linux
- Linux下GA-945GZM-S2網路卡驅動安裝薦Linux
- win10系統下怎麼更新WIFI無線網路卡驅動程式Win10WiFi
- win10無線網路卡驅動異常怎麼修復_win10無線網路卡驅動異常解決方法Win10
- win10無線網路卡驅動解除安裝如何操作_win10怎麼刪除電腦無線網路卡驅動Win10
- win10系統更新無線網路卡驅動的方法Win10
- win10無線網路卡驅動解除安裝不了怎麼辦_win10無線網路卡驅動無法解除安裝如何解決Win10
- linux網路卡驅動程式的編譯與安裝(轉)Linux編譯
- win10無線網路卡驅動不能用的解決方法Win10
- 虛擬機器下無線上網路卡共享給MAC上網的設定虛擬機Mac
- RHEL5安裝 T60無線網路卡驅動
- win10網路卡驅動怎麼更新_win10更新網路卡驅動操作方法Win10
- 水星無線網路卡免驅動安裝方法(win10、win7) mercury無線網路卡安裝Win10Win7
- Fedora 13 為DELL E6400安裝無線網路卡驅動
- win10在哪裡檢視網路卡驅動_windows10怎麼檢視網路卡驅動Win10Windows
- win10網路卡驅動還原怎麼操作_win10網路卡驅動如何還原Win10
- win10網路卡驅動不能用怎麼辦_win10網路卡驅動異常的解決方法Win10
- 嵌入式Linux中的LED驅動控制(續)Linux
- win10網路卡驅動怎麼備份_win10網路卡驅動備份操作方法Win10
- win10網路卡驅動位置在哪裡_win10網路卡驅動檔案位置如何開啟Win10
- Ubuntu下Lenovo 無線網路卡無法使用!Ubuntu
- win10重灌網路卡驅動怎麼弄_新裝win10沒有網路卡驅動如何重灌Win10
- 如何解決Windows8無法使用3G上網路卡問題Windows
- 騰達 U1 無線網路卡驅動安裝小坑記錄
- linux下網路卡bonding[轉]Linux
- win10網路卡驅動資料夾在哪裡_win10網路卡驅動安裝在哪個資料夾Win10