• Jueves 28 de Marzo de 2024, 09:36

Autor Tema:  Master Boot Record usb  (Leído 2961 veces)

sangano

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Master Boot Record usb
« en: Miércoles 25 de Junio de 2008, 06:21 »
0
Hola a todos, mi primer post aqui, bueno, he estado haciendo pruebas con libusb para trabajar con un pendrive(mass storage), pude hacer algunas cosas con el  tales como, reconcer el fabricante, modelo, y la capcidad de este, ahora quiero guardar y obtener archivos(mp3, zip, txt, etc), aqui mi problema, segun lo que he investigado, casi tengo que crear un sistema de archivos pora poder trabajar con el dispositivo. Para esto necesito obtener la el MBR para saber el formato(deberia ser algun fat) y leer las particiones, pero no consigo o no entiendo como hacer esto, no encuentro en los comandos estandar scsi como hacerlo, ni otra forma de realizar esta operacion.
 Si alguno ya tuvo alguna experiencia con esto o esta en lo mismo que yo, se agradeceria la ayuda.

saludos.

sangano

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Master Boot Record usb
« Respuesta #1 en: Lunes 4 de Agosto de 2008, 22:29 »
0
Hola, pude encontrar la solucion, dejo lo que hice por si  a alguien le sirve.
Código: Text
  1.  
  2. // esta estructura es para el paquete CBW que se envia en la comunicacion con el dispositivo, esto tambien por lo general es un areglo de char.
  3. // esto esta en el .h
  4. typedef struct USB_CBW
  5. {
  6.     int signature;
  7.     int tag;
  8.     int dataTransferLenght;
  9.     char CBWFlags;
  10.     char lun;
  11.     char CBWCBLenght;   
  12.     char CBWCommand[16];
  13. }CBW_STR;
  14.  
  15.  

en el archivo .c
Código: Text
  1.  
  2. int readMbr()
  3. {
  4.         int lba = 0; // este valor es donde se quiere comenzar a leer, cero por ser el master boot record.
  5.     int size = 512; // tamaño de paquete para mandar.
  6.         int reuturData;
  7.        char mbr[512];
  8.        memset(mbr, 0x0, 512); // variable para guardar el mbr retornado.
  9.  
  10.     cbw.signature = 0x43425355;
  11.     cbw.tag = 1234;
  12.     cbw.dataTransferLenght = sendDataLen;
  13.     cbw.CBWFlags = 0x80;
  14.     cbw.lun = 0x0;
  15.     cbw.CBWCBLenght = 10;
  16.     cbw.CBWCommand[0] = 0x25; // este es el valor del comando scsi de lectura.
  17.         cbw.CBWCommand[2] = (zero & 0xFF000000) >> 24;
  18.     cbw.CBWCommand[3] = (zero & 0xFF0000) >> 16;
  19.     cbw.CBWCommand[4] = (zero & 0xFF00) >> 8;
  20.     cbw.CBWCommand[5] = (zero & 0xFF);
  21.     cbw.CBWCommand[7] = (size & 0xFF00) >> 8;
  22.     cbw.CBWCommand[8] = (size & 0xFF);
  23.  
  24.         // enviando el comando cbw.
  25.        returnData =  usb_bulk_write(devHandle, 0x02, (char *)&cbw, 31, 5000);
  26.  
  27.        // recuperando el mbr.
  28.        returnData = usb_bulk_read(devHandle, 0x81, mbr, 512, 5000);
  29. }
  30.  
  31.  

Despues de haber recuperado el mbr, se tendria que enviar el paquete csw para aseguarse de que todo salio correcto.
omito esto si no se alargaria mucho el codigo.

la informacion la saque de la pagina de usb.org  en developers/devclass_docs , ahi hay informacion sobre los comandos que se le envian al usb. Tambien recordar que utilizo libusb para la comunicacion con el dispositivo.

saludos.