2012年4月2日 星期一

g_mass_storage driver for windows 7 !!

上星期 ㄊㄨ、 了一個星期,還是沒有辦法法解決 win 7 下 Luns=2 卻只連接ㄧ個Device 的問題!
今天總算被我解開了!!
先解釋ㄧ下 bug 狀況, 使用 BSP Build 出來的g_mass_storage.ko 和 modprobe g_mass_storage luns=2 remoable=1 stall=0 file=/dev/mmc/mmcblk1p1,/dev/mmc/mmcblk0p1
指令來掛載 kernel module !
結果,在Fedora Host 兩個都可以正確Access ! 但是,如果換成Windows 7 的時候,嘿嘿,就是只能看到 第一個Device (mmcblk1p1 ) !!
首先可以到 Win7 的 Mass Driver 中去觀看Driver的訊息 , 例如下圖 可以看到 USB/PID/VID & VER , 和 sub class 狀態 !! 確定 Device descriptor 都沒有傳輸錯誤 !!

重點是下列的圖 ,可發現 "裝置例項路徑" , "匯流排關係" , "上層" & "下層" 中最後一段都是亂碼 (紅色圈起部分 ) !!

發現 , Win 7 對於這樣亂碼的內容好像沒有辦法支援Luns=2 的狀況 , 所以更改 modprobe 指令為
modprobe g_mass_storage iSerialNumber=12345 luns=2 remoable=1 stall=0 file=/dev/mmc/mmcblk1p1,/dev/mmc/mmcblk0p1
得到結果如下 :

上圖 , 可以發現 VID/PID , Class type 都沒有更動 !!

上圖可以發現 , "裝置例項路徑" , "匯流排關係" & "下層" 資料中 , 都用標準的字元 "12345" 來取代 , 並且在最後用 "&1" or "&0" 來標示 device 0 & 1 !!
所以.....給Win 7 的序號需要標準的字元 , 不要含代一些其他字元 , 這樣就可以解決這個 bug 了 !!
這個 bog bug花費我... 一星期多的時間 , 一直懷疑 SCSI Command 傳輸有問題 , 在要放棄修正這個 bug 前...想到 , 會不會是 win 7 沒有正確收到 Luns=2 這個 參數 , 才找到原來是不起眼的Serial Number格式問題 !!




1 則留言:

  1. 有關 SCSI Command 可以參考下列的文件 ,或是用 google search
    "Universal Serial Bus Mass Storage Class UFI Command Specific"

    http://www.google.com.tw/url?sa=t&rct=j&q=Universal+Serial+Bus+Mass+Storage+Class+UFI+Command+Specific&source=web&cd=1&ved=0CCgQFjAA&url=http%3A%2F%2Fwww.usb.org%2Fdevelopers%2Fdevclass_docs%2Fusbmass-ufi10.pdf&ei=XL16T-DvBOj1mAWpocHXAw&usg=AFQjCNF_SInkInUt_k2k6ewBRzONiBGAFw&cad=rja

    回覆刪除