0 votos

Cómo montar una carpeta/partición como dispositivo USB para un ordenador

Tengo un teléfono que al conectarlo a un ordenador aparece como dispositivo MTP. La tarjeta SD y el almacenamiento interno son visibles en el ordenador. También puedo cambiarlo para que sólo monte la tarjeta SD y entonces desmonta la tarjeta SD del teléfono y la conecta directamente como si fuera un adaptador SD a USB.

Quiero poder hacer esto en otro teléfono, pero no con una tarjeta SD, quiero poder usar una parte de la memoria flash interna de la misma manera para poder conectar el teléfono como si fuera una memoria USB y también quiero poder conectarlo como un dispositivo MTP. Sería práctico si pudiera hacer esto con tmpfs también, así que básicamente puedo usar la RAM disponible del teléfono como almacenamiento USB temporal de alta velocidad.

La razón por la que quiero hacer esto es porque MTP es increíblemente lento para cargar los directorios, la transferencia de archivos es un poco más rápido, pero sigue siendo una fracción de lo que USB 2.0 puede lograr. Quiero usar la RAM para que el almacenamiento interno no se vea afectado y se llene sin razón ya que el teléfono no tiene tanto almacenamiento libre. En el otro teléfono, conectarlo en modo adaptador de tarjeta SD hace que Windows lo vea como una tarjeta sd real por lo que Windows no abre el almacenamiento en modo MTP que pierde las propiedades de los archivos y es super lento. Otra razón para usar RAM es que el almacenamiento interno no se puede desmontar mientras Android se está ejecutando en el teléfono por lo que no sería capaz de utilizarlo como almacenamiento USB en cualquier cosa que no sea MTP.

¿Hay alguna forma de hacerlo utilizando busybox, o modificando algunos archivos del sistema?

Sé que esto tiene que ser posible, pero no sé cómo funciona con el modo de adaptador de tarjeta SD en el teléfono ohter y no sé cómo replicarlo para otros medios de almacenamiento. El teléfono está rooteado por lo que puedo hacer lo que quiera en el sistema. Preferiblemente en Android 4 y superiores. ¿Cómo puedo lograr tal resultado?

  • Actualización

He conseguido que UMS funcione en el teléfono gracias al comentario de Irfan. Puedo cambiar la unidad que monta editando el archivo "file".

Para ello, primero el comando cat /proc/partitions . Entonces puedes escribir echo '/dev/block/vold/<major>:<minor>' -n> /sys/devices/virtual/android_usb/android0/f_mass_storage/lun/file

No he terminado todavía, sin embargo, necesito saber ahora cómo reenviar la ruta en "archivo" a tmpfs. No puedo encontrar un archivo de dispositivo para tmpfs como todas las otras particiones. ¿Hay una partición vold para tmpfs, o tal vez puedo enlazar a una carpeta en archivo? ¿Cómo puedo poner la ruta a tmpfs dentro de "file"?

1voto

Foxyz Puntos 11

He conseguido que funcione. Gracias a Irfan's responder ¡Sabía exactamente qué hacer!

Estos son los pasos:

  1. Crear una carpeta para montar un nuevo disco RAM. He utilizado /data/local/ y creó una nueva carpeta. A continuación, montado un nuevo disco RAM a la misma.

    mkdir /data/local/temp
    mount -t tmpfs tmpfs /data/local/temp
  2. A continuación, crea una nueva imagen de disco. Puede elegir el tamaño de bloque y la cantidad de bloques para cualquier tamaño que desee. El tamaño total del archivo es bs * count . Elegí un recuento de 200000 para un archivo de 90MB en la RAM.

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

  3. Ahora queremos crear un dispositivo loopback para poder montar el nuevo archivo en el disco RAM como un semi-dispositivo virtual. Primero queremos saber el valor mayor para los dispositivos loopback.

    ls -l /dev/block/loop0

  4. Ahora sabemos qué valor mayor tiene el primer nodo de loopback. En mi caso mostraba 7, 0. Sabemos que tendremos que usar el valor mayor 7 para el nuevo nodo de dispositivo. Ahora podemos crear un nuevo nodo. Para ello utilizamos el comando "mknod". El parámetro -m especifica los permisos. Ya tengo los archivos loop0-17. loop0 se usa para el cdrom incorporado, y el resto se usan para montar archivos .asec.

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

  5. Para montar la imagen de disco en el disco RAM tenemos que utilizar losetup.

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

  6. Podemos comprobar qué archivo de respaldo está asociado a cada dispositivo de bucle leyendo el archivo_de_respaldo con el comando cat.

    cat /sys/block/loop18/loop/backing_file

  7. Ahora que el dispositivo virtual está listo podemos formatearlo. Yo usaré mke2fs, pero puedes usar otros métodos para formatear el dispositivo. Make2fs formateará la unidad EXT2. Para Windows deberías formatear FAT32, o puedes usar este sorprendente Controlador del sistema de archivos Ext3 . Esto añade soporte nativo para EXT a Windows y es muy impresionante.

    mke2fs /dev/block/loop18

  8. Finalmente podemos configurar UMS (USB Mass Storage) para que el ordenador pueda leer el dispositivo directamente. Puedes configurar lun, o lun1 dependiendo de si quieres múltiples dispositivos usb virtuales.

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

Eso debería ser todo, normalmente un dispositivo USB aparece en el ordenador ahora.

He probado la velocidad y es mucho mejor que MTP, y de hecho utiliza toda la velocidad de la RAM, pero está limitado por las velocidades USB 2.0, a menos que tu dispositivo soporte USB 3.

I ran speed test

Mientras probaba me di cuenta de que al activar el modo gadget USB y escribir una ruta incorrecta en "archivo", Windows se rompe y de repente ya no puede leer los dispositivos USB. Después de esto no se puede reiniciar a menos que se mantenga pulsado el botón de encendido. Esto puede ser un error de Windows, no estoy seguro de por qué hace esto. El administrador de dispositivos también funciona mal después de esto.

Aquí está el código fuente del controlador de almacenamiento masivo en Fuente Google . Y finalmente aquí está la documentación sobre la configuración en kernel.org .

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X