本章主要講了嵌入式Linux的調試技術。linux
(一)打印內核調試信息:printk網絡
Printk函數用法與printf函數相似,只不過printk函數運行在內核空間,printf函數運行在用戶空間,printk函數在printk.c文件中實現。架構
Printk函數的原型以下:asmlinkage int printk(const char *fmt,...)函數
第1個參數表示格式字符串,後面是可變參數。第一個參數值前面加尖括號包含的數字表示輸出的日誌級別,共有8個級別,在linux/kernel.h頭文件中定義。工具
無論消息級別是多少,全部經過printk函數發出的消息都會輸出到日誌文件(就算有的消息輸出到控制檯,也會同時輸出到日誌文件)。性能
(二) 防止printk函數下降Linux驅動性能測試
雖然使用printk函數能夠很方便地將消息寫入日誌文件或控制檯。但大量使用printk函數頻繁操做日誌問阿金或控制檯設備文件會嚴重影響Linux驅動的性能。所以,這就要求Linux驅動只在開發階段使用printk函數輸出消息,在正式發佈Linux驅動時將可能影響性能的printk函數去掉。最好的方法無疑是利用C語言中的編譯指令。(#if、#else、#endif等)。若是不想使用printk輸出消息,只要將#if中的1改成0便可不使用printk輸出消息。指針
(三) 經過虛擬文件系統(/pron)進行數據交互調試
/pron用來做爲內核空間與用戶空間進行數據交互的工具,它的文件系統的行爲凡是與設備文件系統(/dev)相似,/pron是虛擬文件系統,是內存映射,全部讀寫/pron的操縱都是對內存的讀寫,所以,它也能夠做爲Linux驅動與用戶空間程序交互的工具。日誌
/pron 文件系統主要經過proc_dir_entry.read_proc和proc_dir_entry.read_write函數指針來設置讀寫/pron目錄中的虛擬文件的動做處理函數,proc_dir_entry結構體表明一個虛擬目錄或文件
(四) 調試工具
Linux系統中提供了一類工具,這些工具能夠逐行跟蹤程序的代碼,這些工具包含用於調試用戶空間程序的gdb、gdbserver和調試內核空間程序的kgdb
gdb調試用戶空間程序
gdb能夠跟蹤調試用戶空間的程序,只能在PC上進行測試
2.gdbserver遠程調試用戶空間程序
用gdbserver 測試運行在開發板、手機或Android模擬器上的程序。gdbserver是一個能夠運行在ARM架構上的服務端程序,office2010,在開發板上使用gdbserver打開要測試的程序,而後經過串口、有線或無線網絡能夠在PC上進行調試
3.kgdb遠程調試內核程序
最好的內核調試工具。提供相似printk函數的複製輸出功能,容許開發人員直接在PC上經過GDB連接目標設備