驅動程序(8) Windriver初步使用和快速生成驅動程序代碼

Windriver簡介

  1. 之前使用微軟WDF框架下的WDK開發Windows驅動程序,使用起來調試速度太慢了,同時需要對內核態驅動程序有一定了解,就轉到使用Windriver來開發驅動程序。就我個人而言,這款軟件最大好處就在於它屏蔽了內核態下驅動程序的細節,所有的開發工作都建立在用戶態下,你不必擔心因爲某些操作導致電腦藍屏死機(當然有些特殊操作同樣會藍屏);開發代碼也像寫C語言一樣,調試起來非常方便。
  2. windriver支持Win7/8/10等操作系統,支持PCI/PCIe/ISA等設備,在這裏,我使用到的是win7+VS2013,總線類型是PCIe
  3. 使用這款軟件開發驅動程序的流程很簡單,你可以選擇它自帶軟件界面來進行一些板卡的寄存器讀寫,也可以生成代碼後進行定製修改,這樣你只需要學習一些windriver封裝好的函數就行了。
  4. 在jungo網站的windriver support裏有一些使用windriver碰到的問題和解答,基本上涵蓋了絕大部分常見的問題;在windriver for windows裏可以下載到windriver pci的使用guide,告訴你如何快速見了一個windriver驅動程序,這也是接下來我要講的。

Windriver快速生成驅動程序

  1. 首先需要安裝windriver,百度一下就可以找到很多,我安裝的是WinDriver v12.2.1版本,安裝默認路徑在C盤,安裝好之後在桌面會出現兩個圖標,一個是windriver(用來生成驅動程序),另一個是監控軟件Debug Monitor(執行windriver驅動程序時,監控內核態的執行過程)
    在這裏插入圖片描述
  2. 將需要使用的板卡插入電腦相關PCIe卡槽後,打開DriverWizard,選擇生成New host driver project,選擇剛纔的板卡,我這裏是PCIe:Xilinx-DeviceID:0x1206
    在這裏插入圖片描述
  3. 在右邊選擇Generate .INF file,Device name自己可以重新命名一個,勾選上支持MSI終端和自動安裝,然後next保存後即可。這樣一個初步的INF文件就生成好了,然後去設備管理器裏找到插入的板卡,選擇‘更新驅動程序’,選擇‘瀏覽計算機以查找驅動程序軟件’,選擇‘從計算機的設備驅動程序列表中選擇’,選擇‘從磁盤安裝’,選擇‘瀏覽’,找到剛纔生成的INF文件,打開確定安裝好就行了。
    在這裏插入圖片描述
  4. 接着我們回到select your device界面或者打開已生成的.wdp文件(和INF文件同一目錄);這裏我們可以看到這個板卡的配置空間信息,這一部分不用管,是板卡的配置信息通過PC映射出來的。
    在這裏插入圖片描述
    接着是中斷相關的信息,這裏表示支持MSI中斷,中斷數字代碼爲9,下面可選監聽中斷,如果板卡產生了中斷,在Information Panel界面會監聽到。
    在這裏插入圖片描述
  5. 最後一部分比較重要,是板卡的Memory資源映射到PC上。可以看到,該板卡總共設計了三個BAR空間,不同的BAR存儲空間都有對應的首地址和長度。需要注意的是這裏的地址並不是虛擬地址,個人認爲也不是物理地址,是板卡的BAR存儲空間通過PCIe映射到PC上的總線地址,如果需要進行代碼開發是不能直接使用到的,除非該地址能被你想訪問的寄存器所能識別到(也就是在FPGA板卡設計時,所訪問的寄存器和該BAR空間必須相連)。
    在這裏插入圖片描述
  6. 選擇BAR0, 點擊右邊的Read/Write Memory訪問該BAR,或者可以選擇Add Access Register創建一個暫時存在的寄存器,來訪問該BAR。
    接着我們在offset 0 處寫下了0x12345678,讀出來也是0x12345678,說明該BAR可以正常讀寫;而去讀offset 1時讀出來值是0x123456,offset 2是0x1234, offset 3是0x12,這說明是32bit編址,與我們寫的size相符。
    在這裏插入圖片描述
  7. 使用DriverWizard可以較爲方便地訪問板卡,並且可以使用一些簡單功能,當然也可以進行DMA傳輸,就是需要配置寄存器比較多。如果進行修改代碼的話,可以方便地進行功能定製化。

Windriver驅動代碼生成

  1. 在DriverWizard菜單欄裏選擇Generate Code(安裝好INF文件之後),Add device-specfic customization根據不同板卡我選擇了Xilinx BMD design,也可以選擇No custmomization;Code langiage默認爲ANSI C;安裝環境根據操作系統和VS板卡,我選擇了MS .NET2013(for AMD64),IDE則就是MS Developer Studio .NET
    在這裏插入圖片描述
  2. ok之後額外功能全勾選上,包括了Kernel PlugIn等功能,直接OK就可以了
  3. 接着去生成的目錄打開.sln文件就可以看到生成的代碼了,然後把報錯處理掉,編譯生成.exe文件,運行該exe程序後可以得到如下界面。
    在這裏插入圖片描述

Note:

在DriverWizard的菜單欄Help裏可以選擇Windriver PCI/ISA/PCMCIA Mannul,會出現一個User Mannul的html文件,這個頁面裏會詳細介紹Windriver生成驅動代碼後,如何去修改來滿足定製化功能需求,包括DMA/中斷等功能,也有一些windriver下常用函數、數據結構的使用方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章