AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 409874
Accepted
Josh Hansen
Josh Hansen
Asked: 2017-12-09 21:20:12 +0800 CST2017-12-09 21:20:12 +0800 CST 2017-12-09 21:20:12 +0800 CST

Como escrever em um dispositivo especial de caractere?

  • 772

Devido a uma falha udevna configuração de uma máquina da qual estou tentando resgatar dados (veja este meu post ), estou tentando gravar em um dispositivo "caractere especial" correspondente a uma unidade flash USB, mas estou encontrando dificuldades.

O que eu esperaria é que (com permissões de root) eu pudesse fazer isso:

echo "test 123" > /dev/bus/usb/001/031

Mas eu entendo

bash: echo: write error: Invalid argument

O que está acontecendo? Como posso gravar em um dispositivo de caractere?

PS : isso é de interesse especificamente porque os dispositivos de bloco que eu normalmente esperaria (/dev/sdb, stuff in/dev/block) não estão sendo criados por algum motivo. No entanto, notei que um dispositivo de caractere é criado quando insiro uma unidade USB (e removido quando a removo). Se eu pudesse encontrar uma maneira de gravar nesse dispositivo, poderia evitar muitos problemas ao transferir dados lentamente por cabos de áudio (que é minha melhor abordagem atual).

linux devices
  • 1 1 respostas
  • 1608 Views

1 respostas

  • Voted
  1. Best Answer
    telcoM
    2017-12-09T23:01:34+08:002017-12-09T23:01:34+08:00

    Esses são dispositivos "USB brutos". Usá-los requer várias ioctl()funções específicas do USB: apenas gravar dados brutos neles a partir do shell provavelmente não conseguirá muito. Os dados teriam que ser formatados em pacotes USB válidos primeiro, e as ioctl()funções usadas para estabelecer conexão com o terminal USB correto dentro desse dispositivo.

    E como estamos falando de um dispositivo de armazenamento USB, o procedimento seria ainda mais complicado: dentro desses pacotes USB, deveria haver um dos seis conjuntos de comandos de armazenamento possíveis. Na prática, o conjunto de comandos mais comum é o conjunto de comandos "SCSI transparente" - um protocolo SCSI encapsulado em USB.

    Como resultado, primeiro você teria que aprender a escrever em um dispositivo de disco usando /dev/sg*dispositivos, criando seus próprios pacotes de comando SCSI. Depois de conseguir isso, você pode adicionar wrappers específicos de USB a esse procedimento e, somente então, poderá gravar blocos brutos em um dispositivo de armazenamento USB usando esses /dev/bus/usb/<busnum>/<devnum>dispositivos.

    Na maioria dos casos, usar USBs brutos ioctl()é extremamente tedioso, a menos que você precise de algo muito específico: a maioria dos programadores que precisam de acesso USB bruto usará libusbou alguma outra biblioteca (como libftdipara acesso em nível de desenvolvedor de hardware a chips conversores FTDI USB para serial) para lidar com a mecânica básica do USB para eles. Resumindo, você já teria que ser um programador de E/S USB bem estabelecido para usar com sucesso o dispositivo de armazenamento USB bruto em uma situação de resgate como a sua.

    Dito isso, sua outra postagem parece que você teve que realizar uma operação de resgate de dados verdadeiramente épica. Por isso, respeito sua conquista... mas também espero que você tenha aprendido algo sobre a importância dos backups.

    • 5

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve