第十章心得
主要講了對于復雜的Linux驅動以及HAL等程序庫,需要使用各種方法對其進行調試。例如,設置斷點、逐步跟蹤代碼、輸出調試信息等。
Printk函數的用法與printf函數類似,只不過printk函數運行在內核空間,printf函數運行在用戶空間。也就是說,像Linux驅動這樣的Linux內核程序只能使用printk函數輸出調試信息。Printk函數在printk.c文件中實現。
雖然使用printk函數可以很方便的將消息寫入日志文件或控制臺。但大量使用printk函數頻繁操作日志文件或控制臺設備文件(/dev /console)會嚴重影響Linux驅動性能(因此寫磁盤的速度遠沒有讀寫內存的速度快),因此,這就要求Linux驅動只在開發階段使用 printk函數輸出信息,在正式發布Linux驅動時將可能影響性能的printk函數去掉。
在Linux文件系統中,/proc經常被用來作為內核空間與用戶空間進行數據交互的工具。/proc文件系統的行為方式與設備文件系統(/dev)類似。/proc是虛擬文件系統,也就是說,/proc并不是真正的文件系統,而是內存映射。所有讀寫/proc操作都是對內存的讀寫。所以讀寫/proc文件系統的速度遠比讀寫/dev文件系統的速度快。因此,/proc文件系統也可以作為Linux驅動與用戶空間程序交互的工具。
雖然使用printk函數可以很方便的將消息寫入日志文件或者控制臺。但是大量使用printk函數頻繁的操作日志文件或者控制臺文件會嚴重影響到linux驅動的開發性能。因此,這就需要linux驅動在開發階段使用printk函數輸出消息,在正式發布linux驅動時候將可能影響驅動性能的printk函數去掉。當然,我們可以想到的最簡單的方法就是一個接一個的刪掉printk函數,但是這樣是很不實際的想法,并且是十分麻煩的,而且如果以后想要在使用printk函數又有很麻煩的,會影響到以后的操作。想要控制printk的輸出,而且實現起來方便,最好的方法無疑就是利用C語言中的編譯命令了。
Linux內核調試一直被很多人認為是十分困難的。大多數人寧愿直接使用printk函數輸出調試信息。也不愿意使用各種命令進行調試。因為這樣做不一定能換來更多的好處。
Android模擬器只能通過端口映射方式使用gdbserver調試程序。但是開發板除了可以通過IP鏈接到gdbserver外,還可以通過串口進行調節。
轉載于:https://www.cnblogs.com/lpw0033/p/5641253.html
總結
- 上一篇: 【iOS】图片缩放动画
- 下一篇: maven中把依赖的JAR包一起打包(转