專利名稱:Linux操作系統(tǒng)CPU數(shù)據(jù)收發(fā)包系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及CPU收發(fā)包技術(shù),尤其涉及一種Linux操作系統(tǒng)CPU數(shù)據(jù)收 發(fā)包系統(tǒng)及方法。
背景技術(shù):
隨著嵌入式產(chǎn)業(yè)的高速發(fā)展,市場上存在很多種嵌入式操作操作系統(tǒng), 如商業(yè)操作系統(tǒng)VxWorks、pSoS、 WinCE等,以及開源操作系統(tǒng)Linux、uClinux 等。商業(yè)操作系統(tǒng)如VxWorks雖然實時性能好,但需要付費,另外操作系統(tǒng) 代碼對用戶不公開,而Linux是免費、開源的,可以應(yīng)用在軟實時的設(shè)備上, 因此Linux在嵌入式設(shè)備的應(yīng)用越來越廣泛。以前很多嵌入式設(shè)備采用了商 業(yè)嵌入式操作系統(tǒng),因此從降低成本的角度出發(fā),需要從這些遺留系統(tǒng)移植 到Linux 。
VxWorks是一種硬實時的嵌入式操作系統(tǒng),采用實內(nèi)存模式,所有任務(wù) 運行在同 一個地址空間,GDB服務(wù)應(yīng)用程序可以直接訪問底層驅(qū)動維護的收 發(fā)包隊列。Linux采用虛擬內(nèi)存管理,上層應(yīng)用程序運行在用戶才莫式,底層驅(qū) 動和收發(fā)包運行在內(nèi)核模式,應(yīng)用程序通過拷貝或映射的方式訪問收發(fā)包隊 列。uClinux是Linux的嵌入式版本,它沒有釆用虛擬內(nèi)存機制,上層應(yīng)用程 序可以直接訪問物理內(nèi)存。
遺留系統(tǒng)從嵌入式實時操作系統(tǒng)(RTOS )移植到Linux,由于兩種操作 系統(tǒng)的內(nèi)存管理模式不同,目前已有的移植方案都是把收發(fā)包放在Linux內(nèi) 核實現(xiàn),然后通過內(nèi)存拷貝的方式上傳到上層應(yīng)用程序,這種方式存在數(shù)據(jù) 的兩次拷貝,因此有必要提出相應(yīng)的解決辦法來提高系統(tǒng)的實時性能。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是在于需要提供一種Linux操作系統(tǒng)CPU數(shù) 據(jù)收發(fā)包系統(tǒng)及方法,以提高直接內(nèi)存訪問(DMA)硬件上的收發(fā)包效率。
為了解決上述技術(shù)問題,本發(fā)明首先提供了 一種Linux操作系統(tǒng)CPU數(shù) 據(jù)收發(fā)包系統(tǒng),該系統(tǒng)包括直接內(nèi)存訪問硬件、Linux系統(tǒng)內(nèi)核、GNU調(diào)試 模塊及應(yīng)用程序模塊,其中
直接內(nèi)存訪問硬件,以接收并存儲用于GNU調(diào)試的調(diào)試數(shù)據(jù)及用于應(yīng)用 程序的用戶數(shù)據(jù),以及將所述GNU調(diào)試的調(diào)試結(jié)果及應(yīng)用程序的待發(fā)送用戶 數(shù)據(jù)發(fā)送出去;
Linux系統(tǒng)內(nèi)核,與所述直接內(nèi)存訪問硬件相連,所述直接內(nèi)存訪問硬件 存儲所述調(diào)試數(shù)據(jù)時觸發(fā)中斷,將所述調(diào)試數(shù)據(jù)進行發(fā)送給所述GNU調(diào)試模 塊;并將所述GNU調(diào)試模塊發(fā)送的調(diào)試結(jié)果發(fā)送給所述直接內(nèi)存訪問硬件;
GNU調(diào)試模塊,與所述Linux系統(tǒng)內(nèi)核相連,用于對所述調(diào)試數(shù)據(jù)進行 GNU調(diào)試,將GNU調(diào)試的調(diào)試結(jié)果發(fā)送給所述Linux系統(tǒng)內(nèi)核;及
應(yīng)用程序模塊,與所述直接內(nèi)存訪問硬件相連,所述直接內(nèi)存訪問硬件 存儲有所述用戶數(shù)據(jù)時,對所述用戶數(shù)據(jù)進行應(yīng)用程序處理;需要發(fā)送用戶 數(shù)據(jù)時將待發(fā)送用戶數(shù)據(jù)發(fā)送給所述直接內(nèi)存訪問硬件。
如上所述的系統(tǒng)中,所述直接內(nèi)存訪問硬件可以包括直接內(nèi)存訪問硬件 接口、調(diào)試接收隊列、調(diào)試發(fā)送隊列、應(yīng)用接收隊列及應(yīng)用發(fā)送隊列,其中
直接內(nèi)存訪問硬件接口,用于接收所述調(diào)試數(shù)據(jù)及用戶數(shù)據(jù),并將所述 調(diào)試結(jié)果及待發(fā)送用戶數(shù)據(jù)發(fā)送出去;
調(diào)試接收隊列,與所述直接內(nèi)存訪問硬件接口相連,用于存儲所述調(diào)試 數(shù)據(jù);
調(diào)試發(fā)送隊列,與所述直接內(nèi)存訪問硬件接口相連,用于存儲所述調(diào)試 結(jié)果;
應(yīng)用接收隊列,與所述直接內(nèi)存訪問硬件接口相連,用于存儲所述用戶 數(shù)據(jù);及
應(yīng)用發(fā)送隊列,與所述直接內(nèi)存訪問硬件接口相連,用于存儲所述待發(fā) 送用戶數(shù)據(jù)。
進一步地,所述Linux系統(tǒng)內(nèi)核可以進一步用于對所述調(diào)試接收隊列及 調(diào)試發(fā)送隊列的初始化;所述應(yīng)用程序^^莫塊可以進一步用于對所述應(yīng)用接收 隊列及應(yīng)用發(fā)送隊列的初始化。
如上所述的系統(tǒng)中,所述應(yīng)用程序才莫塊可以周期查詢所述直接內(nèi)存訪問 硬件,獲得所述用戶數(shù)據(jù)的存儲地址,根據(jù)所述存儲地址對所述用戶數(shù)據(jù)進 行所述應(yīng)用程序處理。
如上所述的系統(tǒng)中,所述Linux系統(tǒng)內(nèi)核觸發(fā)中斷后,可以進一步對所 述調(diào)試數(shù)據(jù)進行出錯檢查,然后發(fā)送給所述GNU調(diào)試模塊。
本發(fā)明還提供了一種Linux操作系統(tǒng)CPU數(shù)據(jù)收發(fā)包方法,接收并存儲 用于GNU調(diào)試的調(diào)試數(shù)據(jù)及用于應(yīng)用程序的用戶數(shù)據(jù);存儲所述調(diào)試數(shù)據(jù)后 觸發(fā)中斷,對所述調(diào)試數(shù)據(jù)進行GNU調(diào)試,在所述GNU調(diào)試結(jié)束之后將調(diào) 試結(jié)果發(fā)送出去;存儲有所述用戶數(shù)據(jù)時,對所述用戶數(shù)據(jù)進行應(yīng)用程序處理。
如上所述的方法中,可以設(shè)置調(diào)試接收隊列、調(diào)試發(fā)送隊列、應(yīng)用接收 隊列及應(yīng)用發(fā)送隊列,分別用于存儲所述調(diào)試數(shù)據(jù)、調(diào)試結(jié)果、用戶數(shù)據(jù)及 待發(fā)送用戶數(shù)據(jù)。
如上所述的方法中,觸發(fā)中斷后,可以進一步對所述調(diào)試數(shù)據(jù)進行出錯 檢查,然后對所迷調(diào)試數(shù)據(jù)進行GNU調(diào)試。
如上所述的方法中,對所述用戶數(shù)據(jù)進行所述應(yīng)用程序處理的步驟,可 以包括通過周期查詢獲得所述用戶數(shù)據(jù)的存儲地址,根據(jù)所述存儲地址對所 述用戶數(shù)據(jù)進行所述應(yīng)用程序處理。
與現(xiàn)有技術(shù)相比,本發(fā)明系統(tǒng)可以直接對用戶數(shù)據(jù)進行處理而不需要經(jīng) 過Linux系統(tǒng)內(nèi)核,提高了 DMA硬件上的收發(fā)包效率。此外,本發(fā)明方法從 傳統(tǒng)的嵌入式RTOS應(yīng)用系統(tǒng)移植到Linux操作系統(tǒng)時,減少代碼移植的工 作量。
圖1是本發(fā)明系統(tǒng)實施例組成示意圖。
圖2是本發(fā)明方法實施例步驟示意圖。
具體實施例方式
以下將結(jié)合附圖及實施例來詳細說明本發(fā)明的實施方式,借此對本發(fā)明 如何應(yīng)用技術(shù)手段來解決技術(shù)問題,并達成技術(shù)效果的實現(xiàn)過程能充分理解 并據(jù)以實施。
圖1示出了本發(fā)明系統(tǒng)實施例的組成,該系統(tǒng)實施例主要包括直接內(nèi)存 訪問(DMA)硬件110、 Linux系統(tǒng)內(nèi)核120、 GNU調(diào)試(GNU DeBug, GDB )模塊130及應(yīng)用程序模塊140,其中
直接內(nèi)存訪問(DMA)硬件110,通過DMA硬件接口 111完成硬件驅(qū)
序的用戶數(shù)據(jù);DMA硬件110包括分別用于調(diào)試數(shù)據(jù)接收和發(fā)送的調(diào)試接收 隊列112和調(diào)試發(fā)送隊列114,以及分別用于用戶數(shù)據(jù)接收和發(fā)送的應(yīng)用接 收隊列116和應(yīng)用發(fā)送隊列118,每個隊列均可根據(jù)需要分配多個內(nèi)存緩沖 區(qū),本實施例為每個隊列分別設(shè)置128個;DMA硬件接口 111所接收的調(diào)試 數(shù)據(jù)存儲到調(diào)試接收隊列112,所接收的用戶數(shù)據(jù)存儲到應(yīng)用接收隊列116 中;調(diào)試發(fā)送隊列114中的調(diào)試數(shù)據(jù),及應(yīng)用發(fā)送隊列118中的待發(fā)送用戶 數(shù)據(jù),通過DMA硬件接口 lll發(fā)送出去;
Linux系統(tǒng)內(nèi)核120,通過內(nèi)核接口 121與DMA硬件110相連,用于對 DMA硬件110中的調(diào)試接收隊列112和調(diào)試發(fā)送隊列114的初始化,當DMA 硬件接口 111接收到GNU調(diào)試數(shù)據(jù)并存儲到DMA硬件110上的調(diào)試接收隊 列112后觸發(fā)中斷,并在中斷處理程序中對調(diào)試數(shù)據(jù)進行出錯檢查等處理后, 把調(diào)試數(shù)據(jù)交給Linux系統(tǒng)內(nèi)核120中的網(wǎng)絡(luò)協(xié)議子系統(tǒng)122;網(wǎng)絡(luò)協(xié)議子系 統(tǒng)122對調(diào)試數(shù)據(jù)進行緩沖區(qū)分配等處理,通過用戶空間發(fā)送給GDB模塊 130;
GDB模塊130,通過用戶空間與Linux系統(tǒng)內(nèi)核120相連,用于對Linux 系統(tǒng)內(nèi)核120發(fā)送的調(diào)試數(shù)據(jù)進行調(diào)試,并在調(diào)試結(jié)束之后將調(diào)試結(jié)果返回 給GDB服務(wù)應(yīng)用程序用于顯示狀態(tài)和結(jié)果等,然后將調(diào)試結(jié)果通過系統(tǒng)調(diào)用 拷貝到內(nèi)核空間,反饋給Linux系統(tǒng)內(nèi)核120中的網(wǎng)絡(luò)協(xié)議子系統(tǒng)122,并經(jīng)
由Linux系統(tǒng)內(nèi)核120發(fā)送到DMA硬件110中的調(diào)試發(fā)送隊列114,再由 DMA硬件接口 111發(fā)送出去;
應(yīng)用程序模塊140,其中的上層用戶應(yīng)用程序可以直接訪問物理內(nèi)存, 通過應(yīng)用程序模塊141連接DMA硬件110,由應(yīng)用程序初始化DMA硬件110 中的應(yīng)用接收隊列116和應(yīng)用發(fā)送隊列118;應(yīng)用程序才莫塊140周期查詢應(yīng) 用接收隊列116, DMA硬件110接收到用戶數(shù)據(jù)并存儲到應(yīng)用接收隊列116 后,獲得用戶數(shù)據(jù)的存儲地址,不需要拷貝內(nèi)存直接把用戶數(shù)據(jù)的存儲地址 發(fā)送給應(yīng)用程序,由應(yīng)用程序根據(jù)存儲地址對用戶數(shù)據(jù)進行應(yīng)用程序處理; 當應(yīng)用程序需要向外發(fā)送待發(fā)送用戶數(shù)據(jù)時,通過應(yīng)用程序接口 141直接把 待發(fā)送用戶數(shù)據(jù)存儲到應(yīng)用發(fā)送隊列118中,經(jīng)由DMA硬件接口 111發(fā)送 出去。
圖2示出了本發(fā)明方法實施例的步驟流程,該方法實施例主要包括如下 步驟
步驟210, DMA硬件110接收用于GNU調(diào)試的調(diào)試數(shù)據(jù)及用于應(yīng)用程 序的用戶數(shù)據(jù),分別將調(diào)試數(shù)據(jù)及用戶數(shù)據(jù)存儲到調(diào)試接收隊列112及應(yīng)用 接收隊列116;
步驟220,DMA硬件IIO接收到調(diào)試數(shù)據(jù)并存儲到調(diào)試接收隊列112后, Linux系統(tǒng)內(nèi)核120觸發(fā)中斷,在中斷處理程序中對調(diào)試數(shù)據(jù)進行出錯檢查等 處理后,由網(wǎng)絡(luò)協(xié)議子系統(tǒng)122進行緩沖區(qū)分配等處理;
步驟230, GDB模塊130對網(wǎng)絡(luò)協(xié)議子系統(tǒng)122進行緩沖區(qū)分配等處理 后的調(diào)試數(shù)據(jù)進行調(diào)試,在調(diào)試結(jié)束之后將調(diào)試結(jié)果返回給GDB服務(wù)應(yīng)用程 序以顯示狀態(tài)和結(jié)果等;
步驟240, GDB模塊130將調(diào)試結(jié)果反饋給網(wǎng)絡(luò)協(xié)議子系統(tǒng)122,并由 Linux系統(tǒng)內(nèi)核120發(fā)送到DMA硬件110中的調(diào)試發(fā)送隊列114,由DMA 硬件接口 111發(fā)送出去;
步驟270,在執(zhí)行步驟220的同時,應(yīng)用程序i^莫塊140周期查詢應(yīng)用接 收隊列116,在查詢到應(yīng)用接收隊列116中存儲有用戶數(shù)據(jù)后獲得用戶數(shù)據(jù)
的存儲地址;
步驟280,應(yīng)用程序根據(jù)用戶數(shù)據(jù)的存儲地址對用戶數(shù)據(jù)進行應(yīng)用程序 處理;
步驟290,應(yīng)用程序需要發(fā)送用戶數(shù)據(jù)時,通過應(yīng)用程序接口 141直接 把用戶數(shù)據(jù)存儲到應(yīng)用發(fā)送隊列118中,經(jīng)由DMA硬件接口 111發(fā)送出去。
與現(xiàn)有技術(shù)相比,本發(fā)明通過硬件機制對數(shù)據(jù)進行分類處理,擺脫了 Linux內(nèi)核的限制,可以直接對用戶數(shù)據(jù)進行處理而不需要經(jīng)過Linux系統(tǒng)內(nèi) 核,提高了用戶數(shù)據(jù)的處理效率,因此DMA硬件上的收發(fā)包效率得以明顯 提高。此外,本發(fā)明還提供了一種從傳統(tǒng)的嵌入式RTOS應(yīng)用系統(tǒng)移植到 Linux操作系統(tǒng)的一種方法,通過這種方法,減少代碼移植的工作量。
雖然本發(fā)明所揭露的實施方式如上,但所述的內(nèi)容只是為了便于理解本 發(fā)明而采用的實施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬技術(shù)領(lǐng)域內(nèi) 的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實施的 形式上及細節(jié)上作任何的修改與變化,但本發(fā)明的專利保護范圍,仍須以所 附的權(quán)利要求書所界定的范圍為準。
權(quán)利要求
1.一種Linux操作系統(tǒng)CPU數(shù)據(jù)收發(fā)包系統(tǒng),其特征在于,該系統(tǒng)包括直接內(nèi)存訪問硬件、Linux系統(tǒng)內(nèi)核、GNU調(diào)試模塊及應(yīng)用程序模塊,其中直接內(nèi)存訪問硬件,以接收并存儲用于GNU調(diào)試的調(diào)試數(shù)據(jù)及用于應(yīng)用程序的用戶數(shù)據(jù),以及將所述GNU調(diào)試的調(diào)試結(jié)果及應(yīng)用程序的待發(fā)送用戶數(shù)據(jù)發(fā)送出去;Linux系統(tǒng)內(nèi)核,與所述直接內(nèi)存訪問硬件相連,所述直接內(nèi)存訪問硬件存儲所述調(diào)試數(shù)據(jù)時觸發(fā)中斷,將所述調(diào)試數(shù)據(jù)進行發(fā)送給所述GNU調(diào)試模塊;并將所述GNU調(diào)試模塊發(fā)送的調(diào)試結(jié)果發(fā)送給所述直接內(nèi)存訪問硬件;GNU調(diào)試模塊,與所述Linux系統(tǒng)內(nèi)核相連,用于對所述調(diào)試數(shù)據(jù)進行GNU調(diào)試,將GNU調(diào)試的調(diào)試結(jié)果發(fā)送給所述Linux系統(tǒng)內(nèi)核;及應(yīng)用程序模塊,與所述直接內(nèi)存訪問硬件相連,所述直接內(nèi)存訪問硬件存儲有所述用戶數(shù)據(jù)時,對所述用戶數(shù)據(jù)進行應(yīng)用程序處理;需要發(fā)送用戶數(shù)據(jù)時將待發(fā)送用戶數(shù)據(jù)發(fā)送給所述直接內(nèi)存訪問硬件。
2、 如權(quán)利要求l所述的系統(tǒng),其特征在于,所述直接內(nèi)存訪問硬件包括 直接內(nèi)存訪問硬件接口、調(diào)試接收隊列、調(diào)試發(fā)送隊列、應(yīng)用接收隊列及應(yīng) 用發(fā)送隊列,其中直接內(nèi)存訪問硬件接口,用于接收所述調(diào)試數(shù)據(jù)及用戶數(shù)據(jù),并將所述 調(diào)試結(jié)果及待發(fā)送用戶數(shù)據(jù)發(fā)送出去;調(diào)試接收隊列,與所述直接內(nèi)存訪問硬件接口相連,用于存儲所述調(diào)試 數(shù)據(jù);調(diào)試發(fā)送隊列,與所述直接內(nèi)存訪問硬件接口相連,用于存儲所述調(diào)試 結(jié)果;應(yīng)用接收隊列,與所述直接內(nèi)存訪問硬件接口相連,用于存儲所述用戶 數(shù)據(jù);及應(yīng)用發(fā)送隊列,與所述直接內(nèi)存訪問硬件接口相連,用于存儲所述待發(fā) 送用戶數(shù)據(jù)。
3、 如權(quán)利要求2所述的系統(tǒng),其特征在于所述Linux系統(tǒng)內(nèi)核進一步用于對所述調(diào)試接收隊列及調(diào)試發(fā)送隊列的 初始化;所述應(yīng)用程序才莫塊進一步用于對所述應(yīng)用接收隊列及應(yīng)用發(fā)送隊列的初 始化。
4、 如權(quán)利要求l所述的系統(tǒng),其特征在于所述應(yīng)用程序才莫塊周期查詢所述直接內(nèi)存訪問硬件,獲得所述用戶數(shù)據(jù) 的存儲地址,根據(jù)所述存儲地址對所述用戶數(shù)據(jù)進行所述應(yīng)用程序處理。
5、 如權(quán)利要求l所述的系統(tǒng),其特征在于所述Linux系統(tǒng)內(nèi)核觸發(fā)中斷后,進一步對所述調(diào)試數(shù)據(jù)進行出錯檢查, 然后發(fā)送給所述GNU調(diào)試模塊。
6、 一種Linux操作系統(tǒng)CPU數(shù)據(jù)收發(fā)包方法,其特征在于,接收并存 儲用于GNU調(diào)試的調(diào)試數(shù)據(jù)及用于應(yīng)用程序的用戶數(shù)據(jù);存儲所述調(diào)試數(shù)據(jù) 后觸發(fā)中斷,對所述調(diào)試數(shù)據(jù)進行GNU調(diào)試,在所述GNU調(diào)試結(jié)束之后將 調(diào)試結(jié)果發(fā)送出去;存儲有所述用戶數(shù)據(jù)時,對所述用戶數(shù)據(jù)進行應(yīng)用程序 處理。
7、 如權(quán)利要求6所述的方法,其特征在于設(shè)置調(diào)試接收隊列、調(diào)試發(fā)送隊列、應(yīng)用接收隊列及應(yīng)用發(fā)送隊列,分 別用于存儲所述調(diào)試數(shù)據(jù)、調(diào)試結(jié)果、用戶數(shù)據(jù)及待發(fā)送用戶數(shù)據(jù)。
8、 如權(quán)利要求6所述的方法,其特征在于觸發(fā)中斷后,進一步對所述調(diào)試數(shù)據(jù)進行出錯檢查,然后對所述調(diào)試數(shù) 據(jù)進行GNU調(diào)試。
9、 如權(quán)利要求6所述的方法,其特征在于對所述用戶數(shù)據(jù)進行所述應(yīng)用程序處理的步驟,包括通過周期查詢獲得 所述用戶數(shù)據(jù)的存儲地址,根據(jù)所述存儲地址對所述用戶數(shù)據(jù)進行所述應(yīng)用 程序處理。
全文摘要
本發(fā)明公開了一種Linux操作系統(tǒng)CPU數(shù)據(jù)收發(fā)包系統(tǒng)及方法,以提高直接內(nèi)存訪問(DMA)硬件上的收發(fā)包效率。其中該方法主要包括接收并存儲用于GNU調(diào)試的調(diào)試數(shù)據(jù)及用于應(yīng)用程序的用戶數(shù)據(jù);存儲所述調(diào)試數(shù)據(jù)后觸發(fā)中斷,對所述調(diào)試數(shù)據(jù)進行GNU調(diào)試,在所述GNU調(diào)試結(jié)束之后將調(diào)試結(jié)果發(fā)送出去;存儲有所述用戶數(shù)據(jù)時,對所述用戶數(shù)據(jù)進行應(yīng)用程序處理。本發(fā)明提高了DMA硬件上的收發(fā)包效率,從傳統(tǒng)的嵌入式RTOS應(yīng)用系統(tǒng)移植到Linux操作系統(tǒng)時,減少代碼移植的工作量。
文檔編號G06F9/54GK101369236SQ20081021177
公開日2009年2月18日 申請日期2008年9月23日 優(yōu)先權(quán)日2008年9月23日
發(fā)明者張君輝, 羅友松 申請人:中興通訊股份有限公司