Je voudrais émuler une clé USB à partir d'un fichier image.
J'utilise Centos7 avec le noyau 4.11.7 installé via kernel-ml
et kernel-ml-devel
elrepo 4.11.7-1.el7.elrepo.x86_64
(en fait j'ai essayé avec 3.10.* 4.10.* 4.11.1 aussi)
Nous avons 2 solutions :
-
avec insmod
sudo insmod /link/to/g_mass_storage.ko file=/tmp/filebin.img stall=0 amovible=y
Dans dmesg :udc-core: couldn't find an available UDC - added [g_mass_storage] to list of pending drivers
-
avec modprobe
$ sudo modprobe g_mass_storage file=/tmp/testusb.img stall=0 amovible=y
modprobe :FATAL :module g_mass_storage introuvable.
Rien dans dmesg . -
J'ai aussi essayé avec dummy_hcd :
$ sudo modprobe dummy_hcd
modprobe :FATAL :module dummy_hcd introuvable.
Comment puis-je résoudre ce problème ?
J'ai essayé beaucoup de choses comme recompiler le Kernel 4.11.1 en activant tout avec gadget etc…
/usr/src/kernels/4.11.7-1.el7.elrepo.x86_64 $ cat .config | grep CONFIG_USB_DUMMY_HCD
# CONFIG_USB_DUMMY_HCD is not set
Résultat :
Après avoir compilé le noyau, j'ai pu modprobe dummy_hcd
et d'émuler une clé USB avec un fichier binaire.
Réponse acceptée :
Vous avez besoin du dummy_hcd
dispositif de contrôleur hôte factice (boucle). Les pilotes USB du gadget sont destinés au vrai matériel USB, et sur les PC normaux, ce matériel n'existe pas. Le contrôleur de bouclage fournit à la fois le cadre du contrôleur de gadget et un contrôleur hôte USB pour y accéder. Donc :
$ sudo modprobe dummy_hcd
vous donne un nouveau hub racine
$ lsusb
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Vous pouvez maintenant modprobe le pilote du gadget
$ sudo modprobe g_mass_storage file=/path/to/backing_file idVendor=0x1d6b idProduct=0x0104 iManufacturer=Myself iProduct=VirtualBlockDevice iSerialNumber=123
et il apparaîtra sous le nouveau hub racine
$ lsusb
Bus 005 Device 002: ID 0525:a4a5 Netchip Technology, Inc. Pocketbook Pro 903
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Notez que vous n'avez pas besoin de simuler un périphérique de stockage de masse USB si vous êtes simplement intéressé par le contenu du fichier, vous pouvez le monter directement (via le périphérique en boucle, mais cela se produit automatiquement).