標籤:kernel nbsp fpga max ... 服務 sea mod 端點
第8章 KMDF過濾器驅動程式
1. 管理裝置的主功能為功能驅動FDO, 過濾器驅動位於FDO的上層或下層
WdfFdoInitSetFilter // 聲明這個一個過濾驅動
2. 安裝要修改FDO的inf檔案
FilterSample執行個體
第9章 USB裝置開發
1. USB2.0 最快480Mb/s, UBS3.0速度 5.0Gbps (500MB/s)
2. USB裝置有一到多個配置
每個配置有一到多個介面
每個介面有一到多個端點,端點是通訊管道的終點, 有四種:批量(bulk), 控制,中斷(interrupt),同步(Isochronous)
1)端點0預設是可以訪問的,輸入和輸出
2)FDO的作用是把IRP引導到正確端點的管道上,把需求提給匯流排驅動,匯流排驅動分解成事務(transaction),送往匯流排
事務有一到多個階段(phase),phase分令牌(token),資料和握手(ack)
3. USB資料轉送方式
1)控制傳輸:最高優先順序,最大資料64B,每個控制事務包括一個SETUP令牌,帶可選的資料階段和握手階段,裝置必須響應控制傳輸
2)
(usb驅動部分待續)
第10章 PCI裝置驅動程式開發
1. 微機擴充插槽有:ISA(已淘汰), PCI(隨插即用,不是熱插拔)
PCI: 32位元據匯流排,速率132~264MB/s,
通用PCI匯流排介面:AMCC的S5933,PLX的9054。也可以用FPGA實現PCI介面
2. 開發驅動主要有3方面問題:硬體訪問,中斷處理,DMA傳輸
X86有兩種地址空間:I/O地址(只有64KB),記憶體位址(4GB以上)
I/O映射:一個晶片的地址在I/O地址空間的範圍,只能通過I/O指令來訪問。
記憶體映射:記憶體指令訪問
3. I/O訪問
WRITE_PORT_UCHAR , WRITE_PORT_USHORT, WRITE_PORT_ULONG
WRITE_PORT_BUFFER_UCHAR ...
4. 儲存空間訪問
WRITE_REGISTER_UCHAR ...
WRITE_REGISTER_BUFFER_UCHAR
5. 硬體訪問編程
1) 根據配置定義地址指標,用於修改PCI9054的寄存器, MemBaseAddress0 和 IoBaseAddress0
2)EvtDevicePrepareHardware 中初始化 MemBaseAddress0
6. 中斷處理
WDFINTERRUPT, 運行在DIRQL層級,處理時間儘可能短
插斷服務常式是非同步呼叫的,必須考慮其他常式和插斷服務常式的共用資料的保護性訪問(硬體中斷自旋鎖,運行在DIRQL)
WDF_INTERRUPT_CONFIG_INIT, WdfInterruptCreate
7. DMA編程對象
1) WDFDMAENABLER,用於建立一個DMA適配器,說明DMA通道的特性, WdfDmaEnablerCreate
2) WDFDMATRANSACTION, 用於傳輸控制, WdfDmaTransactionCreate
啟動一個DMA傳輸,擷取傳輸緩衝區的物理地址和位元組數,DMA傳輸結束後的資料處理
函數:
WdfDmaTransactionInitialize(EvtProgramDmaFunction): WdfDmaTransactionExecute後會調用EvtProgramDmaFunction
WdfDmaTransactionExecute 執行DMA傳輸
WdfDmaTransactionRelease 終止傳輸
WdfDmaTransactionDmaCompleted 測試傳輸是否完成
WdfDmaTransactionDmaCompletedFinal 強行完成DMA傳輸
WdfDmaTransactionGetBytesTransferred 傳輸的總位元組數
WdfDmaTransactionSetMaximumLength 設定傳輸的最大位元組數,應小於65536
3) WDFCOMMONBUFFER,申請系統的公用緩衝區, WdfCommonBufferCreate
對於DMA操作,系統提供一個特殊的記憶體,物理上連續的記憶體,稱為公用緩衝區(比較稀有,避免浪費)。
對於支援分散/聚集DMA的裝置,可以不用公用緩衝區
8. DMA傳輸編程
DPC中,測試DMA傳輸完成沒有,若沒有,則WdfDmaTransactionExecute 繼續傳輸
PCI9056:
#define INTCSR 0x68
#define CNTRL 0x6C
#define DMAMODE0 0x80
#define DMAPADR0 0x84
#define DMALADR0 0x88
#define DMASIZ0 0x8C
#define DMADPR0 0x90//descriptor
#define DMACSR0 0xA8//DMA通道0 命令狀態寄存器
#define HPIC 0x00
#define HPIA 0x04
#define HPID 0x08
第11章 UMDF驅動程式編程入門
UMDFSample執行個體
是dll程式
第12章 WinDbg使用介紹
1. windbg調試:雙機調試,也可以用虛擬機器代替
目標機:啟動時選擇“啟用偵錯工具”
主控機:winDbg中kernel debugging
windbg:debug-》break, 使主控機和目標機串連
.reload 載入符號檔案
ld projectName 載入PDB檔案
lm l 顯示已經載入符號檔案清單
2. 調試
F9 在源檔案中設定斷點
G 使目標機運行
F10 執行
windows裝置驅動程式WDF開發(3)