The default image for the USB Armory defaults to using the g_ether driver to provide an ethernet device to the host. However, that does not give you a USB mass storage device. The alternative is to
modrpobe -r g_ether and
modprobe g_mass_storage file=/path/to/block/device, but that leaves you without ethernet, and thus without a method of communicating with the armory.
Luckily, Linux also has the g_multi driver, wich does both (as well as an emulated usb serial port, which I’ll talk about in a later post).
The g_ether driver gets loaded because of a line in /etc/modules:
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. # Parameters can be specified after the module name. ledtrig_heartbeat ci_hdrc_imx g_ether use_eem=0 dev_addr=1a:55:89:a2:69:41 host_addr=1a:55:89:a2:69:42
We’re looking at the last line, which creates the fake ethernet with the device address and host address specified by dev_addr and host_addr.
To use the g_multi driver, change the last time to:
g_multi use_eem=0 dev_addr=1a:55:89:a2:69:41 host_addr=1a:55:89:a2:69:42 file=/root/disk.img
where /root/disk.img is a block device. You can either use a fake one (just a file on disk) or a real partition (such as /dev/mmcblk0p2). You can also specify multiple devices separated by a comma (and no space). You need to reboot to make the change show up.
Have fun with your new ethernet/usb drive computer. I will update in a while if/when I figure out how to implement some sort of access control on the device you mount.