日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

內(nèi)核調(diào)試

 WUCANADA 2012-10-23
內(nèi)核調(diào)試 (2012-08-26 15:10)


http://blog.csdn.net/flykite1988/article/details/6122433

1 printk

[1] 使用范圍

除在系統(tǒng)啟動(dòng)過(guò)程中 , 終端未初始化之前 , 其他任何時(shí)候 , 任何地方都可以調(diào)用它 .

[2] 記錄等級(jí)

    KERN_EMERG, KERN_ALERT, KERN_CRIT, KERN_ERR, KERN_WARNING, KERN_NOTICE, KERN_INFO, KERN_DEBUG.

    若不指定記錄等級(jí) , 函數(shù)會(huì)?"淞? default_message_loglevel 指定的等級(jí) , 該變量被初始化為 DEFAULT_MESSAGE_LOGLEVEL( 目前為 KERN_WARNING).

[3] 消息去向

    按以下順序進(jìn)行 :

    Step1   如果 klogd syslod 都在運(yùn)行 , 內(nèi)核信息被追加到 /var/log/messages( 或者其他地方 , 依據(jù) syslogd 的配置 ). 否則

    Step2  依據(jù)變量 console_loglevel 的值來(lái)決定是否把內(nèi)核消息打印到當(dāng)前終端 (text-mode terminal, a serial port, or a parallel printer). 如果記錄等級(jí)小于 console_loglevel 整數(shù)變量的值 , 則內(nèi)核信息一次一行被發(fā)送到終端 .

   *** 無(wú)論在 Step1 Step2 中都可以通過(guò) dmesg 命令來(lái)查看 /proc/kmsg 中的內(nèi)核信息 .

   *** 只有在 console 下才有可在終端中打印出來(lái) (ctrl+alt+F1…F6), Gnone KDE 下不可以 .

[4] 查看并修改重要變量的值

變量

初始值

查看當(dāng)前值

修改方法

console_loglevel

DEFAULT_CONSOLE_LOGLEVEL

$ cat /proc/sys/kernel/printk

First one

(1) sys_syslog 系統(tǒng)調(diào)用

(2) 啟動(dòng) klogd 時(shí)用 -c 選項(xiàng)來(lái)指定 console_loglevel 的值

(3) $ echo 8 > /proc/sys/kernel/printk

default_message_loglevel

DEFAULT_MESSAGE_LOGLEVEL

$ cat /proc/sys/kernel/printk

second one

(1) $ echo 8 > /proc/sys/kernel/printk

[5] 記錄緩沖區(qū)

內(nèi)核信息被保存在一個(gè) LOG_BUF_LEN 大小的環(huán)形隊(duì)列中 . 該緩沖區(qū)大小可以在編譯時(shí)通過(guò) CONFIG_LOG_BUF_SHIFT 進(jìn)行調(diào)整 . 在單處理器的系統(tǒng)上其默認(rèn)值為 16Kb.

[6]  Linux 系統(tǒng)日志

    syslogd 這個(gè)守護(hù)進(jìn)程根據(jù) /etc/syslog.conf, 將不同的服務(wù)產(chǎn)生的 Log 記錄到不同的文件中 .

      LINUX 系統(tǒng)啟動(dòng)后,由 /etc/init.d/sysklogd 先后啟動(dòng) klogd,syslogd 兩個(gè)守護(hù)進(jìn)程。

      其中 klogd 會(huì)通過(guò) syslog() 系統(tǒng)調(diào)用或者讀取 proc 文件系統(tǒng)來(lái)從系統(tǒng)緩沖區(qū) (ring buffer) 中得到由內(nèi)核 printk() 發(fā)出的信息 . syslogd 是通過(guò) klogd 來(lái)讀取系統(tǒng)內(nèi)核信息 .
      1>
