web-dev-qa-db-fra.com

Comment simuler une prise USB?

J'ai une application qui implémente certaines automatisations lorsqu'une clé USB est branchée.

Pendant le développement, je dois le tester dans un environnement spécifique (dérivé de Debian Squeeze).
L'application s'abonne aux événements HAL via DBUS.
Le problème est: mon bureau est au troisième étage tandis que mes machines d'essai sont au sous-sol.

J'aimerais vraiment avoir un moyen de simuler une prise USB.

  • usbip ne fonctionne pas sur Ubuntu.
  • Je n'arrive pas à utiliser le module g_mass_storage sur Ubuntu (il me manque le module dummy_hcd) et dans Debian .

Peut-être est-il possible de simuler un appel dbus?

Mon poste de travail est sur Ubuntu 12.04.

2
Nicolas Delvaux

J'ai trouvé une autre solution qui me convenait. En fait, j'ai réalisé que je n'avais pas vraiment besoin de simuler une clé USB, mais plutôt n'importe quel type de périphérique de stockage (mon application regarde HAL ou UDisks pour les événements "DeviceAdded").

J'ai donc fait ce qui suit:

  • créer une image de système de fichiers, par exemple avec la commande "virt-make-fs"
    Sudo virt-make-fs --type=ntfs -- fs.tar.gz fs-test.img

  • téléchargez le fichier img sur la machine de test

  • configurer l'image comme un périphérique de boucle: Sudo losetup /dev/loop0 fs-test.img

Et c'est tout, UDisks vient de déclencher l'événement DBus "DeviceAdded"!
(cependant, HAL ne déclenche rien dans ce cas, c'est donc une bonne occasion de le supprimer car il est obsolète)

Si vous le souhaitez, vous pouvez monter manuellement l'image avec quelque chose comme Sudo mount /dev/loop0 /mnt/fs.

Si vous devez utiliser pmount, n'oubliez pas d'ajouter /dev/loop0 à /etc/pmount.allow.

Pour désinstaller le périphérique de boucle, utilisez simplement Sudo losetup -d /dev/loop0.

2
Nicolas Delvaux