国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 服務(wù)器 > Linux服務(wù)器 > 正文

Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核的調(diào)試技術(shù)筆記整理

2024-09-05 23:05:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
/****************** * 內(nèi)核的調(diào)試技術(shù) ******************/

(1)內(nèi)核源代碼中的一些與調(diào)試相關(guān)的配置選項(xiàng)

內(nèi)核的配置選項(xiàng)中包含了一些與內(nèi)核調(diào)試相關(guān)的選項(xiàng),都集中在"kernel hacking"菜單中。包括:

CONFIG_DEBUG_KERNEL

使其他的調(diào)試選項(xiàng)可用,應(yīng)該選中,其本身不會(huì)打開所有的調(diào)試功能。

具體的調(diào)試選項(xiàng)說(shuō)明可參見驅(qū)動(dòng)一書,或通過(guò)menuconfig的help說(shuō)明查看。

(2)如何通過(guò)宏對(duì)printk調(diào)試語(yǔ)句進(jìn)行全局控制

通過(guò)和Makefile配合,可以在c文件中定義屬于我們自己的調(diào)試語(yǔ)句。

(3)strace的使用

strace可以跟蹤由用戶空間程序所發(fā)出的所有系統(tǒng)調(diào)用。有用的參數(shù)有:

  • -t  顯示調(diào)用發(fā)生的時(shí)間
  • -T  顯式調(diào)用所花費(fèi)的時(shí)間
  • -e  限定被跟蹤的系統(tǒng)調(diào)用類型,如"-e execve"
  • -f  跟蹤所有子進(jìn)程
  • -p  跟蹤特定進(jìn)程。如"-p 8856"
  • -o  將輸出的信息導(dǎo)入特定的文件

strace對(duì)于發(fā)現(xiàn)系統(tǒng)調(diào)用時(shí)的細(xì)微錯(cuò)誤非常有用,尤其是針對(duì)多進(jìn)程的程序,可以通過(guò)strace輸出的返回值和進(jìn)程pid獲得大量有用信息。如:

$>strace -o zht.txt -f ./process_create

(4)ltrace的使用

ltrace可以跟蹤由用戶空間程序所發(fā)出的所有動(dòng)態(tài)庫(kù)函數(shù)調(diào)用。有用的參數(shù)有:

  • -t  顯示調(diào)用發(fā)生的時(shí)間
  • -T  顯式調(diào)用所花費(fèi)的時(shí)間
  • -f  跟蹤所有子進(jìn)程
  • -p  跟蹤特定進(jìn)程
  • -o  將輸出的信息導(dǎo)入特定的文件

(5)查看oops消息

oops是內(nèi)核告知用戶有不幸發(fā)生的最常用方式。通常,發(fā)送完oops后,內(nèi)核會(huì)處于一種不穩(wěn)定狀態(tài)。

在某些情況下,oops會(huì)導(dǎo)致內(nèi)核混亂,而混亂的結(jié)果就是死機(jī),這些情況可能包括:

  • *oops發(fā)生在持有鎖的代碼中
  • *oops發(fā)生在和硬件設(shè)備通訊的過(guò)程中
  • *oops在中斷上下文中發(fā)生
  • *oops發(fā)生在idle進(jìn)程(0)或init進(jìn)程(1),因?yàn)閮?nèi)核沒(méi)有這兩個(gè)進(jìn)程沒(méi)法工作

如果oops在其他進(jìn)程運(yùn)行時(shí)發(fā)生,內(nèi)核會(huì)殺死該進(jìn)程并嘗試著繼續(xù)運(yùn)行。oops的產(chǎn)生有很多原因,包括內(nèi)存訪問(wèn)越界或非法指令等。

oops包含的最重要訊息是寄存器上下文和回溯線索(call trace)可以人為引起oops,如:

if(bad_thing) BUG();//或 BUG_ON(bad_thing);

可以用panic()引發(fā)更嚴(yán)重的錯(cuò)誤,調(diào)用panic()不但會(huì)打印錯(cuò)誤信息,還會(huì)掛起整個(gè)系統(tǒng)。只有在極端惡劣的情況下才會(huì)使用:

if(terrible_thing) panic("foo is %ld!/n", foo);

有些時(shí)候,只要打印一下棧信息就可以幫助測(cè)試,如dump_stack():

 if(!debug_check){  printk(KERNEL_DEBUG "provide some info/n");  dump_stack(); }

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到服務(wù)器教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 北票市| 茶陵县| 和静县| 石家庄市| 宣威市| 高雄市| 定边县| 司法| 临夏市| 女性| 海口市| 南城县| 根河市| 台山市| 赣榆县| 旬阳县| 乌什县| 文成县| 清河县| 抚顺市| 奉节县| 尼勒克县| 长兴县| 深州市| 泉州市| 宜黄县| 宁化县| 彭阳县| 神木县| 平凉市| 仁寿县| 孟州市| 石台县| 托里县| 建始县| 威宁| 潞西市| 阜城县| 万全县| 柞水县| 汉寿县|