一種實(shí)現(xiàn)arm cpu用戶態(tài)收發(fā)報(bào)文的方法
【專利摘要】本發(fā)明公開(kāi)了一種實(shí)現(xiàn)ARM?CPU用戶態(tài)收發(fā)報(bào)文的方法,所述方法包括:對(duì)ARM網(wǎng)口的內(nèi)核驅(qū)動(dòng)進(jìn)行整改,除去Linux內(nèi)核中ARM網(wǎng)口初始化函數(shù)中掛載的關(guān)于中斷及收發(fā)包的函數(shù);將所述除去的ARM網(wǎng)口初始化函數(shù)中關(guān)于收發(fā)包的函數(shù)移植到用戶態(tài);用戶態(tài)在初始化時(shí)從內(nèi)核獲取大塊連續(xù)內(nèi)存,并對(duì)這塊物理連續(xù)內(nèi)存進(jìn)行單獨(dú)管理,使得用戶態(tài)空間可以訪問(wèn)到DMA的內(nèi)存;用戶態(tài)在初始化時(shí)進(jìn)行與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器的配置,使得收發(fā)包過(guò)程中用戶態(tài)可以讀寫與ARM網(wǎng)口收發(fā)相關(guān)的硬件控制寄存器;用戶態(tài)收發(fā)報(bào)文。本發(fā)明消除了內(nèi)核態(tài)收發(fā)包觸發(fā)大量中斷及數(shù)據(jù)包到用戶態(tài)拷貝致使消耗大量CPU性能的缺陷,提高了設(shè)備的轉(zhuǎn)發(fā)性能。
【專利說(shuō)明】—種實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)網(wǎng)絡(luò)【技術(shù)領(lǐng)域】,具體涉及一種實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文的方法。
【背景技術(shù)】
[0002]ARM CPU多為內(nèi)核驅(qū)動(dòng),網(wǎng)口初始化與收發(fā)包都部署在內(nèi)核態(tài),這樣在數(shù)據(jù)報(bào)文大流量的沖擊下會(huì)引發(fā)大量的中斷,導(dǎo)致消耗一定的CPU資源,同時(shí)Linux操作系統(tǒng)的內(nèi)核態(tài)到用戶態(tài)的數(shù)據(jù)拷貝也會(huì)損耗大量的CPU性能,如果能夠使用用戶態(tài)來(lái)收發(fā)報(bào)文,則會(huì)大大提高設(shè)備的轉(zhuǎn)發(fā)報(bào)文性能。
[0003]因此,有必要提供一種實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文的方法,使得用戶態(tài)空間可以訪問(wèn)到DMA的內(nèi)存,實(shí)現(xiàn)用戶態(tài)收發(fā)報(bào)文,以解決上述技術(shù)問(wèn)題。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是提供一種實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文的方法,使得用戶態(tài)空間可以訪問(wèn)到DMA的內(nèi)存,實(shí)現(xiàn)用戶態(tài)收發(fā)報(bào)文,以解決使用內(nèi)核態(tài)收發(fā)報(bào)文導(dǎo)致消耗大量CPU性能,不利于提高設(shè)備轉(zhuǎn)發(fā)性能的缺陷。
[0005]根據(jù)本發(fā)明的一個(gè)方面,提供一種實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文的方法,包括以下步驟:步驟SI,對(duì)ARM網(wǎng)口的內(nèi)核驅(qū)動(dòng)進(jìn)行整改,除去Linux內(nèi)核中ARM網(wǎng)口初始化函數(shù)中掛載的關(guān)于中斷及收發(fā)包的函數(shù);步驟S2,將所述除去的ARM網(wǎng)口初始化函數(shù)中關(guān)于收發(fā)包的函數(shù)移植到用戶態(tài);步驟S3,用戶態(tài)在初始化時(shí)從內(nèi)核獲取大塊連續(xù)內(nèi)存,并對(duì)這塊物理連續(xù)內(nèi)存進(jìn)行單獨(dú)管理,使得用戶態(tài)空間可以訪問(wèn)到DMA的內(nèi)存;步驟S4,用戶態(tài)在初始化時(shí)進(jìn)行與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器的配置,使得收發(fā)包過(guò)程中用戶態(tài)可以讀寫與ARM網(wǎng)口收發(fā)相關(guān)的硬件控制寄存器;步驟S5,用戶態(tài)進(jìn)行收發(fā)報(bào)文。
[0006]其中,在上述發(fā)明中,所述步驟S2進(jìn)一步包括:步驟S21,將與ARM網(wǎng)口收發(fā)包相關(guān)的處理函數(shù)移植到用戶態(tài);步驟S22,對(duì)用戶態(tài)中植入后的與ARM網(wǎng)口收發(fā)包相關(guān)的處理函數(shù)進(jìn)行整改,去掉一些用戶態(tài)不需要的操作;步驟S23,創(chuàng)建線程進(jìn)行收包,編譯鏈接生成可執(zhí)行程序。
[0007]其中,在上述發(fā)明中,所述收包采用輪詢方式進(jìn)行。
[0008]其中,在上述發(fā)明中,所述步驟S3進(jìn)一步包括:步驟S31,在Linux內(nèi)核初始化時(shí),申請(qǐng)大塊連續(xù)內(nèi)存,以備用戶態(tài)收發(fā)包申請(qǐng)skb使用;步驟S32,用戶態(tài)初始化時(shí),通過(guò)1ctl方式從內(nèi)核獲取已申請(qǐng)的所述大塊連續(xù)內(nèi)存的地址和大??;步驟S33,采用_ap函數(shù)將所述大塊連續(xù)內(nèi)存的地址映射為用戶態(tài)可操作的虛擬地址,使得收發(fā)包使用的skb申請(qǐng)和釋放可以在映射后的這塊內(nèi)存中進(jìn)行。
[0009]其中,在上述發(fā)明中,所述步驟S31進(jìn)一步包括:在Linux內(nèi)核初始化時(shí),利用Bigphysarea申請(qǐng)所述大塊連續(xù)內(nèi)存,以備用戶態(tài)收發(fā)包申請(qǐng)skb使用。
[0010]其中,在上述發(fā)明中,所述已申請(qǐng)的所述大塊連續(xù)內(nèi)存的大小為300M。
[0011]其中,在上述發(fā)明中,所述步驟S4進(jìn)一步包括:步驟S41,用戶態(tài)在初始化時(shí)獲取與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器的物理基地址及寄存器空間的大??;步驟S42,將所述獲取的硬件寄存器的物理基地址及寄存器空間的大小定義為宏,通過(guò)_ap函數(shù)將硬件寄存器的基地址映射為用戶態(tài)虛擬地址。
[0012]其中,在上述發(fā)明中,所述步驟S5進(jìn)一步包括:用戶態(tài)通過(guò)執(zhí)行ARM網(wǎng)口的收發(fā)包初始化函數(shù),分配收發(fā)資源,控制寄存器的配置、接口注冊(cè)及收發(fā)函數(shù)掛載,來(lái)實(shí)現(xiàn)收發(fā)報(bào)文。
[0013]其中,在上述發(fā)明中,所述分配收發(fā)的資源包括隊(duì)列、描述符和buffer緩存。
[0014]根據(jù)本發(fā)明的一種實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文的方法,將ARM網(wǎng)口的內(nèi)核驅(qū)動(dòng)進(jìn)行整改并在內(nèi)核進(jìn)行加載,而將網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的收發(fā)則移植到用戶態(tài),消除了內(nèi)核態(tài)收發(fā)包觸發(fā)大量中斷及數(shù)據(jù)包到用戶態(tài)拷貝致使消耗大量CPU性能的缺陷,提高了設(shè)備的轉(zhuǎn)發(fā)性能。
【專利附圖】
【附圖說(shuō)明】
[0015]圖1顯示了現(xiàn)有技術(shù)中的Linux內(nèi)核態(tài)收發(fā)報(bào)文的結(jié)構(gòu)示意圖;
[0016]圖2顯示了本發(fā)明的實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文的結(jié)構(gòu)示意圖;
[0017]圖3顯示了本發(fā)明優(yōu)選實(shí)施例的實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文方法的流程圖;
[0018]圖4顯示了圖3中步驟S2的子流程圖;
[0019]圖5顯示了圖3中步驟S3的子流程圖;
[0020]圖6顯示了圖3中步驟S4的子流程圖。
【具體實(shí)施方式】
[0021]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明了,下面結(jié)合【具體實(shí)施方式】并參照附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。應(yīng)該理解,這些描述只是示例性的,而并非要限制本發(fā)明的范圍。此外,在以下說(shuō)明中,省略了對(duì)公知結(jié)構(gòu)和技術(shù)的描述,以避免不必要地混淆本發(fā)明的概念。
[0022]圖1顯示了現(xiàn)有技術(shù)中的Linux內(nèi)核態(tài)收發(fā)報(bào)文的結(jié)構(gòu)示意圖。
[0023]如圖1所示,在現(xiàn)有技術(shù)中,ARM CPU多為內(nèi)核驅(qū)動(dòng),網(wǎng)口初始化與收發(fā)包都部署在內(nèi)核態(tài),使得Linux系統(tǒng)通過(guò)內(nèi)核態(tài)來(lái)收發(fā)報(bào)文,再將報(bào)文拷貝至用戶態(tài),但是在數(shù)據(jù)報(bào)文大流量的沖擊下會(huì)引發(fā)大量的中斷,這樣會(huì)導(dǎo)致消耗一定的CPU資源,同時(shí)Linux操作系統(tǒng)的內(nèi)核態(tài)到用戶態(tài)的數(shù)據(jù)拷貝也會(huì)損耗大量的CPU性能。
[0024]圖2顯示了本發(fā)明的實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文的結(jié)構(gòu)示意圖。
[0025]如圖2所示,在本發(fā)明中,將ARM網(wǎng)口的內(nèi)核驅(qū)動(dòng)進(jìn)行整改并在內(nèi)核進(jìn)行加載,而將網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的收發(fā)則移植到用戶態(tài),實(shí)現(xiàn)用戶態(tài)直接收發(fā)報(bào)文,消除了內(nèi)核態(tài)收發(fā)包觸發(fā)大量中斷及數(shù)據(jù)包到用戶態(tài)拷貝致使消耗大量CPU性能的缺陷,提高了設(shè)備的轉(zhuǎn)發(fā)性倉(cāng)泛。
[0026]圖3顯示了本發(fā)明優(yōu)選實(shí)施例的實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文方法的流程圖;圖4顯示了圖3中步驟S2的子流程圖;圖5顯示了圖3中步驟S3的子流程圖;圖6顯示了圖3中步驟S4的子流程圖。
[0027]如圖3所示,本發(fā)明優(yōu)選實(shí)施例的實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文方法包括以下步驟:
[0028]步驟SI,對(duì)ARM網(wǎng)口的內(nèi)核驅(qū)動(dòng)進(jìn)行整改,除去Linux內(nèi)核中ARM網(wǎng)口初始化函數(shù)中掛載的關(guān)于中斷及收發(fā)包的函數(shù)。
[0029]一般地,ARM CPU多為內(nèi)核驅(qū)動(dòng),網(wǎng)口初始化與收發(fā)包都部署在內(nèi)核態(tài),使得Linux系統(tǒng)通過(guò)內(nèi)核態(tài)來(lái)收發(fā)報(bào)文,再將報(bào)文拷貝至用戶態(tài)。在步驟SI中,對(duì)ARM網(wǎng)口的內(nèi)核驅(qū)動(dòng)進(jìn)行整改,除去Linux內(nèi)核中ARM網(wǎng)口初始化函數(shù)中掛載的關(guān)于中斷及收發(fā)包的函數(shù),使得內(nèi)核不再使用中斷收發(fā)報(bào)文,只進(jìn)行正常的網(wǎng)口初始化及一些硬件控制寄存器的配置。
[0030]步驟S2,將所述除去的ARM網(wǎng)口初始化函數(shù)中關(guān)于收發(fā)包的函數(shù)移植到用戶態(tài)。
[0031]本步驟將內(nèi)核中的ARM網(wǎng)口初始化函數(shù)中關(guān)于收發(fā)包的函數(shù)移植到用戶態(tài),使得用戶態(tài)直接收發(fā)報(bào)文,消除內(nèi)核態(tài)收發(fā)包觸發(fā)大量中斷及數(shù)據(jù)包到用戶態(tài)拷貝致使消耗大量CPU性能的缺陷,提高設(shè)備的轉(zhuǎn)發(fā)性能。
[0032]其中,步驟S2如圖4所示,包括下述子步驟:
[0033]步驟S21,將與ARM網(wǎng)口收發(fā)包相關(guān)的處理函數(shù)移植到用戶態(tài)。即將內(nèi)核中的ARM網(wǎng)口初始化函數(shù)中關(guān)于收發(fā)包的函數(shù)移植到用戶態(tài)。
[0034]步驟S22,對(duì)用戶態(tài)中植入后的與ARM網(wǎng)口收發(fā)包相關(guān)的處理函數(shù)進(jìn)行整改,去掉一些用戶態(tài)不需要的操作。并不是將所有與ARM網(wǎng)口收發(fā)包相關(guān)的處理函數(shù)都保留在用戶態(tài),而是為了在提高系統(tǒng)轉(zhuǎn)發(fā)性能的同時(shí)盡量減小CPU性能的消耗,將一些用戶態(tài)不需要的操作去掉,例如CPU控制等是用戶態(tài)所不需要的操作,因此可以去掉。
[0035]步驟S23,創(chuàng)建線程進(jìn)行收包,編譯鏈接生成可執(zhí)行程序。優(yōu)選地,采用輪詢方式進(jìn)行收包。
[0036]步驟S3,用戶態(tài)在初始化時(shí)從內(nèi)核獲取大塊連續(xù)內(nèi)存,并對(duì)這塊物理連續(xù)內(nèi)存進(jìn)行單獨(dú)管理,使得用戶態(tài)空間可以訪問(wèn)到DMA的內(nèi)存。
[0037]具體來(lái)說(shuō),步驟S3如圖5所示,包括下述子步驟:
[0038]步驟S31,在Linux內(nèi)核初始化時(shí),申請(qǐng)大塊連續(xù)內(nèi)存,以備用戶態(tài)收發(fā)包申請(qǐng)skb使用。具體地,在Linux內(nèi)核初始化時(shí),利用Bigphysarea向內(nèi)核申請(qǐng)大塊連續(xù)內(nèi)存,以備用戶態(tài)收發(fā)包申請(qǐng)skb使用,skb是標(biāo)識(shí)報(bào)文的一個(gè)數(shù)據(jù)結(jié)構(gòu),包括報(bào)文頭、數(shù)據(jù)段等,內(nèi)核的所有業(yè)務(wù)處理都基于skb數(shù)據(jù)結(jié)構(gòu)完成,其中Bigphysarea為大塊內(nèi)存申請(qǐng)的補(bǔ)丁,可以有效地解決Linux系統(tǒng)無(wú)法申請(qǐng)大塊連續(xù)內(nèi)存的問(wèn)題。在步驟S31中,優(yōu)先地,向內(nèi)核申請(qǐng)大小為300M的連續(xù)內(nèi)存,當(dāng)然所要申請(qǐng)的連續(xù)內(nèi)存的大小可以根據(jù)系統(tǒng)總內(nèi)存的大小自行定義,如果總內(nèi)存越大,相應(yīng)地可以申請(qǐng)更大的連續(xù)內(nèi)存,反之要減小所要申請(qǐng)的連續(xù)內(nèi)存的大小。
[0039]步驟S32,用戶態(tài)初始化時(shí),通過(guò)1ctl (1ctl是設(shè)備驅(qū)動(dòng)程序中對(duì)設(shè)備的I/O通道進(jìn)行管理的函數(shù),可用于用戶態(tài)和內(nèi)核間通信)方式從內(nèi)核獲取所述申請(qǐng)的大塊連續(xù)內(nèi)存的地址和大小。具體地,通過(guò)1ctl方式對(duì)申請(qǐng)的內(nèi)存進(jìn)行檢測(cè),檢測(cè)出該內(nèi)存的地址和大小,如果檢測(cè)到地址和大小相符,則進(jìn)行獲取。
[0040]步驟S33,采用_ap函數(shù)將所述大塊連續(xù)內(nèi)存的地址映射為用戶態(tài)可操作的虛擬地址,使得收發(fā)包使用的skb申請(qǐng)和釋放可以在映射后的這塊內(nèi)存中進(jìn)行。
[0041]在步驟S33中,完成地址的映射操作,將步驟S31中申請(qǐng)到的內(nèi)存的地址映射為用戶態(tài)可操作的虛擬地址,使得用戶態(tài)可以對(duì)這塊物理連續(xù)內(nèi)存進(jìn)行單獨(dú)管理,以實(shí)現(xiàn)用戶態(tài)空間可以訪問(wèn)到DMA的內(nèi)存。
[0042]步驟S4,用戶態(tài)在初始化時(shí)進(jìn)行與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器的配置,使得收發(fā)包過(guò)程中用戶態(tài)可以讀寫與ARM網(wǎng)口收發(fā)相關(guān)的硬件控制寄存器。
[0043]具體來(lái)說(shuō),步驟S4如圖6所示,包括下述子步驟:
[0044]步驟S41,用戶態(tài)在初始化時(shí)獲取與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器的物理基地址及寄存器空間的大小。
[0045]步驟S42,將所述獲取的硬件寄存器的物理基地址及寄存器空間的大小定義為宏,通過(guò)_ap函數(shù)將硬件寄存器的基地址映射為用戶態(tài)虛擬地址。
[0046]通過(guò)步驟S41和步驟S42的流程,用戶態(tài)先獲取與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器的物理基地址及寄存器空間的大小,再使用_ap函數(shù)將硬件寄存器的基地址映射為用戶態(tài)虛擬地址,使得用戶態(tài)可以對(duì)與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器進(jìn)行管理,保證收發(fā)包過(guò)程中用戶態(tài)可以讀寫與ARM網(wǎng)口收發(fā)相關(guān)的硬件控制寄存器。
[0047]步驟S5,用戶態(tài)收發(fā)報(bào)文。
[0048]在步驟S5中,具體地,用戶態(tài)執(zhí)行ARM網(wǎng)口的收發(fā)包初始化函數(shù),該執(zhí)行過(guò)程和內(nèi)核執(zhí)行過(guò)程相似,在所有與收發(fā)相關(guān)的操作中都需執(zhí)行。另外,用戶態(tài)分配收發(fā)資源,控制寄存器的配置、接口注冊(cè)及收發(fā)函數(shù)掛載,實(shí)現(xiàn)收發(fā)報(bào)文。其中分配收發(fā)的資源包括隊(duì)列、描述符、buffer緩存等。
[0049]通過(guò)采用上述流程,先采用Bigphysarea申請(qǐng)大塊連續(xù)內(nèi)存,然后采用mmap函數(shù)將申請(qǐng)的內(nèi)存的物理地址映射為用戶態(tài)虛擬地址,使得用戶態(tài)空間可以訪問(wèn)到DMA的內(nèi)存,并且在用戶態(tài)進(jìn)行與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器的配置,實(shí)現(xiàn)了用戶態(tài)收發(fā)報(bào)文,消除了內(nèi)核態(tài)收發(fā)包觸發(fā)大量中斷及數(shù)據(jù)包到用戶態(tài)拷貝致使消耗大量CPU性能的缺陷,進(jìn)而提高了設(shè)備轉(zhuǎn)發(fā)性能。
[0050]應(yīng)當(dāng)理解的是,本發(fā)明的上述【具體實(shí)施方式】?jī)H僅用于示例性說(shuō)明或解釋本發(fā)明的原理,而不構(gòu)成對(duì)本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。此外,本發(fā)明所附權(quán)利要求旨在涵蓋落入所附權(quán)利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。
【權(quán)利要求】
1.一種實(shí)現(xiàn)ARM CPU用戶態(tài)收發(fā)報(bào)文的方法,其特征在于,包括以下步驟: 步驟SI,對(duì)ARM網(wǎng)口的內(nèi)核驅(qū)動(dòng)進(jìn)行整改,除去Linux內(nèi)核中ARM網(wǎng)口初始化函數(shù)中掛載的關(guān)于中斷及收發(fā)包的函數(shù); 步驟S2,將所述除去的ARM網(wǎng)口初始化函數(shù)中關(guān)于收發(fā)包的函數(shù)移植到用戶態(tài); 步驟S3,用戶態(tài)在初始化時(shí)從內(nèi)核獲取大塊連續(xù)內(nèi)存,并對(duì)這塊物理連續(xù)內(nèi)存進(jìn)行單獨(dú)管理,使得用戶態(tài)空間可以訪問(wèn)到DMA的內(nèi)存; 步驟S4,用戶態(tài)在初始化時(shí)進(jìn)行與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器的配置,使得收發(fā)包過(guò)程中用戶態(tài)可以讀寫與ARM網(wǎng)口收發(fā)相關(guān)的硬件控制寄存器; 步驟S5,用戶態(tài)收發(fā)報(bào)文。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S2進(jìn)一步包括: 步驟S21,將與ARM網(wǎng)口收發(fā)包相關(guān)的處理函數(shù)移植到用戶態(tài); 步驟S22,對(duì)用戶態(tài)中植入后的與ARM網(wǎng)口收發(fā)包相關(guān)的處理函數(shù)進(jìn)行整改,去掉一些用戶態(tài)不需要的操作; 步驟S23,創(chuàng)建線程進(jìn)行收包,編譯鏈接生成可執(zhí)行程序。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述收包采用輪詢方式進(jìn)行。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S3進(jìn)一步包括: 步驟S31,在Linux內(nèi)核初始化時(shí),申請(qǐng)大塊連續(xù)內(nèi)存,以備用戶態(tài)收發(fā)包申請(qǐng)skb使用; 步驟S32,用戶態(tài)初始化時(shí),通過(guò)1ctl方式從內(nèi)核獲取已申請(qǐng)的所述大塊連續(xù)內(nèi)存的地址和大??; 步驟S33,采用_ap函數(shù)將所述大塊連續(xù)內(nèi)存的地址映射為用戶態(tài)可操作的虛擬地址,使得收發(fā)包使用的skb申請(qǐng)和釋放可以在映射后的這塊內(nèi)存中進(jìn)行。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述步驟S31進(jìn)一步包括: 在Linux內(nèi)核初始化時(shí),利用Bigphysarea申請(qǐng)所述大塊連續(xù)內(nèi)存,以備用戶態(tài)收發(fā)包申請(qǐng)skb使用。
6.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述已申請(qǐng)的所述大塊連續(xù)內(nèi)存的大小為 300M。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S4進(jìn)一步包括: 步驟S41,用戶態(tài)在初始化時(shí)獲取與ARM網(wǎng)口收發(fā)相關(guān)的硬件寄存器的物理基地址及寄存器空間的大??; 步驟S42,將所述獲取的硬件寄存器的物理基地址及寄存器空間的大小定義為宏,通過(guò)mmap函數(shù)將硬件寄存器的基地址映射為用戶態(tài)虛擬地址。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S5進(jìn)一步包括: 用戶態(tài)通過(guò)執(zhí)行ARM網(wǎng)口的收發(fā)包初始化函數(shù),分配收發(fā)資源,控制寄存器的配置、接口注冊(cè)及收發(fā)函數(shù)掛載,來(lái)實(shí)現(xiàn)收發(fā)報(bào)文。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述分配收發(fā)的資源包括隊(duì)列、描述符和buffer 緩存。
【文檔編號(hào)】G06F12/08GK104050101SQ201410232336
【公開(kāi)日】2014年9月17日 申請(qǐng)日期:2014年5月29日 優(yōu)先權(quán)日:2014年5月29日
【發(fā)明者】高福亮 申請(qǐng)人:漢柏科技有限公司