1.4G網(wǎng)絡(luò)連接 對(duì)于嵌入式Linux而言,4G網(wǎng)絡(luò)連接是一個(gè)比較容易實(shí)現(xiàn)的功能,大多數(shù)的4G模塊接口都是MiniPCIE接口,但是深入了解一下就會(huì)發(fā)現(xiàn),4G模塊的通信接口都是USB,所以4G模塊的驅(qū)動(dòng)就是USB驅(qū)動(dòng),只要USB驅(qū)動(dòng)正常,4G模塊在硬件上就能正常通信。下面看一下4G模塊的硬件原理圖: ![]() ![]() 在原理圖中,U25是4G模塊的MiniPCIE接口,然后通信引腳會(huì)接到U15的HUB芯片上,所以4G模塊會(huì)被識(shí)別成USB設(shè)備,CON5是SIM卡接口,在使用4G模塊時(shí),需要先插入SIM卡。在i.MX6UL終結(jié)者開發(fā)板上使用的EC20 4G模塊,如圖 ![]() 2. EC20 4G模塊配置 2.1. 添加USB設(shè)備信息 要使用EC20 4G模塊首先需要在Linux內(nèi)核中添加EC20的USB信息,這樣內(nèi)核啟動(dòng)后,才能正確識(shí)別EC20 4G模塊。打開Linux內(nèi)核下的drivers/usb/serial/option.c 文件,添加如下信息: 1809 /* add support EC220 4G Module */ 1810 { USB_DEVICE(0x05C6, 0x9090) }, /* Quectel UC15 */ 1811 { USB_DEVICE(0x05C6, 0x9003) }, /* Quectel UC20 */ 1812 { USB_DEVICE(0x05C6, 0x9215) }, /* Quectel EC20 */ 1813 { USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25/EC20 R2.0 */ 1814 { USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21 */ 1815 /* end add */其中第1813行是EC20 4G模塊的USB信息。 2.2. Linux內(nèi)核配置 添加完EC20 4G模塊的USB信息后,需要修改Linux 內(nèi)核配置來支持USBNET功能。具體配置如下: Device Drivers ---> Network device support ---> <*> USB Network Adapters ---> <*> Multi-purpose USB Networking Framework配置如圖 ![]() 接下來我們還需要使能 USB 串口 GSM、CDMA 驅(qū)動(dòng),配置路徑如下: 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配置如圖 ![]() 配置完成后,重新編譯內(nèi)核,然后使用新的內(nèi)核啟動(dòng)開發(fā)板。如果配置成功開發(fā)板啟動(dòng)后會(huì)有如圖 2.2.4信息打印: ![]() 可以看出EC20 4G模塊識(shí)別成功,并且虛擬出5個(gè)USB設(shè)備,分別為ttyUSB0~ttyUSB4。 3. EC20 4G模塊聯(lián)網(wǎng)測(cè)試 3.1. PPP軟件包編譯 首先拷貝ppp-2.4.4.tar.gz到Ubuntu下,然后執(zhí)行下面的命令解壓: tar -xvf ppp-2.4.4.tar.gz 解壓完成得到ppp-2.4.4目錄,進(jìn)入ppp-2.4.4目錄如圖 ![]() 使用configure進(jìn)行配置,命令如下:./configure結(jié)果如圖 ![]() 配置完成后,使用下面的命令進(jìn)行編譯: make CC=arm-linux-gnueabihf-gcc “CC=arm-linux-gnueabihf-gcc”指定編譯器,和開發(fā)板Linux內(nèi)核使用同一個(gè)編譯器。編譯完成如圖 ![]() 編譯完成后,分別在chat、pppd、pppdump、pppstats四個(gè)目錄下生成chat、pppd、pppdump、pppstats可執(zhí)行文件,用于后面的4G模塊聯(lián)網(wǎng)測(cè)試。 3.2. EC20 4G模塊聯(lián)網(wǎng)測(cè)試 首先安裝好EC20 4G模塊、天線和SIM卡,如圖 ![]() 開發(fā)板準(zhǔn)備好后啟動(dòng)Linux系統(tǒng),待系統(tǒng)啟動(dòng)后,進(jìn)入/etc目錄,然后創(chuàng)建ppp目錄,具體命令如下: cd /etc //進(jìn)入etc目錄 mkdir ppp //創(chuàng)建ppp目錄 目錄創(chuàng)建完后,使用U盤將上一節(jié)編譯的chat、pppd、pppdump、pppstats四個(gè)可執(zhí)行文件拷貝到/etc/ppp目錄下,如圖 : ![]() 然后在/etc/ppp目錄下創(chuàng)建pap-secrets文件,使用下面命令: touch pap-secrets //創(chuàng)建pap-secrets文件vi pap-secrets //打開pap-secret 輸入如下內(nèi)容: # Secrets for authentication using PAP # client server secret IP addresses card * card * 在4G信號(hào)在通信時(shí)候有一個(gè)密碼的比對(duì),密碼對(duì)了就可以通信了。上面顯示用戶是card,密碼是card。 然后創(chuàng)建新文件夾peers,命令“mkdir peers”。 進(jìn)入peers文件夾,創(chuàng)建wcdma文件,命令如下: touch wcdma vi wcdma 輸入如下內(nèi)容: # /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設(shè)備節(jié)點(diǎn)文件。 “user "card"”和“password "card"”對(duì)應(yīng)了pap-secrets文件中的用戶名和密碼。 創(chuàng)建wcdma-chat-connect文件: touch wcdma-chat-connect vi wcdma-chat-connect 內(nèi)容如下: 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# 這兩句話會(huì)根據(jù)移動(dòng)聯(lián)通或者是電信而變化,這里用的是移動(dòng)4G。 創(chuàng)建wcdma-chat-disconnect文件: touch wcdma-chat-disconnect vi wcdma-chat-disconnect 內(nèi)容如下: ABORT "ERROR" ABORT "NO DIALTONE" SAY "INSending break to the modem\n" ""\k" ""+++ATH" SAY "\nGood bye\n" 所需文件創(chuàng)建完成后,就可以進(jìn)行聯(lián)網(wǎng)測(cè)試了。 首先關(guān)閉eth0設(shè)備,因?yàn)楹虴C20 4G模塊有沖突,同時(shí)只能使用一個(gè)設(shè)備。命令如下: ifconfig eth0 down 然后在/etc/ppp目錄下輸入指令: ./pppd call wcdma & 結(jié)果如圖 ![]() 上圖表示聯(lián)網(wǎng)成功后的IP地址為10.47.135.182,使用ifconfig命令查看結(jié)果如圖 ![]() 這時(shí)使用ping命令查看能夠ping通外網(wǎng),命令如下: ping 202.108.22.5 -c 4 “-c”選項(xiàng)指定ping網(wǎng)絡(luò)的次數(shù)。“202.108.22.5”是百度的IP地址,結(jié)果如圖 : ![]() 發(fā)現(xiàn)不能ping通外網(wǎng),愿意是因?yàn)镈NS沒有設(shè)置對(duì),在etc下有一個(gè)文件resolv.conf 。這個(gè)文件是用來放DNS的。就是這個(gè)里面的域名沒有設(shè)置對(duì)。然而在eth0的運(yùn)行腳本里強(qiáng)制性的把這個(gè)文件復(fù)制為了192.168.1.1 。這就造成即便在這里文件里設(shè)置上正確的DNS,再開機(jī)后也會(huì)發(fā)現(xiàn)這個(gè)文件里已經(jīng)是192.168.1.1了。這是因?yàn)閑th0,是開機(jī)自啟動(dòng)的。 我們?cè)?etc目錄下新建一個(gè)文件resolv.conf_back:touch resolv.conf_back vi resolv.conf_back 輸入如下內(nèi)容: nameserver 202.99.160.68 nameserver 221.130.33.52 nameserver 221.130.33.60 nameserver 192.168.1.1 然后在新建一個(gè)腳本文件ppp0: touch ppp0 vi ppp0 輸入如下內(nèi)容: #!/bin/sh ifconfig eth0 down cp /etc/resolv.conf_back /etc/resolv.conf/etc/ppp/pppd call wcdma& 修改ppp0文件的執(zhí)行權(quán)限: chmod 777 ppp0 這里第一步是將eth0關(guān)掉,第二步將我們的DNS文件覆蓋到resolv.conf上,第三步運(yùn)行。然后重新開機(jī),執(zhí)行ppp0腳本,命令如下: /etc/ppp0 腳本執(zhí)行成功后,重新使用ping命令,結(jié)果如圖: ![]() 圖片顯示可以正常ping通百度的IP地址。至此EC20 4G模塊就可以正常使用了。 ![]() ![]() |