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