LDD3學習筆記(7) 除錯技術

2021-08-25 23:43:11 字數 1842 閱讀 1759

1、核心中的除錯

開發中需要啟用的配置選項

config_debug_kernel

config_debug_slab

config_debug_pagealloc

config_debug_spinlock

config_debug_spinlock_sleep

config_init_debug

config_debug_info

config_magic_sysrq

config_debug_stackoverflow

config_debug_stack_usage

config_kallsyms

config_ikconfig

config_ikconfig_proc

config_acpi_debug

config_debug_driver

config_scsi_constants

config_input_evbug

config_profiling

2、用列印除錯

最常用的除錯技術是監視,在程式的適當地方呼叫printk。

printk允許你根據訊息的嚴重程度不同進行分類。

printk(kern_debug"hereiam:%s:%i\n",__file__,__line__);//除錯資訊

printk(kern_crit"i'mtrashed;givingupon%p\n",ptr);//緊急資訊

一共有八種情況等級:

kern_emerg

用於緊急訊息,常常是那些崩潰前的訊息.

kern_alert

需要立刻動作的情形.

kern_crit

嚴重情況,常常與嚴重的硬體或者軟體失效有關.

kern_err

用來報告錯誤情況;裝置驅動常常使用kern_err來報告硬體故障.

kern_warning

有問題的情況的警告,這些情況自己不會引起系統的嚴重問題.

kern_notice

正常情況,但是仍然值得注意.在這個級別一些安全相關的情況會報告

kern_info

資訊型訊息.在這個級別,很多驅動在啟動時列印它們發現的硬體的資訊.

kern_debug

用作除錯訊息

沒有指定優先順序的printk語句預設是default_message_loglevel即kern_warning

根據記錄級別,核心列印的訊息可能輸出的位置不同。

可以修改核心訊息的級別,使核心訊息出現在控制台:

echo8>/proc/sys/kernel/printk

3、用查詢來除錯

雖然使用printk很方便,但大量使用printk會拖慢系統。

/proc檔案系統是乙個特殊的軟體建立的檔案系統,用來將核心的訊息輸出到外界,/proc下的每個檔案都繫結到乙個核心函式上。

4、使用查詢來除錯

strace命令時乙個有力工具,顯示所有的使用者空間程式發出的系統呼叫.它不僅顯示呼叫,還以符號

形式顯示呼叫的引數和返回值.當乙個系統呼叫失敗,錯誤的符號值(例如,enomem)和對應的字

串(outofmemory)都顯示.strace有很多命令列選項;其中最有用的是-t來顯示每個呼叫執行的時

間,-t來顯示呼叫中花費的時間,-e來限制被跟蹤呼叫的型別,以及-o來重定向輸出到乙個檔案.缺

省地,strace列印呼叫資訊到stderr

使用命令:stracels/dev>/dev/scull0

5、除錯系統故障

即便你已使用了所有的監視和除錯技術,有時故障還留在驅動裡,當驅動執行時系統出錯.當發生這個時,能夠收集盡可能多的資訊來解決問題是重要的。

ldd3學習之四 除錯技術

核心中的除錯支援 核心開發者一般都已經建立了多項用於除錯的功能。但是由於這些功能會造成額外的輸出,並導致能下降,因此發行版廠商通常會禁止發行版核心中的除錯功能。為了實現核心除錯,我在核心配置上增加了幾項 kernel hacking magic sysrq key kernel debugging ...

LDD3學習筆記(11) 記憶體分配

kmalloc分配記憶體快並且不清零獲得的記憶體區,記憶體區保留它原來的內容,分配的區在物理記憶體中連續。include void kmalloc size t size,int flags void kfree void obj 記憶體分配的最常用介面.include gfp user gfp k...

LDD3學習筆記 模組的編譯

新手上路,ldd3學習之旅開始,以下內容純屬筆記,若有錯誤,望見諒!1.什麼是 模組 可以在系統執行時加入到核心中的 故 模組包括但不限於裝置驅動程式。2.如何寫乙個模組?1 c檔案 2 實現module init,module exit3.ldd3中makefile編寫規則 照搬 ifneq ke...