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