乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      內(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)過程中 , 終端未初始化之前 , 其他任何時(shí)候 , 任何地方都可以調(diào)用它 .

      [2] 記錄等級

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

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

      [3] 消息去向

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

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

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

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

         *** 只有在 console 下才有可在終端中打印出來 (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)來指定 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í)通過 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 會通過 syslog() 系統(tǒng)調(diào)用或者讀取 proc 文件系統(tǒng)來從系統(tǒng)緩沖區(qū) (ring buffer) 中得到由內(nèi)核 printk() 發(fā)出的信息 . syslogd 是通過 klogd 來讀取系統(tǒng)內(nèi)核信息 .
            1>
      所有系統(tǒng)信息是輸出到 ring buffer 中去的 .dmesg 所顯示的內(nèi)容也是從 ring buffer 中讀取的 .

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

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

      2 OOPS

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

      [1] ksymoops

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

         $ ksymoops saved_oops.txt

      [2] kallsysms

         開發(fā)版的 2.5 內(nèi)核引入了 kallsysms 特性 , 它可以通過定義 CONFIG_KALLSYMS 配置選項(xiàng)啟用 . 該選項(xiàng)可以載入內(nèi)核鏡像對應(yīng)的內(nèi)存地址的符號名稱 , 所以內(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)核配置成一旦在原子操作過程中進(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() 不但會打印錯(cuò)誤信息 , 而且會掛起整個(gè)系統(tǒng)

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

      5 神奇的 SysRq

          神奇系統(tǒng)請求鍵是另外一根救命稻草 , 該功能可以通過定義 CONFIG_MAGIC_SYSRQ 配置選項(xiàng)開啟用 . 當(dāng)該功能被啟用的時(shí)候 , 無論內(nèi)核處于什么狀態(tài) , 你都可以通過特殊的組合鍵跟內(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è)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多