歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux內核

Linux內核DeviceSimulatorFramework入門

  Device Simulator Framework(DSF)為您的所有設備提供了一個易用的輸入輸出控制 (ioctl) 接口,無論這些設備是否確實存在。對那些經驗豐富的內核和設備驅動程序軟件開發人員而言,DSF 讓調試和測試設備代碼變得更容易,而這些工作如果沒有 DSF 將難以進行模擬和再現。    為 Linux 內核創建測試用例相當簡單;通常要麼要求特定的范圍,要麼要求廣泛的范圍。不過,當在用戶空間進行測試時,有一些特殊情況可能很難測試。很少執行的分支代碼、不存在的設備以及錯誤路徑代碼等難以測試。    Device Simulator Framework(DSF)可以解決這一問題,它擁有一個內核空間到用戶空間的輸入輸出控制接口,讓測試用例開發人員可以執行內核的特定目標區域。當設備可能不存在時,DSF 特別有助於執行設備驅動程序內核代碼。雖然 DSF 不能取代真正的設備測試,但是它可以在很大程度上幫助您調試和測試驅動程序代碼。    DSF 還可以加快測試用例的開發,因為您不必去學習用於用戶/內核空間通信的輸入輸出控制接口。    到目前為止,只支持最近發布的 Linux 2.5.xx 到當前的 2.6.xx 之間的內核版本。    入門  首先,我建議您下載整個 Linux Test Project (LTP) 測試套件,其中包括 DSF 代碼。Linux Test Project 是 IBM Linux Technology Center (LTC) 與其他一些組織合作的項目(請參閱 參考資料 中的鏈接)。    解壓存檔文件後,您將在 testcases/kernel/device-drivers/dev_sim_framework 目錄下找到用戶/內核模板測試代碼。編譯 LTP 測試套件並安裝它,然後切換到 DSF 目錄。進入 DSF 目錄後,您將看到 kernel_space 目錄和 user_space 目錄。相應的內核模塊和用戶空間文件分別在這兩個目錄中。切換到這兩個目錄並運行 make 來編譯模板。    ioctl 請求  ioctl 函數處理專用文件的底層設備參數。具體來說,很多字符專用文件(例如終端)的操作屬性可以由 ioctl 請求來控制。    使用模板  模板編譯完成後,在執行用戶空間代碼之前您可以用 insmod 或 modprobe 來加載內核模塊。切換到 user_space 目錄,執行用戶空間代碼。由於模板只是與已經注冊的內核模塊通信並返回,所以用戶代碼將運行並迅速返回結果。    修改模板來執行期望的內核代碼相對也比較簡單。不過,還是需要一些內核編程的知識。EXPORT_SYMBOL 標簽內定義的函數對全部內核代碼公開,不用修改內核代碼就可以在您的內核模塊中直接調用。您還可以手工修改內核源代碼來導出另外的函數,用於重新編譯並加載新內核後的測試。    DSF 應用  下面的代碼是一個如何實現設備類型測試的例子:    清單 1. 虛擬設備代碼  switch(cmd) {     case LTP_OPTION1: rc = test_option(); break;     case PCI_ENABLE: rc = pci_enable(); break;     default:     printk("Mismatching ioctl command  ");                break;        }      .    .    .      /*    * pci_enable    * enable a pci device so that it may be used in    * later testing in the user test program    */      static int pci_enable() {    int rc = 0;    strUCt pci_dev *dev = ltp_pci.dev;      /* check if can enable the device pointer */    if(!dev) {     printk("tpci: dev is NULL  ");     return 1;    }      if( pci_enable_device(dev) ) {     printk("tpci: failed to enable pci device  ");     rc = 1;    }      else {     printk("tpci: enabled pci device  ");     rc = 0;    }      return rc;    }    這個例子啟用了一個調用 pci 內核 API 的“虛擬的”PCI 設備。這個虛擬的設備還可以用於其他測試。    結束語  如果您是一位具有一定經驗的 Linux 內核和設備驅動程序開發人員,使用 DSF 將讓您雙重受益:由於 DSF 模板可以用於很多不同的測試,所以您可以更快地開發測試用例並保證其更加一致。而且,您還可以執行內核的特定目標區域,這樣典型的用戶空間測試用例執行內核代碼時就不會再漫無目的。    Linux Test Project 的目標是幫助設備驅動程序開發人員標准化設備單元測試,提高 Linux 內核中設備驅動程序的穩定性。考慮到這一點,歡迎您通過 [email protected] 與我聯系並分享您使用 DSF 的經驗。




Copyright © Linux教程網 All Rights Reserved