討論區快速選單
知識庫快速選單
CRM雲端平台必備Salesforce認證 討論區最近新進100則主題 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
miniport driver 的觀念問題
更改我的閱讀文章字型大小
作者 : alonsohsu(Alonso)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/12/16 下午 07:47:06
各位大大好

小弟最近被指派寫一個 SAS 卡的 miniport driver
目前進度是已經可以寫一個空的 driver
並且在這個空 driver 的幾個主要 callback function 如

   hwInitializationData.HwInitialize
    hwInitializationData.HwStartIo
    hwInitializationData.HwInterrupt
    hwInitializationData.HwFindAdapter
    hwInitializationData.HwResetBus
    hwInitializationData.HwAdapterControl
    hwInitializationData.HwBuildIo

大部分程式碼註解掉留下 Print 訊息的程式碼
好讓我可以 trace 整個流程
現在已經可以成功的把我空的 driver 裝到我的 HBA 上面
而且也試過用 DeviceIoControl 下一個 ioctl 到 driver
也成功的呼叫到 HwBuildIo HwStartIo 等函式

接著下一步我是想把硬碟接到我的 driver
我預期應該也是會收到一些 SCSI command
比方 inquery 或 report luns command 之類的
但是當我插上去以後我的 driver 都沒反應

上網找好像是要 initialize HBA 上的 chip 讓他 ready 才可以
可是如果我沒有 chip 的規格請問該怎麼做
Windows 是否有提供 API 可以做這件事之類的
或者是我的觀念想法有錯

我想要裝一個硬碟到我的 HBA
然後 Host 能夠認的到我的硬碟
並且我能夠對這個硬碟下 IO

想請問版上的各位大大我該往哪個方向走?
作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人alonsohsu註記此篇回應為最佳解答 2013/12/21 上午 03:26:27
Win miniport driver 概念起源於 Win95.
當時為了要解決多家 VGA IC vendor 寫 driver 的問題,
才推出 graphic miniport driver.

MSFT 會作一個 Class Driver, 來處理各類 HW spec 的問題.
例如 USB 2.0/3.0, VGA, WLAN/LAN,...

但 MSFT 不可能知道每一家 IC vendor 的 command register spec.
所以提供 miniport driver 的架構, 讓各家 IC Vendor 自行處理硬體控制
而一些 protocol 的處理, 是在 class driver 處理.


" 可是如果我沒有 chip 的規格請問該怎麼做
Windows 是否有提供 API 可以做這件事之類的 "

你必須要有 SAS 卡的 chip 規格才能寫 driver.
HwInitialize 函式中, 就要正確設定好 chip,
並指定 Interrupt handler(就是 hwInitializationData.HwInterrupt)


例如 LSI 1064E 這顆 HBA 卡 controller 是一個 ARM chip.
它本身有自己的 firmware (可視為一個微型 embedded system)
在 HwInitialize 階段, 就要跟它的 firmware 建立 connection.

而 LSI 1064E 會發 SCSI command 去 access 連接的 HDD.
當內部 buffer 放滿 data 時, 會觸發 interrupt signal 通知 host
這時 OS 會呼叫 HwInterrupt, 來進行 X86/X64 CPU 的 DMA Transfer.
把 LSI 1064E buffer 內的資料搬到 System DRAM.

沒有 chip spec/programming guide 就無法寫出 win driver.
所以, 你要先弄到 chip 的資料
作者 : alonsohsu(Alonso)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/12/23 上午 09:34:14
Hi weber:

謝謝你的回答
你的回答對我很有幫助∼
非常感謝您
 板主 : 徵求中
 > 驅動程式 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 驅動程式 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
驅動程式
1 新兵衛 1240 
2 eBoy 980 
3 牧童哥 780 
4 北極熊 580 
5 天行者 580 
6 燒酒仙 440 
7 weber 380 
8 KEN 350 
9 jonay 180 
10 掌握文武半邊天 180 
驅動程式
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875