基于嵌入式Linux 的移動(dòng)終端的軟件設計
引言
本文引用地址:http://dyxdggzs.com/article/152405.htm實(shí)時(shí)操作系統(RTOS)是嵌入式應用軟件的基礎和開(kāi)發(fā)平臺,應用程序都是建立在它之上。實(shí)時(shí)嵌入式操作系統的種類(lèi)繁多,大體上可分為兩種:商用型和免費型。商用型的實(shí)時(shí)操作系統功能穩定、可靠,有完善的技術(shù)支持和售后服務(wù),但價(jià)格昂貴。免費型的實(shí)時(shí)操作系統在價(jià)格方面具有優(yōu)勢,目前主要有 Linux、μC/OS 等。
與其它嵌入式操作系統相比,嵌入式 Linux 具有開(kāi)放源代碼、高可靠性以及強大的網(wǎng)絡(luò )功能等優(yōu)勢,因此選用了嵌入式 Linux 系統作為移動(dòng)終端的軟件平臺。
2 車(chē)輛監控系統概述
車(chē)輛監控系統是融全球定位技術(shù)(GPS)、地理信息技術(shù)(GIS)和通用分組無(wú)線(xiàn)業(yè)務(wù)(GPRS)于一體的高科技系統,由移動(dòng)終端、GPRS 網(wǎng)絡(luò )和監控中心組成[1]。移動(dòng)終端安裝在各個(gè)移動(dòng)車(chē)輛上,其上的 GPS 接收器實(shí)時(shí)采集衛星定位信息,然后通過(guò)串口 1 傳送給 ARM 處理器。ARM 處理器先解算出有用的數據(經(jīng)緯度、速度、狀態(tài)等),然后按照 TCP/UDP 協(xié)議的格式封裝成 TCP/UDP 數據包,接著(zhù)加上 IP 報頭和報尾封裝成 IP 數據報。由于 ARM 處理器與 GPRS 通信模塊之間的通信遵循 PPP(Point to Point Protocol,點(diǎn)對點(diǎn)協(xié)議),因而,需要將 IP 數據報按照 PPP 幀的幀格式封裝成 PPP 幀,然后傳遞給接在串口 2 上的 GPRS 通信模塊。GPRS 通信模塊通過(guò)無(wú)線(xiàn)鏈路將數據進(jìn)一步發(fā)送到 SGSN(Serving GPRS Support Node,GPRS 業(yè)務(wù)支持節點(diǎn))。SGSN 進(jìn)行相應的協(xié)議轉換,并按照 GPRS 特有的 GTP(GPRS Tunnel Protocol,GPRS 隧道協(xié)議)將數據封裝成 GTP 包,然后通過(guò) GPRS 骨干網(wǎng)傳送到相應的 GGSN(Gateway GPRS Support Node,GPRS 網(wǎng)關(guān)支持節點(diǎn))。GGSN 也進(jìn)行相應的協(xié)議轉換,再根據外部數據網(wǎng)的協(xié)議格式對數據進(jìn)行新的封裝,并且根據其目的 IP 地址選擇路由進(jìn)行傳送,從而最終傳送到監控中心。監控中心在具有地理信息處理和查詢(xún)功能的電子地圖上進(jìn)行車(chē)輛運動(dòng)軌跡的顯示,并對被監控車(chē)輛的準確位置、速度、運動(dòng)方向、行車(chē)狀態(tài)等參數進(jìn)行監控和查詢(xún)。同時(shí),監控中心也可以向移動(dòng)終端發(fā)送文本信息和控制命令。
由此可見(jiàn),移動(dòng)終端的核心功能是接收 GPS 信號、處理 GPS 數據以及通過(guò) GPRS 網(wǎng)絡(luò )與監控中心進(jìn)行通信(包括向監控中心發(fā)送定位信息和接收監控中心的指令)。
3.1 總體設計
在移動(dòng)終端上,軟件系統主要由三個(gè)部分組成:GPS 信號接收程序、GPS 數據處理程序和 GPRS 通信程序。在嵌入式 Linux 系統平臺下,移動(dòng)終端的軟件系統結構如圖 1 所示。
圖 1 移動(dòng)終端的軟件系統結構
圖 2 GPS 信號接收程序的層次結構
3.2 GPS 信號接收程序
對于移動(dòng)終端,它的第一個(gè)任務(wù)就是接收 GPS 信號。在嵌入式 Linux 系統平臺下,GPS 信號接收程序的層次結構如圖 2 所示。
其中,tty 層、N_TTY 行規程(Line Discipline)層和低層驅動(dòng)程序是嵌入式 Linux 系統中串行通信驅動(dòng)模塊三個(gè)固有的邏輯層,這三層之間有相互調用的接口函數。嵌入式 Linux 系統提供了多種行規程供各類(lèi)設備進(jìn)行選擇,如:TTY 行規程(N_TTY)用于連接終端輸入驅動(dòng)設備和終端顯示驅動(dòng)設備,而 PPP 行規程(N_PPP)用來(lái)連接終端驅動(dòng)設備和網(wǎng)絡(luò )驅動(dòng)設備。GPS 信號接收程序使用了 N_TTY 行規程,GPS 接收器接收到的數據必須經(jīng)過(guò) N_TTY 行規程模塊進(jìn)行規范處理。低層驅動(dòng)程序用來(lái)直接對硬件進(jìn)行操作,而 flip_buffer 是低層驅動(dòng)程序和 N_TTY 行規程之間的高速接口,它保存 GPS 接收器接收到的數據。
在嵌入式 Linux 系統中,內核給接在串口 1 上的 GPS 接收器提供了一個(gè)設備節點(diǎn) /dev/ttyS0 以及標準的文件系統接口[2]。這樣,GPS 信號接收程序對設備節點(diǎn) /dev/ttyS0 的操作就會(huì )被內核映射成對 GPS 接收器的操作。當 GPS 接收器接收到衛星信號時(shí),會(huì )觸發(fā)低層驅動(dòng)程序事先注冊到系統中的中斷處理函數,從而調用函數 receive_chars( ) 把數據填充到 flip_buffer 中,然后調用函數 tty_flip_buffer_push( ) 將數據傳遞給 N_TTY 行規程模塊。N_TTY 行規程模塊中的函數 n_tty_receive_buf( ) 對數據進(jìn)行規范化處理后將其存入 tty 緩沖區中,供應用層的 GPS 信號接收程序來(lái)讀取。
當應用層的 GPS 信號接收程序開(kāi)始運行時(shí),它會(huì )向文件系統發(fā)出讀請求,文件系統發(fā)現此請求的對象為 tty 設備,于是調用函數 tty_read( ),接著(zhù)調用函數 read_chan( ) 讀取 tty 緩沖區中的數據。
3.3 GPS 數據處理程序
GPS 接收器與嵌入式 Linux 平臺之間的通信協(xié)議有很多種,這里采用的通信協(xié)議是 NMEA-0183,它規定了 GPS 數據的輸出速率為 4,800 波特,其輸出都是 ASCII 字符,工作模式為 8-N-1。通信協(xié)議 NMEA-0183 中包含的語(yǔ)句有 GPGGA、GPGLL、GPGSA、GPGSV、GPRMC、GPVTG 等,要想知道車(chē)輛的位置信息,至少要提取出 GPGGA、GPGLL、GPRMC 中的一種。NMEA-0183 協(xié)議報文的語(yǔ)句格式如圖 3 所示。
圖 3 NMEA0183 的報文格式
其中,$ 為串頭,表示串的開(kāi)始;AA 為識別符;XXX 為語(yǔ)句名;ddd…ddd 為數據字段,字母或數字;* 表示串尾;hh 表示 $ 與 * 之間所有字符代碼的校驗和; CR > 為回車(chē)控制符; LF > 為換行控制符。
在車(chē)輛監控系統中,主要關(guān)心的是時(shí)間、車(chē)輛的位置和速度等信息。因此,在移動(dòng)終端上,GPS 數據處理程序的主要功能是從 GPS 接收器接收到的數據中提取出 GPRMC 定位語(yǔ)句,忽略掉其他信息[3]。此后,移動(dòng)終端上的 GPRS 通信程序負責將相關(guān)的數據發(fā)送給監控中心。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論