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 的經驗。