小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Linux kernel debug技巧

 WUCANADA 2017-09-15

Linux kernel debug技巧----開啟DEBUG選項(xiàng)

作者:wowo 發(fā)布于:2016-11-1 19:39 分類:Linux應(yīng)用技巧

kernel的source code中有很多使用pr_debug/dev_dbg輸出的日志信息(例如device tree解析的代碼,drivers/of/fdt.c)。默認(rèn)情況下,kernel不會(huì)將這些日志輸出到控制臺上,除非:

1)開啟了DEBUG宏,并且

2)kernel printk的默認(rèn)日志級別大于7

看似簡單,不過我相信每個(gè)人都問過這樣的問題(不管是問自己還是問別人,特別是在調(diào)試kernel啟動(dòng)過程的時(shí)候,例如device tree的匹配、device probe等):怎么開啟DEBUG選項(xiàng)?

之所以有這篇短文,是因?yàn)槲乙矄栠^(不止一次),于是就記錄如下:

1)開啟了DEBUG宏

其實(shí)開啟DEBUG宏的方法很簡單,在需要pr_debug/dev_dbg輸出的模塊開頭,直接#define DEBUG即可,kernel中有一個(gè)例子:

/* init/main.c */

#define DEBUG           /* Enable initcall_debug */

不過這種方法有個(gè)缺點(diǎn):我們必須準(zhǔn)確的知道需要debug那個(gè)C文件,如果想大網(wǎng)撒魚(例如,想debug為什么新修改的DTS文件沒有起作用,而又對kernel fdt的代碼不是很熟悉),就麻煩了。這里我給一個(gè)大殺器:在編譯kernel的時(shí)候,通過KCFLAGS直接傳遞,這樣可以全局生效,如下(以本站的“X Project”為例):

diff --git a/Makefile b/Makefile 
index 0835b1c..59625f4 100644 
--- a/Makefile 
+++ b/Makefile 
@@ -83,7 +83,7 @@ kernel-config: 
kernel: 
        mkdir -p $(KERNEL_OUT_DIR) 
        make -C $(KERNEL_DIR) CROSS_COMPILE=$(CROSS_COMPILE) KBUILD_OUTPUT=$(KERNEL_OUT_DIR) ARCH=$(BOARD_ARCH) $(KERNEL_D 
-       make -C $(KERNEL_DIR) CROSS_COMPILE=$(CROSS_COMPILE) KBUILD_OUTPUT=$(KERNEL_OUT_DIR) ARCH=$(BOARD_ARCH) $(KERNEL_T 
+       make -C $(KERNEL_DIR) CROSS_COMPILE=$(CROSS_COMPILE) KBUILD_OUTPUT=$(KERNEL_OUT_DIR) KCFLAGS=-DDEBUG ARCH=$(BOARD_ 
 

2)設(shè)置kernel printk的默認(rèn)日志級別為8

修改printk的默認(rèn)日志級別的方法有多種,例如直接修改printk.c(新kernel為printk.h)中的CONSOLE_LOGLEVEL_DEFAULT宏定義。不過修改kernel原生代碼的方式稍顯粗暴,我們還有優(yōu)雅一些的手段,例如通過命令行參數(shù)的loglevel變量傳遞,如下:

diff --git a/arch/arm64/configs/xprj_defconfig b/arch/arm64/configs/xprj_defconfig 
index 5d0d591..9335d3f 100644 
--- a/arch/arm64/configs/xprj_defconfig 
+++ b/arch/arm64/configs/xprj_defconfig 
@@ -320,7 +320,7 @@ CONFIG_FORCE_MAX_ZONEORDER=11 

# Boot options 

-CONFIG_CMDLINE="earlycon=owl_serial" 
+CONFIG_CMDLINE="earlycon=owl_serial loglevel=8
CONFIG_CMDLINE_FORCE=y 
# CONFIG_EFI is not set

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(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ā)表

    請遵守用戶 評論公約

    類似文章 更多