韋江華++張晴++秦文東++林川
[摘 要]文章研究的是基于飛思卡爾平臺的北斗GPS定位系統設計。該設計采用的是基于Cortex-A9內核的飛思卡爾i. mx6q系列,兼容單核、雙核和四核,1GB的內存且最大運算速率為1. 2GHZ的移動平臺,足以滿足設計要求,同時該平臺支持Android4. 0而且成本在可接受的范圍。
[關鍵詞]Android;北斗GPS;定位系統;飛思卡爾
[DOI]10. 13939/j. cnki. zgsc. 2016. 06. 065
1 系統設計整體框架
文章設計大致分為安裝在需要定位的移動物體上的北斗GPS位置信息接收中心(飛思卡爾i. mx6q系列開發(fā)板)、遠端云服務器、移動Web網頁客戶端和Android手機客戶端幾部分。
了解完整體系統的設計和思想后,接著列出本系統的各個技術,如硬件、軟件的編程框架和編程思路,如圖1所示,我們在飛思卡爾i. mx6q系列底層移動平臺上跑一個Android4. 0. 4系統來實時接收北斗/GPS雙模模塊的實時位置信息,同時通過連接WiFi/網卡/3G運用HTTP的POST方式將數據傳送到由PHP、Mysql和Apache搭建的遠端云服務器進行存儲,該服務器是在ubuntu12. 04上搭建的;當移動客戶端需要獲取移動物體的實時位置信息時,就主動通過有線/無線網絡運用HTTP的GET方式從服務器請求數據,這樣移動客戶端(Web網頁客戶端或Android客戶端)就可以調用百度地圖的API把從服務器獲得的經緯度等位置信息刷到百度地圖上實時顯示,客戶端支持2D、三維和衛(wèi)星地圖幾種顯示模式。
圖1 系統設計整體框架
文章使用的處理器是I. MX6Q、Cortex-A9架構,能兼容單核、雙核和四核,同時其最高主頻能達到1. 2GHZ,有64位1GB的DDR3和兩通道32位的LPDDR2,8GB用戶可定制的Nand Flash,小于4W的低功耗功率,設有HTML、USB、SD卡、TF卡、1000/100/10Mbps的Ethernet、多屏顯示、LCD、觸摸屏等諸多接口。除此之外還有3路UART口及1路CAN接口,LCD接口支持TFT LCD 1024x600,LVDS接口支持720p60、1080p60,音頻輸入是MIC,音頻輸出是Headphones,采用RTC實現外部實時時鐘,有掉電保存時間等優(yōu)點,電源采用5V 2A電壓輸入;并且還擁有豐富的軟件資源,均支持安卓4. 0. 4版本系統、ubuntu12. 04和Linux的3. 0. 35內核。
在安卓4. 0. 4中支持SD卡脫機快速燒錄、USB下載燒錄、單文件/多文件一鍵燒錄、EXT4格式的文件系統燒寫等多種燒錄方式,同時其Uboot支持eMMC和SD卡兩種啟動方式,并且支持LVDS、LCD、HDML、VGA多種顯示設備,支持Linux3. 0. 35版本內核,在內核中也跟其他嵌入式產品一樣擁有eMMC、看門狗、RTC、IO、SPI、I2C、PWM控制器、LCD、觸摸屏、USB、串口、以太網、WiFi、3G、USB轉串、HDLM、VGA、NAND_FLASH、SD卡和TF卡等多個設備的驅動,并且能支持EXT4、NFS、FAT32和NTFS等幾種文件系統。
2 系統介紹
谷歌公司將Android系統定位成一款基于Linux平臺的開源移動操作系統,之后一直由谷歌公司研發(fā)。安卓系統一直擁有完全的開放性和強大的可擴展性,如今成為社會最為流行的嵌入式操作系統之一,并且已在各個領域(如手機、網本、車載、機頂盒和電視機等)廣泛使用。到目前為止共有Android1. 0、Android1. 1(petit Four)、Android1. 5(Cupcake)、Android1. 6(Dunut)、Android2. 0/2. 1(éclair)、Android2. 2(Froyo)、Android2. 3(Gingerbread)、Android3. 0/3. 1/3. 2(Honeycomb)、Android4. 0(Ice Cream Sandwich)、Android4. 1/4. 2/4. 3(Jelly Bean)和目前流行的Android4. 4(KitKat),文章運用了Android4. 0版本。
2. 1 Android系統框架
Android系統層次從上自下分別有應用程序層(Applications)、應用程序框架層(Application Framework)、運行庫層(Libraries)和Linux內核層(Linux Kernel)四大部分。其中應用程序層即用戶空間的Java語言編寫的應用程序就像Android內置的郵件、通信、瀏覽器等都在這一層;應用程序框架層主要為安卓開發(fā)人員提供一些已封裝好的API接口,從而使其快速開發(fā);運行庫層主要是一些c/c++的函數庫層,有開放源碼的函數庫,其中有負責瀏覽器運行的WebKit,有l(wèi)ibc、OpenGLES、SQLite等標準c庫,另外還有多媒體方面的影音和圖片文件的播放支持的文件格式等;Linux內核層主要負責底層硬件的接口設備驅動、網絡和電源管理以及系統安全等。
2. 2 Android應用程序框架層
Framework層是Android的應用框架開發(fā)平臺,開發(fā)者在遵循框架原則的基礎上,對框架進行改造和擴展,從而開發(fā)出了各具特色的安卓應用。應用程序的體系結構簡化了組件的重用,讓安卓開發(fā)者的開發(fā)工作也更加的靈活。Framework層包括以下幾個重要部分:
View——視圖的集合,用于構建一個應用程序的界面UI。包括水平列表、垂直列表(listview)、網格(gridview)、文本輸入框(edittext)、按鍵(button)和網頁瀏覽頁面。
ContentProviders——內容提供者,給各個應用程序提供了相應的數據共享接口。
ResourceManager——資源管理器,提供訪問除代碼以外的公開資源,如字符串文件、圖像文件和界面布局文件。
NotificationManager——通知管理器,讓應用程序在狀態(tài)欄上顯示自定義的通知。
ActivityManager——活動管理器,管理應用程序生命周期。
PackeageManager——程序管理器,管理應用程序的安裝,卸載,保存應用程序信息。
3 系統設計
3. 1 系統移植
3. 1. 1 Android源碼獲取和編譯
文章采用的系統是Android4. 0. 4,可在Android官方網站獲取,其主要步驟有以下幾點。
(1)下載repo下載工具。
(2)在本地用mkfile創(chuàng)建bin目錄,接著進入bin目錄用git clone https://android. googlesource. com/tools/repo。
(3)下載完成后進入repo目錄,并且用git checkout切換到穩(wěn)定分支。
(4)用export將repo目錄添加到當前系統的全局環(huán)境變量配置文件中。
(5)在本地創(chuàng)建Android源碼的目錄,并在目錄中運用repo init來下載Android4. 0. 4源碼。
(6)下載完成后,接著編譯內核3. 0. 35的鏡像和EXT4格式鏡像。
(7)使用. /buid/envsetup. sh配置環(huán)境和用lunch選擇開發(fā)平臺,最后通過make-j6來編譯。
3. 1. 2 U-boot裁剪和編譯
文章采用的u-boot2010. 03版本,其中詳細的定制和編譯如下:
(1)解壓tar命令解壓u_boot源碼。
(2)進入解壓后的路徑,對源碼進行CPU、板級平臺、庫等的篩選。
(3)在當前安卓源碼的最開始路徑中的配置文件中設置交叉工具鏈。
(4)編譯配置文件,最后用make-j2編譯出u-boot. bin。
3. 1. 3 系統燒錄
系統的燒錄,首先設置USB模式通過NDW去加載初始化內存,接著設置網絡加載的IP和網關環(huán)境變量,將編譯好的u-boot. bin燒錄到eMMC(inand)中的起始位置,大小是4M,然后設置為eMMC啟動模式;接著通過網絡將編譯好的uImage燒錄到u-boot的后面,大小是4M,同時設置內啟動內核的方式;最后通過網絡加載、燒錄編譯好的文件系統,其燒錄在內存內核的后面大小為16M,接著重新啟動,這樣所有的燒錄工作到此就已經全部完成。
3. 2 硬件模塊分析
3. 2. 1 雙模模塊D3020C介紹
文章采用的硬件平臺是型號為TD3020C的北斗/GPS雙模模塊來給系統提供實時位置信息,它具有體積小、功耗低和支持熱啟動等優(yōu)點,同時該模塊支持BD2 B1工作模式、GPS L1工作模式和BD2 B1/GPS L1混合工作模式三種模式。硬件中電源用VCC、V_BCKP和V_ANT作為輸入,VCC_OUT和VCC_RF作為輸出,天線接在PF_IN支持BD2 B1/GPS L1雙模有源天線,UART串口有串口1(TXD1/RXD1)和串口2(TXD2/RXD2)兩串口,串口一用于獲取位置信息輸出,同時也可用來設置、選擇定位的模式,波特率設置在48000bps~115200bps范圍之內,還有三路用戶可自定義的GPIO接口。
軟件接口協議方面,首先是語句標識符有BD、GP、GN、CC和P,輸出語句格式符有位置信息(GGA)、大地坐標位置信息(GLL)、有效衛(wèi)星號(GSA)、可視衛(wèi)星狀態(tài)(GSV)等;輸入語句格式有設置當前系統工作狀態(tài)(SIR)、設置串口工作波特率(CAS01)和設置NMEA輸出更新率(CAS02)三種。
3. 2. 2 WiFi模塊驅動分析
文章采用的WiFi模塊是基于SDIO的NH387型號,該WiFi模塊的驅動是基于SDIO和MMC總線的。WiFi模塊對于數據包的接收,首先通過中斷響應從網絡設備媒介層中獲取,再通過網絡協議接口層的網絡設備結構體的函數調用鏈接到網絡協議層,接著網絡協議層通過netif_rx函數將WiFi接收到的具體數據再經過socket層和虛擬文件系統層傳到用戶空間;同樣用戶空間需要向外發(fā)送數據,首先將數據通過虛擬文件系統層和網絡socket層交給網絡協議層的dev_queue_device來發(fā)送,最后通過網路設備功能層的相應函數發(fā)送出去。
4 系統測試
在對系統進行研究設計之后,無論是對軟件和硬件還是服務器端和客戶端等各個模塊部分都做了系統的、詳細的測試分析。在對各個功能模塊測試之前,必須先對北斗/GPS硬件定位模式進行選擇設置,在完成定位模式設置后,需要對網絡服務進行選擇,本平臺有有線、無線WiFi和聯通3G三種網絡模式;完成以上兩步后即可以對北斗信號進行測試。
4. 1 北斗移動設備數據上傳測試
在北斗移動設備上,上傳到遠端云服務器進行存儲的實時位置信息和授時信息的情況如圖2所示。
圖2 實時信息情況
從圖2可以看出,系統能從北斗/GPS模塊獲取正確的實時位置信息和授時時間信息,并且可以用HTTP協議遠端上傳到遠端云服務器中進行存儲。
4. 2 遠端云服務器測試
遠端云服務器對北斗移動設備的實時位置信息和時間信息存儲模塊的測試和驗證,可以通過在運行有服務器的ubuntu12. 04下用命令行代碼mysql-u beidou007-p、show database和use beidou以及select * from Location_info;來查看,我們可以清楚地看到北斗1號移動設備的實時位置信息和授時信息都很準確,并每隔3s將重復三次的數據存儲到遠端服務器數據庫beidou的位置數據表Location_info中。
客戶端成功向遠端與服務器請求北斗移動設備的實時位置信息后,服務器查詢Location_info數據表給客戶請求端返回相應的數據。
當我們在瀏覽器上輸入訪問云端與服務器的HTTP協議以POST方式請求的網址時,http://192. 168. 1.103/maps/ WebService/getLocation. php?id=1用來模擬客戶端的數據申請,成功后以json的原始數據返回,從而說明我們可以通過這種格式的命令協議訪問到遠端服務器并可以獲取到我們想要的北斗移動設備最后一次出現的經緯度位置信息和時間。
5 系統測試結論
通過對定位模塊的模式選擇和網絡選擇以及北斗信號測試等操作之后,繼而通過北斗移動設備的實時位置信息的上傳、遠端服務器對信息的存儲和操作的測試,最終確定本文研究的基于飛思卡爾平臺的北斗GPS定位系統的系統功能全部實現并且性能良好。
參考文獻:
[1]吳美平,逯亮清. 北斗雙星系統車輛定向技術[J].國防科技大學學報,2006,28(3):89-93.
[2]徐亮. 基于Android的遠程控制系統[J].計算機工程,2013,39(11):280-284.
[3]曹淑華,吳文紅. GPS與車載導航系統[J].現代電子技術,2007,24(23):201-206.
[4]付超,楊善林,馬溪駿. 基于GPS的低成本車載導航設備的研究實現[J].計算機應用研究,2007,12(2):249-251.
[5]張慶鋒,韓飛,黃賢武. 一種基于電子地圖的GPS定位技術[J].現代電子技術,2005,24(17):86-88.