準備工做須要的是:算法
內核bug的緣由可能有:安全
內核bug發做的症狀可能有:函數
這裏說的打印是指的內核的格式化打印函數printk(),由於它有本身的一些特殊的功能:oop
在多處理器上同時被調用,而且沒必要使用鎖。性能
內核消息是保存在一個環形隊列中,這個環形隊列就是它的記錄緩衝區
內核在同一時間只能保存16kb的內核消息,再多的話新消息就會覆蓋老消息,讀寫都是按照環形隊列方式操做的
優勢:ui
能夠從/proc/kmsg文件中,也能夠經過syslog()系統調用讀取這些消息,默認是/proc方式
兩種狀況klogd都會阻塞,知道有新的內核消息可供讀出,喚醒以後默認處理是將消息傳給syslogd
能夠經過-c標誌來改變終端的記錄等級調試
將它接收到的全部消息添加到一個文件中,默認是/var/log/messages日誌
oops是內核告知用戶有不幸發生的最經常使用的方式
內核很難自我修復,也不能將本身殺死,只能發佈oops隊列
輸出可供跟蹤的回溯線索進程
非法的指令
oops中包含的重要信息:寄存器上下文和回溯線索
這個功能能夠經過定義CONFIG_MAGIC_SYSRQ配置選項來啓用
SysRq(系統請求)鍵在大多數鍵盤上都是標準鍵
該功能被啓用時,不管內核出於什麼狀態,均可以經過特殊的組合鍵和內核進行通訊
gdb:
可使用標準的GNU調試器對正在運行的內核進行查看。
針對內核啓動調試器的方法與針對進程的方法大體相同:
侷限性:
使用條件變量:
若是代碼與進程無關,或者但願有一個針對全部狀況都能使用的機制來控制某個特性,可使用條件變量
使用統計量:
這種方法經常使用於使用者須要掌握某個特定事件的發生規律的時候
方法是建立統計量,並提供某種機制訪問其統計結果
重複頻率限制
當系統的調試信息過多的時候,有兩種方式能夠防止這類問題發生:
重複頻率限制
發生次數限制
這一章中 ,學到了有關內核bug和調試的不少知識。