Linux下通過OTG把板卡上的一個磁盤或文件映射成PC機上的一個移動磁盤

============================================
作者:liuhuahan
http://blog.csdn.net/liuhuahan
============================================


我們經常會把手機或其他電子設備插入PC機來進行一些文件的互傳,當把手機插入PC機時,會看到PC上出現了一個移動磁盤,但具體在Linux下如何實現,現把方法介紹如下,至於詳細的原理這裏就不介紹了,因爲我也只是知其然不知其所以然。好了廢話不多少,現介紹如下:

1、首先,想在PC機上看到Linux板卡上的磁盤,首先你的這個Linux板卡需要支持OTG且廠商已經提供好相應驅動,我這裏用的是i.mx6平臺,OTG驅動都已經配置好了。
2、其次,編譯內核相應模塊,需要的模塊爲:
Location:                                                                                                                                                                                                                          
  │     -> Device Drivers                                                                                                                                                                                                                
  │       -> USB support (USB_SUPPORT [=y])                                                                                                                                                                                              
  │         -> USB Gadget Support (USB_GADGET [=y])                                                                                                                                                                                      
   -> USB Gadget Drivers (<choice> [=m])
->File-backed Storage Gadget(USB_FILE_STORAGE [=m])
3、將要使用的核心模塊名爲 g_file_storage.ko,使用方法如下
~# modprobe g_file_storage  file=/root/block
4、注意最好用modprobe來加載該驅動模塊,因爲該驅動模塊會有一些關聯模塊,手動一個一個加載太麻煩。該模塊參數爲 “file=”後緊跟你希望PC機上能看到的文件名,主要該文件在PC機端看到時,會把該文件當做一個獨立的移動磁盤。比如你的Linux板卡上有一個SD卡,在Linux上的設備文件文件爲/dev/mmcblk1,那希望在PC機上看到該SD卡的操作爲:
~# modprobe g_file_storage  file=/dev/mmcblk1
注意,不要把/dev/mmcblk1寫成/dev/mmcblk1p1,不然在PC機上會把mmcblk1p1這個SD卡的分區當做一個新的移動磁盤,重新分區格式化,這樣就導致Linux一側和PC側兩邊看到的文件不一致了。
5、當然你也可以直接把一個文件掛載成PC端的一個磁盤,
先用dd命令創建一個空白文件:
~# dd if=/dev/zero of=/root/block  bs=1M  count=100
把該文件推送爲PC端的一個可移動磁盤:
~#modprobe g_file_storage  file=/root/block
這樣PC端就可以看到一個100M大小的可移動磁盤了,格式化之後就可以直接訪問了,和直接掛載SD卡的方法相比的話,就是無法再Linux端掛載該block文件後實現和PC端一樣的訪問,因爲在Linux一側,該block文件掛載是直接當做一個磁盤分區掛載,在PC一側,該block文件是當做一個可移動磁盤來重新分區之後掛載得到的一個新分區而已,兩邊有一個MBR的偏移的差距。當然如何兩邊都不掛載文件系統,只是當做一個設備文件來直接讀寫的話,是可以實現相互通訊的。

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