usb mass media storage

Dale Maggee antisol at internode.on.net
Fri Sep 5 15:21:53 CEST 2008


Christian Adams wrote:
> moinmoin
>
> there is no "must" for using /dev/mmc* .. you could also use a plain  
> file:
>
> preparations:
>
> create mem_stick.fs file
> dd if=/dev/zero of=mem_stick.fs bs=512 count=1048576 # for a 512mb  
> "memory-stick" with blocksize=512 bytes
>
> create filesystem on mem_stick.fs:
> mkfs.ext3 mem_stick.fs
>
> from FR you can mount this filesystem with:
> mount -o loop mem_stick.fs some_mount_point
>
> and for exporting via usb:
>
> rmmod g_ether
> # if mount -> umount!
> modprobe g_file_storage file=mem_stick.fs
>
> regards, morlac
>
>   
>> On Fri, Sep 5, 2008 at 4:41 AM, Dale Maggee  
>> <antisol at internode.on.net> wrote:
>>     
>>> Petr Vanek wrote:
>>>       
>>>> I have spent a while googling this up and have no wiki skills but
>>>> someone might find this useful:
>>>>
>>>> to make FR act as a memory stick, here is what my script does:
>>>>
>>>>
>>>> #!/bin/sh
>>>> /etc/init.d/networking stop
>>>> rmmod g_ether
>>>> modprobe g_file_storage file=/dev/mmcblk0p1
>>>>
>>>> --
>>>> Petr Vaněk
>>>> http://biodynamika.cz
>>>>
>>>>         
>>> very cool, but before I test it out (potentially breaking my usb
>>> networking in the process), I have a couple of questions:
>>>
>>> 1. will this persist over a reboot, or will it revert back to  
>>> being an
>>> ethernet gadget when I reboot?
>>>       
>> It's not persistent unless you add something like this to the init
>> scripts. After rebooting the ethernet gadget will be back.
>>
>>     
>>> 2. is the following sufficient to switch it back?
>>>
>>> #!/bin/sh
>>> rmmod g_file_storage
>>> modprobe g_ether
>>> ifup usb0
>>>
>>> (assuming I replaced '/etc/init.d/networking stop' with 'ifdown  
>>> usb0' as
>>> recommended by Daniel)
>>>
>>> 3. can somebody point me to a resource for the g_file_storage module
>>> where I can learn more about it? I did a couple of quick googles but
>>> didn't see anything promising. specifically I'd like to know more  
>>> about
>>> the file parameter - I assume that in this scenario our "usb  
>>> stick" is
>>> using partition/device information from /dev/mmcblk0p1, and will be
>>> partitioned in the same way as the SD card? what If I wanted to  
>>> have my
>>> home directory accessible in "usb stick" mode?
>>>       
>> I suggest to read the comment in the source code, it's quite detailed:
>> http://git.kernel.org/?p=linux/kernel/git/torvalds/ 
>> linux-2.6.git;a=blob;f=drivers/usb/gadget/file_storage.c;hb=HEAD
>>
>> The file parameter determines the raw backing store for the storage
>> device, so if you
>> have file=/dev/mmcblk0p1, its contents will directly appear as
>> /dev/sdx on the host. As mmcblk0p1 doesn't contain a partition table,
>> so won't sdx. If you want to export the whole device, use
>> file=/dev/mmcblk0, you'll get the partition table in /dev/sdx and the
>> kernel will parse it and create /dev/sdx1 (containing the contents of
>> /dev/mmcblk0p1) etc.
>>
>> The host has direct access to the block device, so it is important
>> that /dev/mmcblk0p1 is not mounted on both the phone and the host at
>> the same time (unless it's mounted ro on both).
>>
>> regards
>> Philipp
>>
>>     
>
>   

Thanks for the info! very usefull indeed!

I made a script as follows (echo's are for debugging):

#!/bin/sh 
echo ifdown usb0...
ifdown usb0
echo rmmod g_ether...
rmmod g_ether
echo umount /media/card...
umount /media/card
echo modprobe g_file_storage file=/dev/mmcblk0p1...
modprobe g_file_storage file=/dev/mmcblk0p1

only problem is, when i run this in the 2007.2 terminal, it echoes 
'umount /media/card', and then totally freezes the freerunner! (to the 
point ofhaving to unplug the battery and reboot)

if i comment out the offending line in the script, then type 'umount 
/media/card', then run the script, it works fine...

thoughts?

Thanks,
-Dale




More information about the community mailing list