專(zhuān)利名稱(chēng):一種基于Linux系統(tǒng)的串行RapidIo數(shù)據(jù)傳輸方法
技術(shù)領(lǐng)域:
本發(fā)明涉及無(wú)線(xiàn)通信技術(shù)領(lǐng)域,尤其是涉及一種基于Linux系統(tǒng)的串行RapidIo數(shù)據(jù)傳輸方法。
背景技術(shù):
在嵌入式系統(tǒng)中,傳統(tǒng)的時(shí)序控制均是由外部中斷通知CPU,然后CPU完成該時(shí)序應(yīng)實(shí)現(xiàn)的工作,一般來(lái)說(shuō),由于外部中斷的搶占性和獨(dú)占性,決定了如果同一個(gè)核上的中斷到來(lái)的時(shí)間非常接近,就會(huì)發(fā)生丟中斷的現(xiàn)象,如果將中斷線(xiàn)程化以減少中斷處理時(shí)間,從而緩解丟中斷問(wèn)題,則會(huì)降低系統(tǒng)的實(shí)時(shí)性。用戶(hù)空間與內(nèi)核空間之間的數(shù)據(jù)交換,必然會(huì)產(chǎn)生上下文切換和數(shù)據(jù)拷貝的代價(jià),而使用Uio技術(shù)(用戶(hù)空間進(jìn)行IO存取的技術(shù)),則是直接將內(nèi)核空間地址映射到用戶(hù) 空間,使得這段地址范圍在用戶(hù)態(tài)和內(nèi)核態(tài)均可操作,避免上下文切換和數(shù)據(jù)拷貝。Uio接口已經(jīng)在linux2. 6. 23中正式合并到內(nèi)核的代碼樹(shù)中。rapidio表示高性能嵌入式互連技術(shù),由Rapidio Trade Association在2001年12月開(kāi)發(fā)的一套應(yīng)用于芯片至芯片或板至板通信的公開(kāi)的高帶寬全雙工方案,性能達(dá)到Gigabyte/s。在2004年舉行的委員會(huì)上,國(guó)際標(biāo)準(zhǔn)化組織(ISO)和國(guó)際電工協(xié)會(huì)(IEC) —直投票批準(zhǔn)Rapidio互連規(guī)范成為IS0/IEC DIS18372標(biāo)準(zhǔn),使得Rapidio成為世界上唯一的嵌入式系統(tǒng)互連技術(shù)國(guó)際標(biāo)準(zhǔn)。在一個(gè)rapidio傳輸系統(tǒng)中,所有的設(shè)備共同擁有34位地址的rapidio空間(Rapidio region),這個(gè)空間是個(gè)虛擬的空間,當(dāng)一個(gè)輸出窗口與一個(gè)輸入窗口對(duì)應(yīng)的rapidio空間的地址相同時(shí),數(shù)據(jù)就可以從輸出窗口傳輸?shù)捷斎氪翱冢鐖D4所示,通過(guò)申請(qǐng)的輸出窗口和輸入窗口,將CPU的10 regionClO空間)通過(guò)rapidio傳輸通道與FPGA的內(nèi)存(Memory)連接。根據(jù)《rapidio互聯(lián)規(guī)范》IS0/IEC DIS 18372所述,輸出窗口的地址轉(zhuǎn)換單元(ATMU)是本地10空間與rapidio空間之間的地址轉(zhuǎn)換,同時(shí)DMA (直接內(nèi)存存取)是將數(shù)據(jù)從內(nèi)核空間的地址搬運(yùn)到10空間的地址,并且這兩個(gè)過(guò)程都是由硬件完成,基本對(duì)CPU運(yùn)行程序不會(huì)帶來(lái)任何負(fù)面影響。所以通?;趓apidio協(xié)議的數(shù)據(jù)傳輸設(shè)計(jì)都會(huì)將DMA和rapidio的輸出窗口相結(jié)合,通常每個(gè)輸出窗口申請(qǐng)一個(gè)DMA通道,這樣如果輸出窗口有多個(gè),就會(huì)占用過(guò)多的DMA資源,從而影響整體設(shè)計(jì)。如圖I所示,現(xiàn)有技術(shù)中的rapidio鏈路數(shù)據(jù)傳輸過(guò)程為首先將數(shù)據(jù)從用戶(hù)空間拷貝到內(nèi)核空間的一段地址,然后當(dāng)接收到FPGA等外部時(shí)序設(shè)備的中斷時(shí),CPU執(zhí)行中斷服務(wù)程序開(kāi)啟DMA傳輸,通過(guò)此DMA通道將內(nèi)核空間的數(shù)據(jù)搬運(yùn)到10空間,最后由輸出窗口的ATMU單元,實(shí)現(xiàn)rapidio鏈路的數(shù)據(jù)傳輸。下面描述一個(gè)需要同時(shí)解決上述三個(gè)問(wèn)題的實(shí)際系統(tǒng)。在LTE (長(zhǎng)期演進(jìn))無(wú)線(xiàn)通信基站系統(tǒng)中,數(shù)據(jù)由用戶(hù)態(tài)協(xié)議棧產(chǎn)生并拷貝到內(nèi)核空間對(duì)應(yīng)的地址,并于下個(gè)Ims響應(yīng)由FPGA產(chǎn)生的2個(gè)中斷,再分別通過(guò)rapidio接口發(fā)往FPGA (現(xiàn)場(chǎng)可編程門(mén)陣列)或者DSP (數(shù)字信號(hào)處理器)。當(dāng)只有管理一個(gè)小區(qū)的時(shí)候,數(shù)據(jù)拷貝3次,中斷響應(yīng)2次,當(dāng)管理多個(gè)小區(qū)時(shí),這些操作也會(huì)加倍,此時(shí)按照普通設(shè)計(jì)的系統(tǒng),性能將不能滿(mǎn)足實(shí)際需要。發(fā)明內(nèi)容本發(fā)明提出了一種基于Linux系統(tǒng)的串行RapidIo數(shù)據(jù)傳輸方法,其目的是在無(wú)線(xiàn)通信基站建設(shè)中,滿(mǎn)足高速數(shù)據(jù)傳輸?shù)囊?,有效減少資源占用的同時(shí)有效提高系統(tǒng)的性能。本發(fā)明的技術(shù)方案為一種基于Linux系統(tǒng)的串行RapidIo數(shù)據(jù)傳輸方法,設(shè)置支持rapidio接口的CPU和與CPU相連的對(duì)端設(shè)備,由對(duì)端設(shè)備產(chǎn)生時(shí)序;在初始化后進(jìn)行數(shù)據(jù)傳輸。初始化過(guò)程包括以下子步驟,
步驟I. 1,采用DMA基本鏈表模式,建立DMA鏈表,DMA鏈表中的節(jié)點(diǎn)包括頭節(jié)點(diǎn)和數(shù)據(jù)傳輸節(jié)點(diǎn),每個(gè)rapidio輸出窗口對(duì)應(yīng)一個(gè)DMA鏈表的數(shù)據(jù)傳輸節(jié)點(diǎn);DMA鏈表中每個(gè)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)包括源地址、目的地址、傳輸長(zhǎng)度、下一個(gè)節(jié)點(diǎn)的地址Next link addr, Nextlink addr中設(shè)一個(gè)標(biāo)志位End of link表示當(dāng)前節(jié)點(diǎn)是否為最后一個(gè)節(jié)點(diǎn);
步驟I. 2,申請(qǐng)所需的多個(gè)rapidio輸出窗口,并申請(qǐng)每個(gè)rapidio輸出窗口相應(yīng)的內(nèi)核DMA空間;
步驟I. 3,每一個(gè)內(nèi)核DMA空間地址和相應(yīng)的rapidio輸出窗口的10空間地址分別填入DMA鏈表中對(duì)應(yīng)數(shù)據(jù)傳輸節(jié)點(diǎn)的源地址和目的地址,建立rapidio傳輸通道;
步驟I. 4,申請(qǐng)一個(gè)rapidio輸入窗口,rapidio輸入窗口的地址轉(zhuǎn)換單元的源地址包含CPU的DMA寄存器的地址;同時(shí)在對(duì)端設(shè)備中申請(qǐng)一個(gè)輸出窗口,并且對(duì)端設(shè)備的輸出窗口和rapidio輸入窗口有相同的rapidio空間的地址;
步驟I. 5,使用uio技術(shù),將DMA鏈表、為rapidio輸出窗口申請(qǐng)的內(nèi)核DMA空間的所有存儲(chǔ)空間都映射到用戶(hù)空間;
數(shù)據(jù)傳輸過(guò)程包括以下子步驟,
步驟2. 1,寫(xiě)步驟I. 5使用uio技術(shù)映射到用戶(hù)空間的存儲(chǔ)空間,實(shí)現(xiàn)數(shù)據(jù)裝入;
步驟2. 2,當(dāng)數(shù)據(jù)裝入完成后,在用戶(hù)態(tài)清除DMA鏈表頭結(jié)點(diǎn)的end of link標(biāo)志位;步驟2. 3,當(dāng)對(duì)端設(shè)備產(chǎn)生的時(shí)序到了發(fā)起傳輸數(shù)據(jù)的時(shí)刻后,由對(duì)端設(shè)備通過(guò)步驟I. 3建立的rapidio傳輸通道,寫(xiě)CPU的DMA寄存器,將CPU的DMA寄存器的模式寄存器的[CCJbit 置 I。而且,在DMA鏈表的頭節(jié)點(diǎn)后面增加一個(gè)copy節(jié)點(diǎn)和一個(gè)clone節(jié)點(diǎn),設(shè)置頭節(jié)點(diǎn)的end of link位為I。而且,在DMA鏈表中每一個(gè)rapidio輸出窗口對(duì)應(yīng)的節(jié)點(diǎn)后面增加一個(gè)copy節(jié)點(diǎn)和一個(gè)clone節(jié)點(diǎn),清除上一個(gè)節(jié)點(diǎn)的源地址和目的地址。而且,所述對(duì)端設(shè)備為FPGA或DSP。該方法能在Iinux系統(tǒng)中實(shí)現(xiàn)完全控制發(fā)送時(shí)序并且擺脫利用中斷實(shí)現(xiàn)時(shí)序同時(shí)頻繁響應(yīng)中斷帶來(lái)的性能下降的困境;實(shí)現(xiàn)多個(gè)輸出窗口復(fù)用I個(gè)DMA通道完成數(shù)據(jù)搬運(yùn);利用uio技術(shù),實(shí)現(xiàn)內(nèi)核空間地址到用戶(hù)空間地址的映射,使得在用戶(hù)空間可以直接操作內(nèi)核空間地址,避免用戶(hù)空間和內(nèi)核空間的數(shù)據(jù)拷貝。本發(fā)明的特點(diǎn)包括輸出窗口控制靈活;控制基本上都在用戶(hù)態(tài)完成,無(wú)需上下文切換;外圍FPGA通過(guò)rapidio輸入窗口直接寫(xiě)CPU的DMA寄存器,實(shí)現(xiàn)時(shí)序控制。本發(fā)明對(duì)比已有技術(shù)有以下創(chuàng)新點(diǎn)
I、利用DMA鏈表技術(shù),使Rapidio輸出窗口的數(shù)目脫離DMA通道資源的束縛。2、利用rapidio輸入窗口使得FPGA可以寫(xiě)CPU的DMA寄存器,達(dá)到嚴(yán)格完成數(shù)據(jù)發(fā)送的時(shí)序要求,并且不使用中斷,解決時(shí)序要求和中斷損耗的矛盾。
3、利用uio技術(shù),免除從用戶(hù)空間拷貝數(shù)據(jù)到內(nèi)核空間。4、本設(shè)計(jì)模型還可以通過(guò)修改DMA鏈表的設(shè)計(jì),達(dá)到靈活控制rapidio輸出窗口是否發(fā)送數(shù)據(jù)的目的。
圖I為現(xiàn)有技術(shù)中的rapidio鏈路數(shù)據(jù)傳輸?shù)膫鹘y(tǒng)方法示意 圖2為本發(fā)明實(shí)施例的rapidio鏈路數(shù)據(jù)傳輸方案示意圖。圖3為本發(fā)明實(shí)施例的DMA節(jié)點(diǎn)的主要數(shù)據(jù)結(jié)構(gòu)圖。圖4為現(xiàn)有技術(shù)中的rapidio的數(shù)據(jù)傳輸通道示意圖。圖5為本發(fā)明實(shí)施例建立的DMA節(jié)點(diǎn)的鏈表示意圖。圖6為本發(fā)明實(shí)施例建立的一種數(shù)據(jù)傳輸節(jié)點(diǎn)的示意圖 具體實(shí)施方式
本發(fā)明主要針對(duì)嵌入式系統(tǒng)如何在Iinux系統(tǒng)下應(yīng)用Serial rapid io實(shí)現(xiàn)高速傳輸,提供了一種基于rapidio協(xié)議的設(shè)計(jì),在無(wú)線(xiàn)通信基站建設(shè)中,滿(mǎn)足高速數(shù)據(jù)傳輸?shù)囊?,有效減少資源占用的同時(shí)有效提高系統(tǒng)的性能。本設(shè)計(jì)充分利用rapidio資源,并使用uio、DMA等技術(shù),有效減少數(shù)據(jù)拷貝、完美達(dá)到數(shù)據(jù)發(fā)送時(shí)序要求、合理使用系統(tǒng)資源。以下結(jié)合附圖和實(shí)施例詳細(xì)說(shuō)明本發(fā)明技術(shù)方案,提供了對(duì)該實(shí)施例的全面理解的詳細(xì)細(xì)節(jié)。但是,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)了解,無(wú)需一些所示細(xì)節(jié)也可以實(shí)施本發(fā)明。另夕卜,某些公知結(jié)構(gòu)或功能沒(méi)有進(jìn)行詳細(xì)的說(shuō)明,以免使本發(fā)明的實(shí)施例相關(guān)說(shuō)明不清楚。根據(jù)本發(fā)明的實(shí)施例,提出了一種rapidio鏈路數(shù)據(jù)傳輸?shù)男略O(shè)計(jì),結(jié)合uio技術(shù)、DMA鏈表技術(shù),實(shí)現(xiàn)可控的rapidio鏈路的數(shù)據(jù)傳輸。本發(fā)明實(shí)施例設(shè)置支持rapidio接口的CPU和與CPU相連的對(duì)端設(shè)備(可以是FPGA、DSP等),并且這個(gè)對(duì)端設(shè)備是時(shí)序的主控設(shè)備。下面以這個(gè)對(duì)端設(shè)備是FPGA為例,并且時(shí)序由FPGA控制。如圖2所示,實(shí)施例具體實(shí)施過(guò)程如下,其中沒(méi)有特別指出由FPGA執(zhí)行的都是由CPU執(zhí)行,具體實(shí)施時(shí)可采用軟件技術(shù)實(shí)現(xiàn)自動(dòng)運(yùn)行
I.初始化過(guò)程如下
步驟I. 1,采用DMA基本鏈表模式,建立DMA鏈表,DMA鏈表中的節(jié)點(diǎn)包括頭節(jié)點(diǎn)和數(shù)據(jù)傳輸節(jié)點(diǎn)。鏈表上每個(gè)節(jié)點(diǎn)的主要數(shù)據(jù)結(jié)構(gòu)如圖3所示,包括源地址、目的地址、傳輸長(zhǎng)度、下一個(gè)節(jié)點(diǎn)的地址Next link addr, Next link addr中設(shè)一個(gè)標(biāo)志位End of link表示當(dāng)前節(jié)點(diǎn)是否為最后一個(gè)節(jié)點(diǎn)。因?yàn)樵贚inux系統(tǒng)中DMA節(jié)點(diǎn)的分配使用了一些鎖,很耗時(shí)間,所以在本發(fā)明中為了節(jié)省分配DMA鏈表節(jié)點(diǎn)的時(shí)間,采用初始化時(shí)靜態(tài)分配節(jié)點(diǎn),即當(dāng)初始化分配完成后,完整的鏈表就生成了,當(dāng)FPGA發(fā)起傳輸都會(huì)從當(dāng)前的節(jié)點(diǎn)開(kāi)始運(yùn)行,最后停在end of link標(biāo)志位為I的節(jié)點(diǎn)。本發(fā)明實(shí)施例設(shè)計(jì)的鏈表包括頭節(jié)點(diǎn)(第一個(gè)節(jié)點(diǎn))、數(shù)據(jù)傳輸節(jié)點(diǎn)I…數(shù)據(jù)傳輸節(jié)點(diǎn)η (η為數(shù)據(jù)傳輸節(jié)點(diǎn)總數(shù))。具體實(shí)施時(shí),DMA鏈表上的節(jié)點(diǎn)數(shù)與rapidio輸出窗口的個(gè)數(shù)有關(guān),本發(fā)明設(shè)定每個(gè)rapidio輸出窗口都必須至少對(duì)應(yīng)一個(gè)DMA鏈表的節(jié)點(diǎn)(簡(jiǎn)稱(chēng)DMA節(jié)點(diǎn)),因?yàn)橹辽儆幸粋€(gè)相應(yīng)的數(shù)據(jù)傳輸節(jié)點(diǎn)。本步驟建立DMA鏈表后,即可對(duì)頭節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)的所有信息賦值,包括源地址、目的地址、傳輸長(zhǎng)度、下一個(gè)節(jié)點(diǎn)的地址Next link addr, end of link標(biāo)志位的初始值為O。在后面數(shù)據(jù)傳輸過(guò)程中,數(shù)據(jù)結(jié)構(gòu)中只有end of link標(biāo)志位會(huì)被修改,其他信息不會(huì)改動(dòng)。步驟I. 2,申請(qǐng)所需的多個(gè)rapidio輸出窗口,并相應(yīng)的申請(qǐng)內(nèi)核DMA空間,圖中簡(jiǎn)稱(chēng)為內(nèi)核空間。步驟I. 3,將每一個(gè)內(nèi)核DMA空間地址和相應(yīng)的rapidio輸出窗口的IO空間地址分別填入DMA鏈表中對(duì)應(yīng)數(shù)據(jù)傳輸節(jié)點(diǎn)的源地址和目的地址,從而建立rapidio傳輸通道。數(shù)據(jù)傳輸節(jié)點(diǎn)的其他信息將在數(shù)據(jù)傳輸過(guò)程中填寫(xiě),參見(jiàn)后續(xù)的步驟2. 2。步驟I. 4,申請(qǐng)一個(gè)rapidio輸入窗口,rapidio輸入窗口的ATMU (地址轉(zhuǎn)換單元)的源地址包含CPU的DMA寄存器的地址(DMA regs);同時(shí)在FPGA中申請(qǐng)一個(gè)輸出窗口,并且這兩個(gè)窗口有相同的rapidio空間的地址,這樣就可以使得FPGA通過(guò)它的這個(gè)輸出窗口來(lái)寫(xiě)CPU的DMA寄存器。由于本發(fā)明只關(guān)注CPU的輸出數(shù)據(jù)傳輸,所以CPU的rapidio輸 入窗口的數(shù)目和FPGA的輸出窗口只設(shè)定一個(gè)。對(duì)于CPU的輸出窗口的設(shè)定,可以是小于8的任何數(shù)(受本實(shí)施例所使用的CPU芯片資源所限),CPU端的輸出窗口的申請(qǐng)和對(duì)端輸入窗口的申請(qǐng)與行業(yè)常規(guī)用法相同。步驟1. 5,使用uiο技術(shù),將DMA鏈表、為rapidiο輸出窗口申請(qǐng)的內(nèi)核DMA空間的所有存儲(chǔ)空間都映射到用戶(hù)空間,即從內(nèi)核空間的一段映射到用戶(hù)空間的一段。2.使用過(guò)程
步驟2. 1,寫(xiě)通過(guò)Π0映射到用戶(hù)空間的存儲(chǔ)區(qū),實(shí)際為內(nèi)核空間的地址,實(shí)現(xiàn)數(shù)據(jù)裝入,代替常規(guī)方案中的用戶(hù)空間到內(nèi)核空間的數(shù)據(jù)拷貝。步驟2. 2,當(dāng)數(shù)據(jù)裝入完成后,在用戶(hù)態(tài)把要發(fā)送的數(shù)據(jù)所在的內(nèi)核物理地址填入數(shù)據(jù)傳輸節(jié)點(diǎn)的源地址域JErapidio輸出窗口對(duì)應(yīng)的io地址填入數(shù)據(jù)傳輸節(jié)點(diǎn)的目的地址域;把需要傳輸?shù)拈L(zhǎng)度填入數(shù)據(jù)傳輸節(jié)點(diǎn)的傳輸長(zhǎng)度域,數(shù)據(jù)傳輸節(jié)點(diǎn)的end of link標(biāo)志位置總是為O ;并置DMA鏈表頭節(jié)點(diǎn)的end of link標(biāo)志位為O。此標(biāo)志位位于每個(gè)節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)的next link addr域的最低位,如圖3所示。步驟2. 3,當(dāng)產(chǎn)生時(shí)序的FPGA到了發(fā)起傳輸數(shù)據(jù)的時(shí)刻后,由FPGA通過(guò)初始化過(guò)程的步驟3建立的rapidio傳輸通道,寫(xiě)CPU的DMA寄存器,將CPU的DMA寄存器的MRn(模式寄存器)的[CC]bit置1,表示繼續(xù)傳輸。例如本發(fā)明實(shí)施例中CPU使用的是freescale公司的P4080芯片,CPU內(nèi)部寄存器地址OxfelOOlOO即為DMA的模式寄存器,該寄存器的第30bit位,就是[CC]控制位。為了實(shí)現(xiàn)FPGA每次發(fā)起傳輸只執(zhí)行一遍鏈表然后停止在頭節(jié)點(diǎn)處,本發(fā)明進(jìn)一步擴(kuò)展了 DMA鏈表結(jié)構(gòu),實(shí)施例在頭節(jié)點(diǎn)后設(shè)計(jì)了一個(gè)copy節(jié)點(diǎn)和一個(gè)clone節(jié)點(diǎn),如圖5所示。步驟I. I建立的DMA鏈表包括頭節(jié)點(diǎn)、頭節(jié)點(diǎn)的copy節(jié)點(diǎn)、頭節(jié)點(diǎn)的clone節(jié)點(diǎn)和數(shù)據(jù)傳輸節(jié)點(diǎn)。頭節(jié)點(diǎn)、頭節(jié)點(diǎn)的copy節(jié)點(diǎn)以及頭節(jié)點(diǎn)的clone節(jié)點(diǎn),建立DMA鏈表后對(duì)三個(gè)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)的所有信息賦值。在后面數(shù)據(jù)傳輸過(guò)程中,這三個(gè)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)只會(huì)有end of link標(biāo)志位會(huì)被修改,其余信息沒(méi)有改動(dòng)。頭節(jié)點(diǎn)的Copy節(jié)點(diǎn)結(jié)構(gòu)中的幾個(gè)重要參數(shù)分別設(shè)置為,源地址=Clone節(jié)點(diǎn)的地址,目的地址=頭節(jié)點(diǎn)的地址,傳輸長(zhǎng)度=DMA節(jié)點(diǎn)結(jié)構(gòu)的大小(size), end of Iink=O0頭節(jié)點(diǎn)的Clone節(jié)點(diǎn)結(jié)構(gòu)中的幾個(gè)重要參數(shù)分別設(shè)置為,源地址=與頭節(jié)點(diǎn)相同,目的地址=與頭節(jié)點(diǎn)相同,傳輸長(zhǎng)度=與頭節(jié)點(diǎn)相同,end of Iink=I0由此可見(jiàn)copy節(jié)點(diǎn)的目的就是用clone節(jié)點(diǎn)的內(nèi)容覆蓋頭節(jié)點(diǎn)的內(nèi)容,而頭節(jié)點(diǎn)和clone節(jié)點(diǎn)內(nèi)容的區(qū)別僅僅在于end of link標(biāo)志,所以當(dāng)運(yùn)行完copy節(jié)點(diǎn)時(shí),頭節(jié)點(diǎn)的end of link標(biāo)志為I,于是整個(gè)鏈表運(yùn)行到最后就會(huì)停止在頭節(jié)點(diǎn)處(endof link標(biāo)志為I的節(jié)點(diǎn))。此種方法還可以擴(kuò)展到后面的所有數(shù)據(jù)傳輸節(jié)點(diǎn),見(jiàn)圖6。初始化時(shí)在每一個(gè)rapidio輸出窗口對(duì)應(yīng)的DMA鏈表中數(shù)據(jù)傳輸節(jié)點(diǎn)的后面多申請(qǐng)一個(gè)數(shù)據(jù)傳輸?shù)腸opy節(jié)點(diǎn)和一個(gè)數(shù)據(jù)傳輸?shù)腸lone節(jié)點(diǎn),并給這些節(jié)點(diǎn)結(jié)構(gòu)的所有成員賦值。即步驟I. I建立的DMA鏈表包括頭節(jié)點(diǎn)、頭節(jié)點(diǎn)的copy節(jié)點(diǎn)、頭節(jié)點(diǎn)的clone節(jié)點(diǎn)、多個(gè)數(shù)據(jù)傳輸節(jié)點(diǎn)、每個(gè)數(shù)據(jù)傳輸節(jié)點(diǎn)的相應(yīng)copy節(jié)點(diǎn)和clone節(jié)點(diǎn)。建立DMA鏈表后對(duì)頭節(jié)點(diǎn)、頭節(jié)點(diǎn)的copy節(jié)點(diǎn)、頭節(jié)點(diǎn)的clone節(jié)點(diǎn)、每個(gè)數(shù)據(jù)傳輸節(jié)點(diǎn)的相應(yīng)copy節(jié)點(diǎn)和clone節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)的所有信息賦值。詳情見(jiàn)圖6 :以數(shù)據(jù)傳輸節(jié)點(diǎn)I的具體賦值為例,數(shù)據(jù)傳輸節(jié)點(diǎn)I的相應(yīng)copy節(jié)點(diǎn)記為數(shù)據(jù)傳輸copy節(jié)點(diǎn)I,數(shù)據(jù)傳輸節(jié)點(diǎn)I的相應(yīng)Clone節(jié)點(diǎn)記為數(shù)據(jù)傳輸Clone節(jié)點(diǎn)I。數(shù)據(jù)傳輸copy節(jié)點(diǎn)I的數(shù)據(jù)結(jié)構(gòu)中,源地址=Clone節(jié)點(diǎn)、目的地址=數(shù)據(jù)傳輸節(jié)點(diǎn)、傳輸長(zhǎng)度=節(jié)點(diǎn)結(jié)構(gòu)大小、End of Iink=O0數(shù)據(jù)傳輸Clone節(jié)點(diǎn)I的數(shù)據(jù)結(jié)構(gòu)中,源地址=DMA空間地址、目的地址=DMA空間地址、傳輸長(zhǎng)度=4、End of Iink=O0 Copy節(jié)點(diǎn)用于將 clone節(jié)點(diǎn)結(jié)構(gòu)中的源地址和目的地址等信息覆蓋數(shù)據(jù)傳輸節(jié)點(diǎn)結(jié)構(gòu)中的源地址和目的地址等信息,這樣當(dāng)下一次傳輸開(kāi)始之后,由于DMA沒(méi)有搬運(yùn)數(shù)據(jù)到io空間,于是達(dá)到了這一次rapidio輸出窗口不傳輸數(shù)據(jù)的目的;反之,當(dāng)要傳輸數(shù)據(jù)時(shí),再將輸出窗口對(duì)應(yīng)的DMA鏈表節(jié)點(diǎn)的源地址和目的地址域填上需要的內(nèi)核DMA空間地址和io空間地址。本文中所描述的具體實(shí)施例僅僅是對(duì)本發(fā)明精神作舉例說(shuō)明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對(duì)所描述的具體實(shí)施例做各種各樣的修改或補(bǔ)充或采用類(lèi)似的方式替代,但并不會(huì)偏離本發(fā)明的精神或者超越所附權(quán)利要求書(shū)所定義的范圍。
權(quán)利要求
1.一種基于Linux系統(tǒng)的串行RapidIo數(shù)據(jù)傳輸方法,其特征在于設(shè)置支持rapidio接口的CPU和與CPU相連的對(duì)端設(shè)備,由對(duì)端設(shè)備產(chǎn)生時(shí)序;在初始化后進(jìn)行數(shù)據(jù)傳輸, 初始化過(guò)程包括以下子步驟, 步驟I. 1,采用DMA基本鏈表模式,建立DMA鏈表,DMA鏈表中的節(jié)點(diǎn)包括頭節(jié)點(diǎn)和數(shù)據(jù)傳輸節(jié)點(diǎn),每個(gè)rapidio輸出窗口對(duì)應(yīng)一個(gè)DMA鏈表的數(shù)據(jù)傳輸節(jié)點(diǎn);DMA鏈表中每個(gè)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)包括源地址、目的地址、傳輸長(zhǎng)度、下一個(gè)節(jié)點(diǎn)的地址Next link addr, Nextlink addr中設(shè)一個(gè)標(biāo)志位End of link表示當(dāng)前節(jié)點(diǎn)是否為最后一個(gè)節(jié)點(diǎn); 步驟I. 2,申請(qǐng)所需的多個(gè)rapidio輸出窗口,并申請(qǐng)每個(gè)rapidio輸出窗口相應(yīng)的內(nèi)核DMA空間; 步驟I. 3,每一個(gè)內(nèi)核DMA空間地址和相應(yīng)的rapidio輸出窗口的IO空間地址分別填入DMA鏈表中對(duì)應(yīng)數(shù)據(jù)傳輸節(jié)點(diǎn)的源地址和目的地址,建立rapidio傳輸通道; 步驟1.4,申請(qǐng)一個(gè)rapidio輸入窗口,rapidio輸入窗口的地址轉(zhuǎn)換單元的源地址包含CPU的DMA寄存器的地址;同時(shí)在對(duì)端設(shè)備中申請(qǐng)一個(gè)輸出窗口,并且對(duì)端設(shè)備的輸出窗口和rapidio輸入窗口有相同的rapidio空間的地址; 步驟I. 5,使用uio技術(shù),將DMA鏈表、為rapidio輸出窗口申請(qǐng)的內(nèi)核DMA空間的所有存儲(chǔ)空間都映射到用戶(hù)空間; 數(shù)據(jù)傳輸過(guò)程包括以下子步驟, 步驟2. 1,寫(xiě)步驟I. 5使用uio技術(shù)映射到用戶(hù)空間的存儲(chǔ)空間,實(shí)現(xiàn)數(shù)據(jù)裝入; 步驟2. 2,當(dāng)數(shù)據(jù)裝入完成后,在用戶(hù)態(tài)清除DMA鏈表頭結(jié)點(diǎn)的end of link標(biāo)志位; 步驟2. 3,當(dāng)對(duì)端設(shè)備產(chǎn)生的時(shí)序到了發(fā)起傳輸數(shù)據(jù)的時(shí)刻后,由對(duì)端設(shè)備通過(guò)步驟I.3建立的rapidio傳輸通道,寫(xiě)CPU的DMA寄存器,將CPU的DMA寄存器的模式寄存器的[CCJbit 置 I。
2.根據(jù)權(quán)利要求I所述基于Linux系統(tǒng)的串行RapidIo數(shù)據(jù)傳輸方法,其特征在于在DMA鏈表的頭節(jié)點(diǎn)后面增加一個(gè)copy節(jié)點(diǎn)和一個(gè)clone節(jié)點(diǎn),設(shè)置頭節(jié)點(diǎn)的end of link位為I。
3.根據(jù)權(quán)利要求2所述基于Linux系統(tǒng)的串行RapidIo數(shù)據(jù)傳輸方法,其特征在于在DMA鏈表中每一個(gè)rapidio輸出窗口對(duì)應(yīng)的數(shù)據(jù)傳輸節(jié)點(diǎn)后面增加一個(gè)copy節(jié)點(diǎn)和一個(gè)clone節(jié)點(diǎn),清除上一個(gè)節(jié)點(diǎn)的源地址和目的地址。
4.根據(jù)權(quán)利要求I或2或3所述基于Linux系統(tǒng)的串行RapidIo數(shù)據(jù)傳輸方法,其特征在于所述對(duì)端設(shè)備為FPGA或DSP。
全文摘要
一種基于Linux系統(tǒng)的串行RapidIo數(shù)據(jù)傳輸方法,利用少量的DMA控制器資源,采用DMA鏈表模式,并將DMA控制器的寄存器空間映射到FPGA,從而實(shí)現(xiàn)FPGA通過(guò)寫(xiě)CPU的DMA模式寄存器MRn的[CC]bit,開(kāi)始DMA鏈表傳輸,從而發(fā)起rapidio鏈路的數(shù)據(jù)傳輸,整個(gè)數(shù)據(jù)傳輸過(guò)程無(wú)論是寫(xiě)DMA寄存器還是DMA搬運(yùn)數(shù)據(jù)以及最后的rapidio鏈路數(shù)據(jù)傳輸都不需要CPU參與,極大的提高了CPU效率,并且數(shù)據(jù)傳輸嚴(yán)格按照時(shí)序要求實(shí)現(xiàn),擺脫利用中斷實(shí)現(xiàn)時(shí)序同時(shí)頻繁響應(yīng)中斷帶來(lái)的性能下降的困境;利用uio技術(shù),實(shí)現(xiàn)內(nèi)核空間地址到用戶(hù)空間地址的映射,使得在用戶(hù)空間可以直接操作內(nèi)核空間地址,避免用戶(hù)空間和內(nèi)核空間的數(shù)據(jù)拷貝。并且可以設(shè)計(jì)DMA鏈表節(jié)點(diǎn),實(shí)現(xiàn)rapidio鏈路輸出窗口的數(shù)據(jù)傳輸?shù)撵`活控制。
文檔編號(hào)G06F13/28GK102880573SQ20121032340
公開(kāi)日2013年1月16日 申請(qǐng)日期2012年9月4日 優(yōu)先權(quán)日2012年9月4日
發(fā)明者秦燕婷 申請(qǐng)人:武漢郵電科學(xué)研究院