0 votes

Comment monter un dossier/une partition en tant que périphérique USB pour un ordinateur ?

J'ai un téléphone qui, lorsqu'il est branché sur un ordinateur, s'affiche comme un périphérique MTP. La carte SD et le stockage interne sont visibles sur l'ordinateur. Je peux aussi le modifier pour qu'il ne monte que la carte SD, puis il démonte la carte SD du téléphone et la connecte directement comme s'il s'agissait d'un adaptateur SD-USB.

Je veux pouvoir faire cela sur un autre téléphone, mais pas avec une carte SD, je veux pouvoir utiliser une partie de la mémoire flash interne de la même manière afin de pouvoir connecter le téléphone comme s'il s'agissait d'une clé USB et je veux aussi pouvoir le connecter comme un périphérique MTP. Ce serait pratique si je pouvais le faire avec tmpfs aussi, de sorte que je puisse utiliser la RAM disponible du téléphone comme stockage USB temporaire à grande vitesse.

La raison pour laquelle je veux faire cela est que le MTP est incroyablement lent pour charger les répertoires, le transfert de fichiers est un peu plus rapide mais reste une fraction de ce que l'USB 2.0 peut réaliser. Je veux utiliser la RAM pour que le stockage interne ne soit pas affecté et rempli sans raison puisque le téléphone n'a pas beaucoup de stockage libre. Sur l'autre téléphone, le fait de le connecter en mode adaptateur de carte SD fait que Windows le voit comme une véritable carte SD, de sorte que Windows n'ouvre pas le stockage en mode MTP, qui manque les propriétés des fichiers et est super lent. Une autre raison d'utiliser la RAM est que le stockage interne ne peut pas être démonté lorsque Android est en cours d'exécution sur le téléphone, de sorte que vous ne seriez pas en mesure de l'utiliser comme stockage USB dans un mode autre que MTP.

Existe-t-il des moyens de faire cela en utilisant busybox, ou en modifiant certains fichiers système ?

Je sais que cela doit être possible mais je ne sais pas comment cela fonctionne avec le mode adaptateur de carte SD sur l'autre téléphone et je ne sais pas comment le reproduire pour d'autres supports de stockage. Le téléphone est rooté donc je peux faire tout ce que je veux sur le système. De préférence sur Android 4 et plus. Comment puis-je arriver à un tel résultat ?

  • Mise à jour

J'ai pu faire fonctionner l'UMS sur le téléphone grâce au commentaire d'Irfan. Je peux changer le lecteur qui monte en éditant le fichier "file".

Pour ce faire, il faut d'abord exécuter la commande cat /proc/partitions . Vous pouvez alors écrire echo '/dev/block/vold/<major>:<minor>' -n> /sys/devices/virtual/android_usb/android0/f_mass_storage/lun/file

Mais je n'ai pas encore fini, je dois savoir comment transmettre le chemin dans "file" à tmpfs. Je ne trouve pas de fichier de périphérique pour tmpfs comme pour toutes les autres partitions. Est-ce qu'il y a une partition vide pour tmpfs, ou est-ce que je peux peut-être faire un lien vers un dossier dans file ? Comment puis-je mettre le chemin d'accès à tmpfs dans "file" ?

1voto

Foxyz Points 11

J'ai réussi à le faire fonctionner ! Grâce à l'article d'Irfan répondre Je savais exactement ce qu'il fallait faire !

Voici la marche à suivre :

  1. Créer un dossier pour monter un nouveau disque RAM. J'ai utilisé /data/local/ et a créé un nouveau dossier. Il y a ensuite monté un nouveau disque RAM.

    mkdir /data/local/temp
    mount -t tmpfs tmpfs /data/local/temp
  2. Créez ensuite une nouvelle image disque. Vous pouvez choisir la taille des blocs et le nombre de blocs pour la taille que vous souhaitez. La taille totale du fichier est de bs * count . J'ai choisi un compte de 200000 pour un fichier de 90MB sur la RAM.

    dd if=/dev/zero of=/data/local/temp/ram bs=512 count=200000

  3. Nous voulons maintenant créer un périphérique de bouclage afin de pouvoir monter le nouveau fichier sur le disque RAM en tant que semi-dispositif virtuel. Tout d'abord, nous voulons connaître la valeur principale des périphériques de bouclage.

    ls -l /dev/block/loop0

  4. Nous savons maintenant quelle est la valeur majeure du premier nœud de bouclage. Dans mon cas, elle était de 7, 0. Nous savons que nous devrons utiliser la valeur majeure 7 pour le nouveau nœud de périphérique. Nous pouvons maintenant créer un nouveau nœud. Pour cela, nous utilisons la commande "mknod". Le paramètre -m spécifie les permissions. J'ai déjà les fichiers loop0-17. loop0 est utilisé pour le cdrom intégré, et les autres sont utilisés pour le montage des fichiers .asec.

    mknod -m 0660 /dev/block/loop18 b 7 18

  5. Pour monter l'image disque sur le disque RAM, nous devons utiliser losetup.

    losetup /dev/block/loop18 /data/local/temp/ram

  6. Nous pouvons vérifier quel fichier de sauvegarde est associé à chaque dispositif de boucle en lisant le fichier de sauvegarde à l'aide de la commande cat.

    cat /sys/block/loop18/loop/backing_file

  7. Maintenant que le dispositif virtuel est prêt, nous pouvons le formater. Je vais utiliser mke2fs, mais vous pouvez utiliser d'autres méthodes pour formater le périphérique. Make2fs formatera le lecteur EXT2. Pour Windows, vous devez formater FAT32, ou vous pouvez utiliser cette méthode étonnante Pilote du système de fichiers Ext3 . Cela ajoute un support natif pour EXT à Windows et c'est très impressionnant.

    mke2fs /dev/block/loop18

  8. Nous pouvons enfin configurer l'UMS (USB Mass Storage) pour que l'ordinateur puisse lire directement le périphérique. Vous pouvez définir lun, ou lun1 selon que vous voulez plusieurs périphériques USB virtuels.

    cd /sys/class/android_usb/android0
    echo /dev/block/loop18 > f_mass_storage/lun/file
    echo mass_storage > functions
    echo 1 > enable

Normalement, un périphérique USB s'affiche sur l'ordinateur.

J'ai testé la vitesse et elle est bien meilleure que celle du MTP, et elle utilise en fait toute la vitesse de la RAM, mais elle est limitée par les vitesses de l'USB 2.0, à moins que votre appareil ne prenne en charge l'USB 3.

I ran speed test

Lors de mes tests, j'ai remarqué qu'en activant le mode gadget USB et en écrivant un chemin incorrect dans "file", Windows s'interrompt et ne peut soudainement plus lire les périphériques USB. Après cela, vous ne pouvez pas redémarrer sauf si vous maintenez le bouton d'alimentation enfoncé. Il s'agit peut-être d'un bogue dans Windows, je ne sais pas exactement pourquoi il fait cela. Le gestionnaire de périphériques fonctionne également mal après cela.

Voici le code source du pilote de stockage de masse sur Source Google . Enfin, voici la documentation relative à la configuration sur kernel.org .

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X