4G模塊是連接物與物的重要載體,,是終端設(shè)備接入物聯(lián)網(wǎng)的核心部件之一,隨著4G的普及,,許多新興市場(chǎng)對(duì)4G通信模塊的需求都在日益擴(kuò)大,,那么在ARM平臺(tái)的嵌入式設(shè)備上如何快速的應(yīng)用4G模塊呢?
4G通信模塊把頻率接收器和信號(hào)增幅器等部件全都整合在一起,,實(shí)現(xiàn)了一體化,。隨著工業(yè)發(fā)展,嵌入式設(shè)備接入網(wǎng)絡(luò)的需求日益增多,,在沒(méi)有有線(xiàn)或WiFi等無(wú)線(xiàn)的環(huán)境下,,直接通過(guò)4G通訊模塊連接運(yùn)營(yíng)商網(wǎng)絡(luò)來(lái)接入互聯(lián)網(wǎng)不失為一個(gè)好方法。因此,,本文就為讀者介紹一下基于ARM平臺(tái)的嵌入式設(shè)備在Linux下使用4G模塊的方法,。
一、開(kāi)發(fā)環(huán)境
1)開(kāi)發(fā)主機(jī)環(huán)境:
Ubuntu12.04(64位),、arm-fls-linux-guneabi-gcc系列交叉編譯鏈,。
2)硬件清單:
IoT-3960工控板,、龍尚 4G模塊U8300C或U8300W。
3)軟件資源:
光盤(pán)EPC-280_283_287V1.04.iso中的內(nèi)核源碼包:linux-2.6.35.3-fec60fa.tar.bz2(光盤(pán)內(nèi)容可在致遠(yuǎn)電子官網(wǎng)下載http://www.zlg.cn),。
二,、硬件概述
IoT-3960L 是廣州致遠(yuǎn)電子股份有限公司以Freescale i.MX287處理器為核心開(kāi)發(fā)的工業(yè)IoT網(wǎng)絡(luò)控制器,集成多路通信接口,,支持多種通信協(xié)議,,具有性?xún)r(jià)比高,、功能豐富,、工作穩(wěn)定、兼容性強(qiáng)等特點(diǎn),,產(chǎn)品實(shí)物如圖1所示,。
圖1 IoT-3960L工控板
通過(guò)自定義的 Mini-PCIE 接口,IoT-3960L 可外擴(kuò)3G,、4G,、GPRS、ZigBee,、RFID 等無(wú)線(xiàn)通信模塊,。本文外擴(kuò)的是龍尚4G 模塊,所用的型號(hào)如圖2所示,。
圖2 龍尚4G模塊U8300C,、U8300W
三、技術(shù)實(shí)現(xiàn)
1,、解壓內(nèi)核源碼
將 EPC-280_283_287 V1.04.iso 光盤(pán)中的linux-2.6.35..3-fec60fa.tar.bz2 源碼包復(fù)制到ubuntu 系統(tǒng)的“~/”目錄下,,將其解壓后可得到linux-2.6.35.3 目錄,參考命令如下:
vmuser@Linux-host:~$ tar -jxvf linux-2.6.35..3-fec60fa.tar.bz2
2,、修改配置文件
在內(nèi)核源碼目錄“drivers/gpio/”下的Kconfig 文件中有設(shè)定了CONFIG_GPIO_M28X 宏的默認(rèn)配置,,用vim編輯器打開(kāi)這個(gè)Kconfig 文件,搜索“GPIO_M28X”,,找到其配置設(shè)定,,將其修改為可獨(dú)立配置的選項(xiàng),修改后的配置如下所示(紅色標(biāo)識(shí)的為修改部分):
config GPIO_M28X
tristate "GPIO support for MiniPCI-E slot control"
#depends on IoT_3960 || IoT_3962
help
Say yes here to enable the IoT_396x board gpio driver.
3,、修改內(nèi)核編譯腳本
Linux 源碼目錄下的build-kernel 腳本文件主要用于切換內(nèi)核默認(rèn)配置,,但因光盤(pán)中的該腳本文件設(shè)置不夠靈活,建議直接將build-kernel文本內(nèi)容整體替換為如圖 3所示的代碼:
圖3 build-kernel 文件內(nèi)容
4,、配置內(nèi)核源碼
進(jìn)入解壓后的 Linux 源碼根目錄,,使用IoT-3960L 的默認(rèn)內(nèi)核配置,參考命令如下:
vmuser@Linux_host:~/ linux-2.6.35.3$ ./build-kernel
然后輸入6 選擇Iot3960,,如果是其他工控板或開(kāi)發(fā)套件,,則選擇對(duì)應(yīng)的選項(xiàng)即可,,如果對(duì)應(yīng)的Linux 源碼根目錄下沒(méi)有.config 文件,運(yùn)行該步驟操作后會(huì)提示cp 命令執(zhí)行錯(cuò)誤,,直接忽略此錯(cuò)誤即可,。
工控板或開(kāi)發(fā)套件使用 USB 接口來(lái)與龍尚4G 模塊通信,需要配置內(nèi)核以支持USB轉(zhuǎn)串口功能,。參考命令如下:
vmuser@Linux-host:~/ linux-2.6.35.3 $ make menuconfig
進(jìn)入配置界面后,,按回車(chē)鍵進(jìn)入“Device Drivers --->”選項(xiàng),配置完內(nèi)核后,,保存并退出內(nèi)核配置操作,。
5、 修改&編譯內(nèi)核源碼
對(duì)龍尚4G模塊,,我們需要在linux-2.6.35.3 目錄下對(duì)三個(gè)數(shù)組中的內(nèi)容進(jìn)行修改:
l使用vi 或者vim 命令打開(kāi)drivers/gpio/gpio_m28x.c 文件,,在all_gpios_info[ ]數(shù)組作中作修改;
l使用vi 或者vim 命令打開(kāi)arch/arm/mach-mx28/mx28evk_pins.c 文件,,在mx28evk_fixed_pins []數(shù)組中作修改,;
l使用vi或者vim命令打開(kāi)drivers/usb/serial/option.c 文件,在option_ids[]數(shù)組中作修改,。
按上述操作修改完成之后,,就可以編譯內(nèi)核了,內(nèi)核編譯參考命令如下:
vmuser@Linux-host:~/ linux-2.6.35.3 $ make uImage
待內(nèi)核編譯完成后,,將生成的uImage 文件(可在arch/arm/boot 目錄下找到)燒寫(xiě)到工控板或開(kāi)發(fā)套件上,,燒寫(xiě)方法請(qǐng)參考《IoT-3960 用戶(hù)手冊(cè).pdf》第6 章的內(nèi)容。
四,、4G 模塊測(cè)試
這里主要介紹龍尚4G模塊的電話(huà),、網(wǎng)絡(luò)等控制接口以及IoT-3960L工控板對(duì)其操作的通信流程。用于測(cè)試的工控板必須燒寫(xiě)EPC-280_283_287 V1.04.iso 光盤(pán)中V1.03的uboot 及文件系統(tǒng),,因?yàn)槠渲邪匾膿芴?hào)上網(wǎng)工具,。
1、電話(huà)控制接口
電話(huà)接聽(tīng)和撥打命令如表1所示,。通過(guò)向串口發(fā)送相應(yīng)的命令就可以實(shí)現(xiàn)電話(huà)的接聽(tīng)和撥打,。如:可以向串口發(fā)送“ATD12345678901;\n\r”就可以向12345678901撥打電話(huà)。
表1 電話(huà)撥打和接聽(tīng)控制命令表
電話(huà)撥打接聽(tīng)代碼執(zhí)行流程如圖4所示,。代碼首先會(huì)顯示可供使用的菜單,,如電話(huà)撥打,短信接收等,。等待用戶(hù)輸入?yún)?shù),,執(zhí)行參數(shù)對(duì)應(yīng)的流程。然后判斷是否執(zhí)行成功,如果執(zhí)行成功就會(huì)返回顯示菜單代碼處繼續(xù)執(zhí)行下一下循環(huán),。
圖4 電話(huà)撥打接聽(tīng)流程圖
2,、網(wǎng)絡(luò)控制接口
4G 模塊上網(wǎng)功能通過(guò)PPP 撥號(hào)提供的接口連接網(wǎng)絡(luò)。在開(kāi)發(fā)套件文件系統(tǒng)的“/etc/ppp”目錄下預(yù)置了可以參考的撥號(hào)腳本,。撥號(hào)成功后(執(zhí)行PPP 撥號(hào)腳本),,內(nèi)核會(huì)生成PPP 網(wǎng)絡(luò)設(shè)備。通過(guò)創(chuàng)建套接字就可以訪(fǎng)問(wèn)網(wǎng)絡(luò),。
3,、演示程序?qū)嵅?/p>
l使能4G 模塊
默認(rèn)內(nèi)核啟動(dòng)時(shí),,把4G模塊的復(fù)位引腳拉低,,使模塊處于非工作的狀態(tài)。要想完全使能模塊,,運(yùn)行/opt 目錄下的upmodule.sh 腳本即可,。
此時(shí)板子的WWAN 這個(gè)LED 會(huì)出現(xiàn)閃爍的現(xiàn)象,,閃爍頻率大概為800 毫秒,,然后設(shè)備開(kāi)始入網(wǎng),,入網(wǎng)成功后,,板子的WWAN 這個(gè)LED 的閃爍頻率變?yōu)? 秒左右,。同時(shí),,大概10 秒之后,,板子開(kāi)始檢測(cè)到USB 設(shè)備的插入,,然后板子自動(dòng)安裝USB 轉(zhuǎn)串口的驅(qū)動(dòng),驅(qū)動(dòng)安裝完成后,,會(huì)在板子的/dev 目錄下自動(dòng)生成ttyUSB0~ttyUSB5 這6 個(gè)串口設(shè)備。
l編譯演示程序
將/works/mx28x/app/目錄下的longsung-test文件夾拷貝到Linux 開(kāi)發(fā)主機(jī),,編譯了longsung-test 下的代碼,,將生成的longsung-test 文件拷貝到板子即可進(jìn)行后續(xù)的電話(huà)功能測(cè)試。
l電話(huà)功能測(cè)試
使用U8300C,,以中國(guó)聯(lián)通4G卡為例進(jìn)行電話(huà)功能測(cè)試,,設(shè)備上電之前需要先插入SIM 卡,且保證已經(jīng)按前面介紹使能了4G模塊,,并能成功入網(wǎng),。進(jìn)入 longsung-test 測(cè)試程序存放的目錄,然后運(yùn)行l(wèi)ongsung-test 程序,。
[root@M28x opt]# ./longsung-test /dev/ttyUSB1
longsung-test 測(cè)試程序運(yùn)行結(jié)果及其中各數(shù)字代表功能如圖5所示,。需要注意,,輸入“1”撥打電話(huà)之后,必須需要輸入“2”掛斷電話(huà)之后方可繼續(xù)撥打電話(huà),。
圖5 代碼啟動(dòng)運(yùn)行結(jié)果
l4.4.4 上網(wǎng)功能測(cè)試
這里使用U8300C,,以中國(guó)移動(dòng)4G卡為例進(jìn)行撥號(hào)上網(wǎng),,設(shè)備上電之前需要先插入SIM 卡,,保證以使能4G
模塊并成功入網(wǎng),。
進(jìn)入板子的/etc/ppp/目錄,,創(chuàng)建一個(gè)名字為ppp_dial_LTE.sh的腳本,寫(xiě)入如下程序:
echo "TIMEOUT 5 '' AT OK ATE0V1 OK AT OK ATS0=0 OK AT OK ATE0V1 OK AT OK ATDT*99*# CONNECT ''" > /tmp/chatscript
pppd /dev/ttyUSB3 persist connect "chat -v -f /tmp/chatscript"
保存退出后,,修改ppp_dial_LTE.sh 的運(yùn)行屬性,,然后直接運(yùn)行該腳本,進(jìn)行撥號(hào)操作,,參考操作如下:
[root@M28x ppp]# wr chmod 755 ppp_dial_LTE.sh
[root@M28x ppp]# ./ppp_dial_LTE.sh
執(zhí)行后,,等待大概10~20s,使用ifconfig 命令查看網(wǎng)絡(luò)設(shè)備,,能看到系統(tǒng)生成了一個(gè)名為ppp0 的網(wǎng)絡(luò)設(shè)備,,該設(shè)備就是撥號(hào)成功后生成的網(wǎng)絡(luò)設(shè)備。撥號(hào)成功后可通過(guò)ping 114.114.114.114.-I ppp0檢查外網(wǎng)是否連接正常,。如果沒(méi)能成功撥號(hào),,可以參考下面的“撥號(hào)異常分析”來(lái)排除問(wèn)題。
l撥號(hào)異常分析
運(yùn)行撥號(hào)腳本后,,使用ps 命令能看到撥號(hào)進(jìn)程的存在,。只要撥號(hào)成功,撥號(hào)進(jìn)程是一直存在的(與pppd 相關(guān)的進(jìn)程),,如果該進(jìn)程不存在,,那么生成的ppp0 網(wǎng)絡(luò)設(shè)備也會(huì)隨同消失。
如果使用 ifconfig 命令,,無(wú)法看到ppp0 這個(gè)網(wǎng)絡(luò)設(shè)備,,只要使用ps 命令一直都能看到撥號(hào)進(jìn)程的存在,那么只能耐心的等待撥號(hào)程序的反饋了,。如果ps 命令無(wú)法看到撥號(hào)進(jìn)程了,,那么重新運(yùn)行撥號(hào)腳本即可。撥號(hào)進(jìn)程的退出,,極有可能是因?yàn)樾盘?hào)弱或者SIM 卡余額不足導(dǎo)致的,。