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