亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種linux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法

文檔序號:9200227閱讀:237來源:國知局
一種linux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及以太網(wǎng)交換機技術(shù)領(lǐng)域,尤其涉及一種Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法。
【背景技術(shù)】
[0002]當前潛入式Iinux涉及內(nèi)核的問題調(diào)試手段主要是重新編譯整個內(nèi)核或者使用KGDB(kernel GNU Debugger)軟件。重新編譯整個內(nèi)核耗時比較長,而KGDB軟件搭建環(huán)境比較繁雜且需要內(nèi)核支持。更為重要的是這兩種方法需要升級設(shè)備系統(tǒng)版本,然后重啟動系統(tǒng)才能修復(fù)問題,這在某些情況下是不允許的,如某些客戶重要網(wǎng)絡(luò)不允許斷網(wǎng)。
[0003]現(xiàn)有的涉及嵌入式Iinux內(nèi)核的問題跟蹤、調(diào)試及修復(fù)的方法主要存在以下問題:重新編譯整個Iinux內(nèi)核需要重新燒錄、重啟動設(shè)備系統(tǒng)且耗時比較長。使用KGDB除了搭建環(huán)境復(fù)雜之外,無法支持改動比較大的修改。

【發(fā)明內(nèi)容】

[0004]本發(fā)明需解決的技術(shù)問題是克服上述的不足,提供一種Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法,包括:
[0005]修改問題函數(shù),在問題函數(shù)原函數(shù)名前添加前綴,定義為修復(fù)函數(shù);
[0006]創(chuàng)建驅(qū)動模塊;
[0007]把驅(qū)動模塊安裝到系統(tǒng)設(shè)備中;
[0008]在驅(qū)動模塊的初始化函數(shù)里面查找模塊內(nèi)部定義的帶有所述前綴的修復(fù)函數(shù);
[0009]在內(nèi)核符號表中查找問題函數(shù)與修復(fù)函數(shù)的函數(shù)地址,修改問題函數(shù)的入口指令,跳轉(zhuǎn)到修復(fù)函數(shù)執(zhí)行。
[0010]進一步的,所述的前綴為prefix_。
[0011]進一步的,所述創(chuàng)建驅(qū)動模塊的步驟具體為編譯所述修復(fù)函數(shù)鏈接為驅(qū)動模塊。
[0012]進一步的,所述驅(qū)動模塊命名為linux_kernel.ko。
[0013]進一步的,所述方法還包括:
[0014]在修改指令前先將舊的指令保存到一個數(shù)組中;
[0015]卸載驅(qū)動模塊時從所述數(shù)組中恢復(fù)修改前的指令,恢復(fù)原來函數(shù)的調(diào)用流程。
[0016]采用本發(fā)明的技術(shù)方案后,將問題函數(shù)修改代碼編譯鏈接成一個Iinux驅(qū)動模塊,在驅(qū)動模塊內(nèi)標識需要修改的內(nèi)核函數(shù),在Iinux內(nèi)核加載驅(qū)動模塊時,查找到所述驅(qū)動模塊所標識的內(nèi)核內(nèi)部函數(shù),然后修改這個函數(shù)的入口指令,跳轉(zhuǎn)到我們的驅(qū)動模塊定義的修復(fù)函數(shù)執(zhí)行,這樣便可以在這個修復(fù)函數(shù)里邊跟蹤、調(diào)試及修復(fù)問題,解決了以往調(diào)試修復(fù)困難的問題,提高了效率。
【附圖說明】
[0017]圖1是本發(fā)明提供的Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法示意圖;
[0018]圖2是本發(fā)明提供的Iinux內(nèi)核原函數(shù)調(diào)用關(guān)系示意圖;
[0019]圖3是本發(fā)明提供的Iinux內(nèi)核函數(shù)調(diào)用關(guān)系示意圖。
【具體實施方式】
[0020]為了使本領(lǐng)域相關(guān)技術(shù)人員更好地理解本發(fā)明的技術(shù)方案,下面將結(jié)合本發(fā)明實施方式的附圖,對本發(fā)明實施方式中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施方式僅僅是本發(fā)明一部分實施方式,而不是全部的實施方式。
[0021]下面結(jié)合附圖和實施方式對本發(fā)明作進一步說明。
[0022]參閱圖1,本發(fā)明提供的一種Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法,包括下列步驟:
[0023]步驟S100,修改問題函數(shù),在問題函數(shù)原函數(shù)名前添加前綴,定義為修復(fù)函數(shù);
[0024]如圖2所示,遠Iinux內(nèi)核的函數(shù)調(diào)用流程為:funct1n_a — funct1n_b — funct1n_Co現(xiàn)在假如funct1n_b出現(xiàn)問題需要修復(fù)調(diào)試,則將問題函數(shù)funct1n_b拷貝到一個新的原文件,修改所述問題函數(shù)funct1n_b。修改完成后,重新命名,在原函數(shù)名前加前綴,本實施例中,前綴為prefix_,即pref ix_funct1n_b,定義pref ix_funct1n_b為修復(fù)函數(shù)。
[0025]步驟S200,創(chuàng)建驅(qū)動模塊;
[0026]具體的,編譯上述修復(fù)函數(shù)prefix_funct1n_b鏈接為驅(qū)動模塊,將驅(qū)動模塊命名為 linux_kernel.ko。
[0027]步驟S300,把驅(qū)動模塊安裝到系統(tǒng)設(shè)備中;
[0028]把步驟S200生成的linux_kernel.ko安裝到系統(tǒng)設(shè)備中。
[0029]步驟S400,在驅(qū)動模塊的初始化函數(shù)里面查找模塊內(nèi)部定義的帶有所述前綴的修復(fù)函數(shù);
[0030]在linux_kernel.ko的初始化函數(shù)里面查找驅(qū)動模塊內(nèi)部定義的,名字帶有步驟SlOO中的前綴的函數(shù),本實施例中,查找到prefix_funct1n_b,通過前綴“prefix_”便會認為prefix_funct1n_b是用來修復(fù)函數(shù)funct1n_b的。
[0031 ] 步驟S500,在內(nèi)核符號表中查找問題函數(shù)與修復(fù)函數(shù)的函數(shù)地址,修改問題函數(shù)的入口指令,跳轉(zhuǎn)到修復(fù)函數(shù)執(zhí)行。
[0032]如圖3所示,在驅(qū)動模塊安裝后,初始化時根據(jù)prefix_funct1n_b查找到funct1n_b 的位置,把原本 funct1n_a 調(diào)用 funct1n_b 修改為調(diào)用 prefix_funct1n_b,prefix_funct1n_b執(zhí)行完之后跳轉(zhuǎn)到funct1n_c執(zhí)行,這樣函數(shù)調(diào)用流程就由原來的 funct1n_a 一 funct1n_b 一 funct1n_c 變?yōu)?funct1n_a 一 prefix_funct1n_b 一 funct1n_c。
[0033]在優(yōu)選實施例中,所述Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法還包括:
[0034]在修改指令前先將舊的指令保存到一個數(shù)組中;
[0035]卸載驅(qū)動模塊時從所述數(shù)組中恢復(fù)修改前的指令,恢復(fù)原來函數(shù)的調(diào)用流程。
[0036]在調(diào)試過程中,如果發(fā)現(xiàn)問題不是出現(xiàn)在問題函數(shù),而需要恢復(fù)原來的函數(shù)調(diào)用關(guān)系,則在修改指令前先將舊指令保存到一個數(shù)組中是一個非常保險的措施。
[0037]采用本發(fā)明的技術(shù)方案后,將問題函數(shù)修改代碼編譯鏈接成一個Iinux驅(qū)動模塊,在驅(qū)動模塊內(nèi)標識需要修改的內(nèi)核函數(shù),在Iinux內(nèi)核加載驅(qū)動模塊時,查找到所述驅(qū)動模塊所標識的內(nèi)核內(nèi)部函數(shù),然后修改這個函數(shù)的入口指令,跳轉(zhuǎn)到我們的驅(qū)動模塊定義的修復(fù)函數(shù)執(zhí)行,這樣便可以在這個修復(fù)函數(shù)里邊跟蹤、調(diào)試及修復(fù)問題,解決了以往調(diào)試修復(fù)困難的問題,提高了效率。
[0038]以上僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應(yīng)以所附權(quán)利要求為準。
【主權(quán)項】
1.一種Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法,其特征在于,包括: 修改問題函數(shù),在問題函數(shù)原函數(shù)名前添加前綴,定義為修復(fù)函數(shù); 創(chuàng)建驅(qū)動模塊; 把驅(qū)動模塊安裝到系統(tǒng)設(shè)備中; 在驅(qū)動模塊的初始化函數(shù)里面查找模塊內(nèi)部定義的帶有所述前綴的修復(fù)函數(shù); 在內(nèi)核符號表中查找問題函數(shù)與修復(fù)函數(shù)的函數(shù)地址,修改問題函數(shù)的入口指令,跳轉(zhuǎn)到修復(fù)函數(shù)執(zhí)行。2.根據(jù)權(quán)利要求1所述的Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法,其特征在于,所述的前綴為prefix_。3.根據(jù)權(quán)利要求1所述的Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法,所述創(chuàng)建驅(qū)動模塊的步驟具體為編譯所述修復(fù)函數(shù)鏈接為驅(qū)動模塊。4.根據(jù)權(quán)利要求3所述的Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法,其特征在于,所述驅(qū)動模塊命名為linux_kernel.ko。5.根據(jù)權(quán)利要求1所述的Iinux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法,其特征在于,所述方法還包括: 在修改指令前先將舊的指令保存到一個數(shù)組中; 卸載驅(qū)動模塊時從所述數(shù)組中恢復(fù)修改前的指令,恢復(fù)原來函數(shù)的調(diào)用流程。
【專利摘要】本發(fā)明提供了一種linux內(nèi)核跟蹤調(diào)試與修復(fù)問題的方法,包括:修改問題函數(shù),在問題函數(shù)原函數(shù)名前添加前綴,定義為修復(fù)函數(shù);創(chuàng)建驅(qū)動模塊;把驅(qū)動模塊安裝到系統(tǒng)設(shè)備中;在驅(qū)動模塊的初始化函數(shù)里面查找模塊內(nèi)部定義的帶有所述前綴的修復(fù)函數(shù);在內(nèi)核符號表中查找問題函數(shù)與修復(fù)函數(shù)的函數(shù)地址,修改問題函數(shù)的入口指令,跳轉(zhuǎn)到修復(fù)函數(shù)執(zhí)行。采用本發(fā)明的技術(shù)方案后,將問題函數(shù)修改代碼編譯鏈接成一個linux驅(qū)動模塊,在驅(qū)動模塊內(nèi)標識需要修改的內(nèi)核函數(shù),在linux內(nèi)核加載驅(qū)動模塊時,查找到所述驅(qū)動模塊所標識的內(nèi)核內(nèi)部函數(shù),然后修改這個函數(shù)的入口指令,跳轉(zhuǎn)到我們的驅(qū)動模塊定義的修復(fù)函數(shù)執(zhí)行,這樣便可以在這個修復(fù)函數(shù)里邊跟蹤、調(diào)試及修復(fù)問題,解決了以往調(diào)試修復(fù)困難的問題,提高了效率。
【IPC分類】G06F9/44
【公開號】CN104915209
【申請?zhí)枴緾N201510330712
【發(fā)明人】李智榮
【申請人】上海斐訊數(shù)據(jù)通信技術(shù)有限公司
【公開日】2015年9月16日
【申請日】2015年6月15日
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1