HPI接13的視頻數(shù)據(jù)傳輸系統(tǒng)設(shè)計
其中vm_flags字段設(shè)置了VM_RESERVED,表示該數(shù)據(jù)緩沖區(qū)一直常駐內(nèi)存,在內(nèi)存不足時,不會被交換出去。內(nèi)核和進程同時對數(shù)據(jù)緩沖區(qū)讀寫,為了保證數(shù)據(jù)的一致性,對該區(qū)域的訪問不應(yīng)該經(jīng)過CPU內(nèi)部的緩沖區(qū),所以用pgprot_noncached設(shè)置非緩沖標志。
mmap系統(tǒng)調(diào)用返回一個進程虛擬地址,該地址就是vma->vm_start字段,進程對該虛擬地址的訪問,最終變?yōu)閷ξ锢淼刂稢ACHE_PHY的訪問。
2.3 數(shù)據(jù)緩沖管理
緩沖管理的主要任務(wù)是,當(dāng)ARM接收到新的一幀時,為其分配相應(yīng)的緩存,并將在物理地址重映射到進程虛擬地址。當(dāng)應(yīng)用程序處理該幀時,緩沖管理負責(zé)內(nèi)存區(qū)域的回收。
當(dāng)Linux內(nèi)核啟動時,可以傳人參數(shù)mem=PHY_LEN,指定存儲空間的大小。在本例中,內(nèi)核啟動時為HPI驅(qū)動預(yù)留8 MB的高端物理內(nèi)存。在本例中,借助Linux中對普通外設(shè)I/O內(nèi)存(PCI卡內(nèi)存等)管理的思想,用高度為2的樹表示一塊連續(xù)的區(qū)域。該數(shù)據(jù)結(jié)構(gòu)的優(yōu)點在于,資源分配簡單,把離散的小內(nèi)存合并為一塊連續(xù)的大緩沖區(qū)的算法復(fù)雜度為O(1)。具體實現(xiàn)請參閱內(nèi)核源碼中resource結(jié)構(gòu)相關(guān)部分。
重映射新一幀視頻數(shù)據(jù)到進程虛擬地址是緩沖管理的另一任務(wù)。因為前一幀數(shù)據(jù)物理地址已經(jīng)映射到進程虛擬地址,需要先將前幀物理地址與進程虛擬地址的映射關(guān)系去掉,然后重映射當(dāng)前幀數(shù)據(jù)到進程虛擬地址。去掉物理地址與進程虛擬地址的映射關(guān)系由內(nèi)核函數(shù)zap_page_range完成,調(diào)用該函數(shù)后,如果進程再訪問該虛擬地址,內(nèi)核會產(chǎn)生缺頁中斷。這時再用remap_page_range建立當(dāng)前幀數(shù)據(jù)物理地址與進程虛擬地址間的映射關(guān)系,進程就可以通過同一虛擬地址訪問當(dāng)前幀的數(shù)據(jù)了。該方法的意義在于,進程不用頻繁調(diào)用mmap建立物理地址與虛擬地址的映射,只用調(diào)用一次,當(dāng)有新數(shù)據(jù)到達時,驅(qū)動自動將新幀數(shù)據(jù)映射到先前的進程虛擬地址,提高了進程處理視頻數(shù)據(jù)的效率。實現(xiàn)代碼如下:本文引用地址:http://butianyuan.cn/article/166938.htm
結(jié) 語
在當(dāng)前視頻處理平臺上,視頻處理、視頻傳輸、復(fù)雜任務(wù)管理等工作一般都是由一塊DSP處理器單獨完成,結(jié)合其他嵌入式微處理器協(xié)同工作的技術(shù)方案剛剛起步。經(jīng)測試,在基于本文提出的高速通信方法設(shè)計的視頻處理平臺上,TMS320DM642與AT9lRM9200間的通信速率可以達到50 Mbps,帶寬足夠用來傳輸MPEG等壓縮視頻數(shù)據(jù)。如果用HPl32模式,速度還會大幅度提高。同時,因為Linux系統(tǒng)的實時性不是很強,如果采用其他實時性強的操作系統(tǒng),如Vxworks等,系統(tǒng)性能還會有大的提高。
評論