所有系統(tǒng)信息是輸出到 ring buffer 中去的 .dmesg 所顯示的內(nèi)容也是從 ring buffer 中讀取的 .

      2> LINUX 系統(tǒng)中 /etc/init.d/sysklogd 會(huì)啟動(dòng) 2 個(gè)守護(hù)進(jìn)程 :Klogd, Syslogd

      3> klogd 是負(fù)責(zé)讀取內(nèi)核信息的 , 2 種方式 : syslog() 系統(tǒng)調(diào)用 ( 這個(gè)函數(shù)用法比較全 , 大家去 MAN 一下看看 ) 直接的對(duì) /proc/kmsg 進(jìn)行讀取 ( 再這提一下 ,/proc/kmsg 是專門輸出內(nèi)核信息的地方 )
      4> Klogd
的輸出結(jié)果會(huì)傳送給 syslogd 進(jìn)行處理 ,syslogd 會(huì)根據(jù) /etc/syslog.conf 的配置把 log 信息輸出到 /var/log/ 下的不同文件中 .

2 OOPS

Oops 中包含的重要信息對(duì)于所有體系結(jié)構(gòu)都是完全相同的 : 寄存器上下文和回溯線索 . 回溯線索顯示了導(dǎo)致錯(cuò)誤發(fā)生的函數(shù)調(diào)用鏈 . 寄存器上下文信息可能同樣有用 , 盡管使用起來(lái)不那么方便 . 如果你有函數(shù)的匯編代碼 , 這些寄存器數(shù)據(jù)可以幫助你重建引發(fā)問(wèn)題的現(xiàn)場(chǎng) . 在寄存器中一個(gè)本不應(yīng)該出現(xiàn)的數(shù)值可能會(huì)在黑暗中給你帶來(lái)第一絲光明 .

[1] ksymoops

   提供編譯內(nèi)核是產(chǎn)生的 System.map 和模塊信息 ( 如何你使用的是模塊 ) OOPS 信息解碼 .

   $ ksymoops saved_oops.txt

[2] kallsysms

   開發(fā)版的 2.5 內(nèi)核引入了 kallsysms 特性 , 它可以通過(guò)定義 CONFIG_KALLSYMS 配置選項(xiàng)啟用 . 該選項(xiàng)可以載入內(nèi)核鏡像對(duì)應(yīng)的內(nèi)存地址的符號(hào)名稱 , 所以內(nèi)核可以打印解碼好的跟蹤線索 . 相應(yīng)地 , 解碼 oops 也不再需要 system.map 或者 ksysmoops 工具了 .

3 內(nèi)核調(diào)試配置選

    這些選項(xiàng)都在內(nèi)核配置編輯器的內(nèi)核開發(fā) (Kernel Hacking) 菜單中 , 他們都依賴于 CONFIG_DEBUG_KERNEL. 當(dāng)你開發(fā)內(nèi)核的時(shí)候 , 作為一種練習(xí) , 不妨都打開這些選項(xiàng) .

[1] 調(diào)試原子操作

    把內(nèi)核配置成一旦在原子操作過(guò)程中進(jìn)程進(jìn)入休眠或者做了一些可能引起休眠的操作 , 就打印警告信息并提供追蹤線索 .

    CONFIG_PREEMPT = y

    CONFIG_DEBUG_KERNEL = y

    CONFIG_KALLSYMS = y

    CONFIG_SPINLOCK_SLEEP = y

4 引發(fā) bug 并打印信息

BUG() BUG_NO() 被調(diào)用時(shí)引發(fā) oops, 導(dǎo)致棧的回溯和錯(cuò)誤信息的打印

panic() 不但會(huì)打印錯(cuò)誤信息 , 而且會(huì)掛起整個(gè)系統(tǒng)

dump_stack() 在終端上打印寄存器上下文和函數(shù)跟蹤線索 .

5 神奇的 SysRq

    神奇系統(tǒng)請(qǐng)求鍵是另外一根救命稻草 , 該功能可以通過(guò)定義 CONFIG_MAGIC_SYSRQ 配置選項(xiàng)開啟用 . 當(dāng)該功能被啟用的時(shí)候 , 無(wú)論內(nèi)核處于什么狀態(tài) , 你都可以通過(guò)特殊的組合鍵跟內(nèi)核進(jìn)行通信 .

6 內(nèi)核調(diào)試器的傳奇

[1] gdb

    $ gdb vmlinux /proc/kcore

    > p global_variable

    > disassemble function

[2] kgdb

[3] kdb

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多