1.4G網絡連接配接
對于嵌入式Linux而言,4G網絡連接配接是一個比較容易實作的功能,大多數的4G子產品接口都是MiniPCIE接口,但是深入了解一下就會發現,4G子產品的通信接口都是USB,是以4G子產品的驅動就是USB驅動,隻要USB驅動正常,4G子產品在硬體上就能正常通信。下面看一下4G子產品的硬體原理圖:
在原理圖中,U25是4G子產品的MiniPCIE接口,然後通信引腳會接到U15的HUB晶片上,是以4G子產品會被識别成USB裝置,CON5是SIM卡接口,在使用4G子產品時,需要先插入SIM卡。在i.MX6UL終結者開發闆上使用的EC20 4G子產品,如圖
2. EC20 4G子產品配置
2.1. 添加USB裝置資訊
要使用EC20 4G子產品首先需要在Linux核心中添加EC20的USB資訊,這樣核心啟動後,才能正确識别EC20 4G子產品。打開Linux核心下的drivers/usb/serial/option.c 檔案,添加如下資訊:
1809
1810 { USB_DEVICE(0x05C6, 0x9090) },
1811 { USB_DEVICE(0x05C6, 0x9003) },
1812 { USB_DEVICE(0x05C6, 0x9215) },
1813 { USB_DEVICE(0x2C7C, 0x0125) },
1814 { USB_DEVICE(0x2C7C, 0x0121) },
1815 其中第1813行是EC20 4G子產品的USB資訊。
2.2. Linux核心配置
添加完EC20 4G子產品的USB資訊後,需要修改Linux 核心配置來支援USBNET功能。具體配置如下:
Device Drivers --->
Network device support --->
<*> USB Network Adapters --->
<*> Multi-purpose USB Networking Framework配置如圖
接下來我們還需要使能 USB 序列槽 GSM、CDMA 驅動,配置路徑如下:
Device Drivers --->
USB support --->
<*> USB Serial Converter support --->
<*> USB driver for GSM and CDMA modems
配置如圖
然後配置ppp,配置路徑如下:
Device Drivers --->
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
tty ports配置如圖
配置完成後,重新編譯核心,然後使用新的核心啟動開發闆。如果配置成功開發闆啟動後會有如圖 2.2.4資訊列印:
可以看出EC20 4G子產品識别成功,并且虛拟出5個USB裝置,分别為ttyUSB0~ttyUSB4。
3. EC20 4G子產品聯網測試
3.1. PPP軟體包編譯
首先拷貝ppp-2.4.4.tar.gz到Ubuntu下,然後執行下面的指令解壓:
tar -xvf ppp-2.4.4.tar.gz
解壓完成得到ppp-2.4.4目錄,進入ppp-2.4.4目錄如圖
使用configure進行配置,指令如下:./configure結果如圖
配置完成後,使用下面的指令進行編譯:
make CC=arm-linux-gnueabihf-gcc
“CC=arm-linux-gnueabihf-gcc”指定編譯器,和開發闆Linux核心使用同一個編譯器。編譯完成如圖
編譯完成後,分别在chat、pppd、pppdump、pppstats四個目錄下生成chat、pppd、pppdump、pppstats可執行檔案,用于後面的4G子產品聯網測試。
3.2. EC20 4G子產品聯網測試
首先安裝好EC20 4G子產品、天線和SIM卡,如圖
開發闆準備好後啟動Linux系統,待系統啟動後,進入/etc目錄,然後建立ppp目錄,具體指令如下:
cd /etc //進入etc目錄
mkdir ppp //建立ppp目錄
目錄建立完後,使用U盤将上一節編譯的chat、pppd、pppdump、pppstats四個可執行檔案拷貝到/etc/ppp目錄下,如圖 :
然後在/etc/ppp目錄下建立pap-secrets檔案,使用下面指令:
touch pap-secrets //建立pap-secrets檔案vi pap-secrets //打開pap-secret
輸入如下内容:
# Secrets for authentication using PAP
# client server secret IP addresses
card * card *
在4G信号在通信時候有一個密碼的比對,密碼對了就可以通信了。上面顯示使用者是card,密碼是card。
然後建立新檔案夾peers,指令“mkdir peers”。
進入peers檔案夾,建立wcdma檔案,指令如下:
touch wcdma
vi wcdma
輸入如下内容:
# /etc/ppp/peers/wcdma
# This is pppd script for China liantong
# Usage: root>pppd call wcdma
hide-password
noauth
connect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'
disconnect '/etc/ppp/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'
debug
/dev/ttyUSB2
115200
defaultroute
noipdefault
novj
novjccomp
noccp
ipcp-accept-local
ipcp-accept-remote
local
lock
dump
nodetach
user "card"
password "card"
crtscts
remotename 3gppp
ipparam 3gppp
usepeerdns
需要注意的是使用/dev/ttyUSB2裝置節點檔案。
“user "card"”和“password "card"”對應了pap-secrets檔案中的使用者名和密碼。
建立wcdma-chat-connect檔案:
touch wcdma-chat-connect
vi wcdma-chat-connect
内容如下:
ABORT "BUSY"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
TIMEOUT 120
"" AT
OK \rATZ
OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
OK-AT-OK ATDT*99#
CONNECT \d\c
在這裡 OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
OK-AT-OK ATDT*99#
這兩句話會根據移動聯通或者是電信而變化,這裡用的是移動4G。
建立wcdma-chat-disconnect檔案:
touch wcdma-chat-disconnect
vi wcdma-chat-disconnect
内容如下:
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "INSending break to the modem\n"
""\k"
""+++ATH"
SAY "\nGood bye\n"
所需檔案建立完成後,就可以進行聯網測試了。
首先關閉eth0裝置,因為和EC20 4G子產品有沖突,同時隻能使用一個裝置。指令如下:
ifconfig eth0 down
然後在/etc/ppp目錄下輸入指令:
./pppd call wcdma &
結果如圖
上圖表示聯網成功後的IP位址為10.47.135.182,使用ifconfig指令檢視結果如圖
這時使用ping指令檢視能夠ping通外網,指令如下:
ping 202.108.22.5 -c 4 “-c”選項指定ping網絡的次數。“202.108.22.5”是百度的IP位址,結果如圖 :
發現不能ping通外網,願意是因為DNS沒有設定對,在etc下有一個檔案resolv.conf 。這個檔案是用來放DNS的。就是這個裡面的域名沒有設定對。然而在eth0的運作腳本裡強制性的把這個檔案複制為了192.168.1.1 。這就造成即便在這裡檔案裡設定上正确的DNS,再開機後也會發現這個檔案裡已經是192.168.1.1了。這是因為eth0,是開機自啟動的。
我們在/etc目錄下建立一個檔案resolv.conf_back:
touch resolv.conf_back
vi resolv.conf_back
輸入如下内容:
nameserver 202.99.160.68
nameserver 221.130.33.52
nameserver 221.130.33.60
nameserver 192.168.1.1
然後在建立一個腳本檔案ppp0:
touch ppp0
vi ppp0
輸入如下内容:
#!/bin/sh
ifconfig eth0 down
cp /etc/resolv.conf_back
/etc/resolv.conf/etc/ppp/pppd call wcdma&
修改ppp0檔案的執行權限:
chmod 777 ppp0
這裡第一步是将eth0關掉,第二步将我們的DNS檔案覆寫到resolv.conf上,第三步運作。然後重新開機,執行ppp0腳本,指令如下:
/etc/ppp0
腳本執行成功後,重新使用ping指令,結果如圖:
圖檔顯示可以正常ping通百度的IP位址。至此EC20 4G子產品就可以正常使用了。