基于嵌入式Linux的3G無線視頻終端的設(shè)計與實現(xiàn)
以視頻壓縮模塊為例,其軟件流程如圖6所示。本文引用地址:http://m.butianyuan.cn/article/150415.htm
2.3 網(wǎng)絡(luò)轉(zhuǎn)發(fā)模塊設(shè)計
在完成對采集圖像的壓縮或者接收完視頻服務(wù)器后,需要將數(shù)據(jù)通過3G網(wǎng)進行轉(zhuǎn)發(fā),完成網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)發(fā)通常采取的辦法是利用Linux提供的socket API進行,socket給用戶提供了統(tǒng)一的編程接口,網(wǎng)絡(luò)傳輸協(xié)議通常有TCP和UDP兩種,對于TCP每次要通過3次握手建立連接,在等待亂序及重傳丟失數(shù)據(jù)時會產(chǎn)生較大延時,而UDP又缺乏流量控制,所以都不太適用于實時數(shù)據(jù)傳輸,在這種情況下運行于UDP之上的RTP則具有很大的優(yōu)勢,目前對于有實時要求的數(shù)據(jù)傳輸RTP是最好的協(xié)議,故在本系統(tǒng)中使用了RTP協(xié)議作為數(shù)據(jù)傳輸協(xié)議,流程如圖7所示。
2.4 3G模塊驅(qū)動設(shè)計及聯(lián)網(wǎng)
3G模塊與ARM是通過USB相連的。無線終端到3G網(wǎng)絡(luò)的連接是通過PPP協(xié)議實現(xiàn)的,PPP協(xié)議是一種點對點串行通信協(xié)議,為在點對點連接上傳輸多協(xié)議數(shù)據(jù)包提供了一個標準方法。由于目前嵌入式市場上的3G模塊基本上都是提供Windows CE操作系統(tǒng)下的驅(qū)動程序,但對于嵌入式Linux下面的目前還沒有驅(qū)動支持,所以為本系統(tǒng)開發(fā)了3G模塊的驅(qū)動程序。要完成3G模塊的撥號上網(wǎng)功能,需要3個層面的支持:1)是內(nèi)核層面;2)驅(qū)動層面;3)應(yīng)用程序?qū)用娴闹С帧?nèi)核層面主要是通過對內(nèi)核的重新配置來完成,由于3G模塊與ARM通過USB線連接,而上層的PPP通信采用的是串行協(xié)議,所以要在內(nèi)核中加入USB轉(zhuǎn)串口的支持,通過makemenuconfig命令進入內(nèi)核配置界面,依次選擇Device Drivers->USB support->USB Serial Converter Support選擇USB Generic Serial Driver按兩次空格鍵使項目前加[*]將其編譯入內(nèi)核,其中加*為編譯成內(nèi)核模塊,加M為編譯為模塊。由于采用的是PPP協(xié)議,故要在內(nèi)核中加入PPP的支持。進入內(nèi)核配置界面以后,依次選擇DeviceDrivers->Network device support->PPP(point-to-point)protocol support選中,將PPP編譯入內(nèi)核,同時選擇PPP展開項,將其全部編譯入內(nèi)核,保存退出。對于驅(qū)動層面,3G模塊的驅(qū)動開發(fā)主要是通過修改兩個文件generic.c以及usb-serial.c,其中g(shù)eneric.c為USB通用程序,usb-serial.c為USB轉(zhuǎn)串口程序。通過在其中加入一些網(wǎng)絡(luò)層的hook函數(shù)來達到對上層協(xié)議的支持。將修改過后的文件復制到/linux2.6.29/drivers/usb/serial,重新編譯內(nèi)核,生成zImage鏡像,然后下載到板子上。完成3G模塊驅(qū)動的設(shè)計以及內(nèi)核對PPP協(xié)議的支持,對于撥號上網(wǎng)應(yīng)用程序的支持,主要是通過PPP提供的兩個工具pppd和chat來實現(xiàn)的,其中PPP提供了一種點對串行線路上傳輸數(shù)據(jù)流的方法,chat主要用于撥號并等待提示。可從網(wǎng)上下載PPP源碼,在本系統(tǒng)中采用的版本為PPP-2.4.0,下載后要解壓并且根據(jù)目標板的類型來進行交叉編譯得到撥號程序。
3 結(jié)束語
本文在一塊ARM開發(fā)板上實現(xiàn)了多種功能,包括無線數(shù)據(jù)視頻終端,通過外接視頻服務(wù)器實現(xiàn)了現(xiàn)有視頻服務(wù)器的3G功能擴展,通過采用了Netfilter與socket結(jié)合的方法,將數(shù)據(jù)包獲取功能從用戶態(tài)載入Linux內(nèi)核態(tài),避免了數(shù)據(jù)的內(nèi)存拷貝,提高了處理效率,同時引入內(nèi)核緩沖機制。解決了3G撥號延時而造成的視頻服務(wù)器丟包問題,配合Netfilter用戶工具iptables的使用,可以在本系統(tǒng)上實現(xiàn)NAT,包過濾防火墻等功能。方便對流經(jīng)系統(tǒng)數(shù)據(jù)包的管理。
針對目前市場上的3G模塊大多只提供Windows CE下驅(qū)動這一問題,開發(fā)了3G模塊驅(qū)動,使得現(xiàn)有3G模塊可使用與嵌入式Linux系統(tǒng)下,用戶可直接在此基礎(chǔ)上通過socket進行編程,而無需考慮底層的硬件通信問題。在軟件設(shè)計上充分發(fā)揮開源軟件的優(yōu)勢,采用Xvideore進行視頻編碼,以及PPP源碼編譯撥號軟件等,縮短了系統(tǒng)開發(fā)周期,系統(tǒng)在軟件的整體設(shè)計上提出了一套相對通用的軟件架構(gòu),可方便實現(xiàn)功能的擴展及升級。
評論