linux裝置驅動程式除錯

2021-07-24 13:18:45 字數 1399 閱讀 1756

一、寫linux裝置驅動程式最難的地方就是沒有強大的除錯工具,一般間接或者直接的除錯手段:

1.  利用printk  

2.  檢視oop訊息

3.  

利用strace  

4.  利用核心內建的hacking選項 

5.  利用ioctl方法 

6.  利用/proc檔案系統 

7.  使用kgdb

8.  使用systemtap 二、

1,利用printk函式將我們需要觀察的引數列印出來

2,oop訊息,我們載入了驅動,如果有什麼指標錯誤,接下來都會列印出來,這個我們根據列印的意思都可以查到是什麼錯誤

3, strace

列印出使用者空間程式所呼叫的系統呼叫,還能顯示出系統呼叫的引數和返回值。舉例:

以後再舉例

4,利用核心內建的hacking選項 

核心開發者在make menuconfig的kernel hacking提供了一些核心除錯選項。這些選項有助於我們除錯驅動程式,因為當我們啟用某些除錯選項的時候,作業系統會在發現驅動執行有問題時給出一些錯誤提示資訊,而這些資訊非常有助於驅動開發者找出驅動中的問題所在。下面就舉幾個簡單例子。

先啟用如下選項:

1、kernel debugging — spinlock and rw-lock debugging: basic checks (new)可以檢查到未初始化的自旋鎖

2、kernel debugging — mutex debugging: basic checks (new) 可以檢查到未初始化的訊號量

717                 //init_mutex(&scull_devices[i].sem);

詳細舉例:

///以後再寫//2016/11/12//

5,利用ioctl方法

由於驅動中的ioctl函式可以將驅動的一些資訊返回給使用者程式,也可以讓使用者程式通過ioctl系統呼叫設定一些驅動的引數。所以在驅動的開發過程中,可以擴充套件一些ioctl的命令用於傳遞和設定除錯驅動時所需各種資訊和引數,以達到除錯驅動的目的。如何在驅動中實現ioctl,請參見「驅動程式對ioctl的規範實現」一文

6,利用/proc 檔案系統

/proc檔案系統用於核心向使用者空間暴露一些核心的資訊。因此出於除錯的目的,我們可以在驅動**中增加向/proc檔案系統匯出有助於監視驅動的資訊的**。這樣一來,我們就可以通過檢視/proc中的相關資訊來監視和除錯驅動。如何在驅動中實現向/proc檔案系統匯出資訊,請參見《linux device driver》的4.3節。

7,使用kgdb

8,使用systemtap除錯

systemtap相當於往執行的核心裡邊新增了我們需要的**,與其他諸如printk方式相比,systemtap動態的往正在執行的核心**中注入需要的**觀察列印相關資料。

除錯裝置驅動程式

linux核心沒有整合對偵錯程式的支援。指令級的kdb kernel debudgger 核心偵錯程式 源 級偵錯程式kgdb kernel gnu debugger 核心gnu偵錯程式 udev 工作 1.核心中的sysfs支援,sysfs是linux裝置模型的重要組成部分。位於記憶體中,在啟動時...

Linux裝置驅動程式 驅動除錯printk

前一段時間學了一下,printk 列印語句,現在用起來又忘了,看了一下前一段時間做的筆記,不是很詳細,所以決定再寫一下和printk相關的除錯的東西。算是複習一下吧。首先,先熟悉一下printk函式,這個函式和printf函式很類似。只不過乙個執行在使用者態,乙個執行在核心態。此外還是要熟悉一下終端...

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...