2012-10-02 24 views
5

Estoy intentando escribir un controlador Linux para un dispositivo que tengo el controlador de Windows de (Al igual que en el caso descrito Here, pero un dispositivo diferente)la conversión de un conductor a Linux

estoy usando para libusb la comunicación en el lado de Linux, y SourceUSB como mi sniffer USB (en la máquina de Windows). Ahora creo que he replicado correctamente los controles y los bloques, pero no puedo probar realmente el registro de Linux con el de Windows. Estoy ejecutando Ubuntu 12.04 en una VM.

Así que mis preguntas son:

  1. ¿Hay un registrador multiplataforma? Eso realmente podría simplificar el proceso de comparación de registros.
  2. Cuando conecto el dispositivo USB a la VM, obtengo el controlador de VM en Windows. Olfatear este dispositivo me da exactamente lo que ve el dispositivo, ¿verdad? Quiero decir, ¿es aquí donde quiero olfatear?

EDIT: He compilado mi solicitud en las ventanas (libusb es multiplataforma - Un gran agradecimiento a LibUSB desarrolladores que hicieron un trabajo tan bueno) y mi solicitud ha funcionado correctamente.

Al olfatear el controlador de VM al ejecutar mi aplicación en Linux, veo las solicitudes al USB como VENDOR_DEVICE en lugar de CONTROL_TRANSFER y BULK_OR_INTERRUPT. Este parece ser el problema si entiendo correctamente, ya que esto es lo que el dispositivo "ve".

Así que supongo que mi problema ahora es por qué Linux envía mis solicitudes como proveedor.

otra edición: Problema resuelto:

  1. escuchar al conductor VM me dio las solicitudes erróneas (que estaba escuchando el tráfico controlador VM, no, como yo quería, el tráfico del controlador de mi Linux USB
  2. libusb es perfectamente multiplataforma. me tomó unos minutos para conseguir mi código para compilar debajo de las ventanas, y desde allí fue bastante fácil de depurar y comparar los registros de

Respuesta

5

puede utilizar Wireshark para capturar tráfico USB. Esta página explica cómo hacerlo para Linux y Wi ndows: CaptureSetup/USB