Como transmitir um arquivo para um dispositivo USB

S

s1rUK

Guest
Oi lá, eu estou trabalhando no aplicativo que permite-me para transferir um arquivo localizado no meu sistema de arquivos em um dispositivo USB (FAT32). Eu tenho que usar a transferência em bloco único modo que significa usar fluxo de caracteres apenas. Eu olhei através da biblioteca libusb usá-lo em meu IDE posso transmitir uma string. Para transferir um arquivo inteiro Acho que eu tenho que evitar o sistema de arquivos a construção de uma seqüência de char que permite reconhecer um arquivo no sistema de arquivos e colocá-lo para o dispositivo USB. Sugestões? Este trabalho no Linux kernel versão 2.6.32 w
 
No caso de FAT32. Você especifica o LBA e escrever todos os dados e então você escrever a tabela FAT32 os locais que correspondem a um arquivo em particular. Qual destes passos você quer rodeio? Qual é a sua aplicação final?
 
Eu quero tentar evitar o uso de sistema de chamada para copiar um arquivo do meu sistema de arquivos para um dispositivo USB externo. Eu usei uma biblioteca de teste chamado libusb para fazê-lo. Infelizmente, o comando usb_bulk_write () enviar uma sequência de caracteres, complacente no modo de transferência em massa Só que requer para transmitir dados usando correntes de 0 e 1. Segue o usb_bulk_write () definição http://libusb.sourceforge.net/doc/function.usbbulkwrite.html Estou procurando como eu tem que construir a seqüência correta de enviar com este método. Meu escopo é para ignorar a chamada de sistema e mover um arquivo para um dispositivo USB. É apenas uma tarefa de compreender a transmissão de BTO com um drive USB. Saúde
 
Eu não acho que o "char * bytes" parâmetro em função usb_bulk_write significa que você tem que enviar dados ASCII. char é o tipo de dados fundamental que é equivalente a BYTE em C. Você pode, por passar dados binários certo lá.
 
Em segundo lugar, eu tenho que permitir que o dispositivo usb para reconhecer minha transmissão como um arquivo. Soa como se eu deveria construir um firmware: |
 
Você está usando um produto fora da prateleira ou você está desenvolvendo um novo produto? Se é um produto fora da prateleira, você precisa saber como ele espera dados. Por outro lado, se você estiver desenvolvendo um, cabe a você como você deseja transferir dados.
 
Se você estiver usando um fora o produto de prateleira você vai ter que analisar o descritor para entender o que o protocolo segue-se ... desde que você está falando de transferência em massa só eu acredito que você está falando MSC protocolo BOT .... nesse caso, o dispositivo irá esperar o driver host de seguir especificações BOT que significa que você tem que usar os pacotes com a assinatura "USBC" e coisas aos pedidos de armazenamento em massa ou seja, você vai estar escrevendo um driver todo no lado do host .. . Aqui é a parte mais complicada ... Se você deseja que seus dados legíveis apenas por você, você sempre pode construir seu próprio protocolo personalizado ... não é grande coisa, mas se você quer que ele seja legível em dizer que um PC que você ligá-lo em .... você vai ter que entender o formato de sistema de arquivos usado na unidade e escrever um driver que pode lidar com isso também ... qual deles que você está planejando para fazer ....
 
Eu não ouvi uma razão, por que você não quer para montar o dispositivo USB como um disco removível e usar arquivos Linux padrão de I / O.
 
Geralmente, se você quiser enviar dados de um arquivo para o seu dispositivo, você pode apenas ler o arquivo como você faria normalmente, tanto no modo texto ou em modo binário (se tudo que você quer é de dados) e enviar os bytes resultantes através LibUSB . Como disse anteriormente, LibUSB permite nada areia em seu parâmetro unsigned char *, ele só diz que vai enviar o byte por byte de dados (daí o parâmetro de tamanho é em bytes) Eu estou realmente fazendo um bootloader com LibUSB, e funciona bem ! O que LibUSB não vai fazer, é que o dispositivo reconhecido como um dispositivo padrão de armazenamento em massa. A fim de ter um dispositivo de armazenamento padrão de massa, você precisa definir o dispositivo como um dispositivo de MSD, e anexá-lo ao motorista de acolhimento correspondente a MSD. Algo de saber, é que o sistema operacional pode lidar com a MSD por si só. Tudo o que você precisa fazer é definir adequadamente os descritores msd usb, e lidar com a escrita / leitura pedidos corretamente. A memória, fisicamente, ser um armazenamento no dispositivo de bytes XXX. O anfitrião, ao formatar o dispositivo (pode ser feito a partir da interface de usuário padrão OS (por exemplo, em janelas clique direito / formato), irá alocar memória para o arquivo de índice do sistema de arquivos (especialmente se ele não detectar qualquer sistema de arquivos) Isso deve funcionar . Cheers! Paulo
 

Welcome to EDABoard.com

Sponsor

Back
Top