標籤:
學習第十章,也就是嵌入式Linux的調試技術。主要介紹如何利用開發板、Android模擬器以及一些函數、工具(gdb、gdbserver以及kgdb)調試嵌入式Linux核心模組、可執行程式和共用庫。1、列印核心調試資訊:printk。Printk函數用法與printf函數類似,只不過printk函數運行在核心空間,printf函數運行在使用者空間,printk函數在printk.c檔案中實現。不管訊息層級是多少,所有通過printk函數發出的訊息都會輸出到記錄檔(就算有的訊息輸出到控制台,也會同時輸出到記錄檔)。可以通過如下的命令查詢日誌。2、防止printk函數降低Linux驅動效能。雖然使用printk函數可以很方便地將訊息寫入記錄檔或控制台。但大量使用printk函數頻繁動作記錄問阿金或控制台裝置檔案會嚴重影響Linux驅動的效能。因此,這就要求Linux驅動只在開發階段使用printk函數輸出訊息,在正式發布Linux驅動時將可能影響效能的printk函數去掉。最好的方法無疑是利用C語言中的編譯指令。(#if、#else、#endif等)。如果不想使用printk輸出訊息,只要將#if中的1改為0即可不使用printk輸出訊息。3、通過虛擬檔案系統(/pron)進行資料互動。/pron用來作為核心空間與使用者空間進行資料互動的工具。/pron是虛擬檔案系統,是記憶體映射,所有讀寫/pron的操縱都是對記憶體的讀寫,所以,它也可以作為Linux驅動與使用者空間程式互動的工具。/pron檔案系統主要通過proc_dir_entry.read_proc和proc_dir_entry.read_write函數指標來設定讀寫/pron目錄中的虛擬檔案的動作處理函數,proc_dir_entry結構體代表一個虛擬目錄或檔案。4、調試工具。Linux系統中提供了一類工具,這些工具可以逐行跟蹤程式的代碼分別是:用於調試使用者空間程式的gdb、gdbserver和調試核心空間程式的kgdb。gdb調試使用者空間程式,它可以跟蹤調試使用者空間的程式,但是它只能在PC上進行測試。gdbserver遠端偵錯使用者空間程式,用gdbserver 可以測試回合在開發板、手機或Android模擬器上的程式。gdbserver是一個可以運行在ARM架構上的服務端程式,在開發板上使用gdbserver開啟要測試的程式,然後通過串口、有線或無線網路可以在PC上進行調試。kgdb遠端偵錯核心程式。它提供類似printk函數的複製輸出功能,允許開發人員直接在PC上通過GDB連結目標裝置。
Android深度探索第十章總結