GNU/Linux >> Tutoriales Linux >  >> Linux

Emular un dispositivo USB con un archivo usando G_mass_storage => Udc-core:no se pudo encontrar un Udc disponible:¿se agregó [g_mass_storage] a la lista de controladores pendientes?

Me gustaría emular un USB desde un archivo de imagen.

Estoy usando Centos7 con el Kernel 4.11.7 instalado a través de kernel-ml y kernel-ml-devel elrepo 4.11.7-1.el7.elrepo.x86_64 (en realidad probé con 3.10.* 4.10.* 4.11.1 también)

Tenemos 2 soluciones:

  1. con insmod

    sudo insmod /link/to/g_mass_storage.ko file=/tmp/filebin.img stall=0 extraíble=y

En dmesg :
udc-core: couldn't find an available UDC - added [g_mass_storage] to list of pending drivers

  1. con modprobe

    $ sudo modprobe g_mass_storage file=/tmp/testusb.img stall=0 extraíble=y
    modprobe:FATAL:Módulo g_mass_storage no encontrado.
    Nada en dmesg .

  2. También he probado con dummy_hcd :

    $ sudo modprobe dummy_hcd
    modprobe:FATAL:Módulo dummy_hcd no encontrado.

¿Cómo puedo solucionar este problema?

Intenté muchas cosas como volver a compilar el Kernel 4.11.1 habilitando todo con 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

Resultado:
Después de compilar el núcleo, pude modprobe dummy_hcd y para emular un usb con un archivo binario.

Respuesta aceptada:

Necesitas el dummy_hcd dispositivo controlador de host ficticio (bucle invertido). Los controladores USB del gadget están destinados a hardware USB real, y en las PC normales este hardware no existe. El controlador de bucle invertido proporciona tanto el marco para el controlador de dispositivos como un controlador de host USB para acceder a ellos. Entonces:

$ sudo modprobe dummy_hcd

te da un nuevo concentrador raíz

$ lsusb
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Ahora puede modificar el controlador del dispositivo

$ sudo modprobe g_mass_storage file=/path/to/backing_file idVendor=0x1d6b idProduct=0x0104 iManufacturer=Myself iProduct=VirtualBlockDevice iSerialNumber=123

y aparecerá en el nuevo centro raíz

$ 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

Tenga en cuenta que no necesita simular un dispositivo de almacenamiento masivo USB si solo está interesado en el contenido del archivo, puede montarlo directamente (a través del dispositivo de bucle, pero eso sucede automáticamente).


Linux
  1. Hacer una memoria USB de arranque de PC usando un archivo .iso en MAC

  2. ¿Encontrar las N palabras más frecuentes en un archivo con una lista de palabras vacías desde la línea de comandos?

  3. Iterar sobre una lista de archivos con espacios

  4. Listar todos los archivos de imágenes gráficas con find?

  5. ¿Cómo rellenar un archivo con FF usando dd?

Uso de Cat Command en Linux con ejemplos

Cómo encontrar el uso de ancho de banda del dispositivo USB en Linux

Encuentra archivos perdidos con Scalpel

Enumere el archivo usando el comando ls en Linux con la ruta completa

Eliminar archivos con rm usando find y xargs

Diferencia entre archivo de dispositivo y controladores de dispositivo