嵌入式Linux的調試技術


(一)  打印內核調試信息:printk

Printk函數用法與printf函數類似,只不過printk函數運行在內核空間,printf函數運行在用戶空間,printk函數在printk.c文件中實現。

Printk函數的原型如下:asmlinkage int printk(const char *fmt,...)

第1個參數表示格式字符串,后面是可變參數。第一個參數值前面加尖括號包含的數字表示輸出的日志級別,共有8個級別,在linux/kernel.h頭文件中定義。

不管消息級別是多少,所有通過printk函數發出的消息都會輸出到日志文件(就算有的消息輸出到控制台,也會同時輸出到日志文件)。可以通過如下的命令查詢日志

消息  #dmesg

(二)  防止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

  1. gdb調試用戶空間程序

  gdb可以跟蹤調試用戶空間的程序,只能在PC上進行測試

  2.gdbserver遠程調試用戶空間程序

  用gdbserver 測試運行在開發板、手機或Android模擬器上的程序。gdbserver是一個可以運行在ARM架構上的服務端程序,在開發板上使用gdbserver打開要測試的程序,然后通過串口、有線或無線網絡可以在PC上進行調試

  3.kgdb遠程調試內核程序

  最好的內核調試工具。提供類似printk函數的復制輸出功能,允許開發人員直接在PC上通過GDB鏈接目標設備


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM