Questão O que exatamente acontece quando um dispositivo USB é ejetado em um Mac?


Quando um dispositivo USB é ejetado usando a GUI no Finder, o que exatamente acontece em um nível baixo? Existem certos sinais enviados para o dispositivo?

A razão pela qual estou perguntando é porque estou tentando imitar a ejeção manual de um dispositivo adicionando e removendo o módulo de armazenamento de arquivos por meio do console de um dispositivo que executa o Linux embarcado. Apenas removendo o módulo funciona bem em um PC, mas um Mac me dá o erro "não corretamente ejetado", eo kernel do Linux "entra em pane" e recebe um erro de ponteiro nulo do kernel.

Aqui está alguma informação extra:

Eu estou usando um dispositivo USB Gumstix COM que está executando o Linux embarcado. O dispositivo é conectado a um host (Windows ou Mac) e eu emule removê-lo fisicamente removendo o módulo de armazenamento em massa no kernel Linux do dispositivo, fazendo com que o host não o veja mais como um dispositivo de armazenamento. Eu faço isso com modprobe -r g_file_storage.

Isso funciona sem problemas no Windows. Ele não está funcionando em um Mac, porque eu recebo um erro no host Mac dizendo que o dispositivo não foi ejetado corretamente. Isso causa um erro de ponteiro nulo no kernel do Linux do dispositivo e entra em pânico.

Isso me leva a acreditar que existe algo que SOMENTE o Mac faz ao ejetar corretamente um dispositivo USB que eu preciso estar emulando no meu script no dispositivo.

Basicamente, eu quero saber se eu preciso estar fazendo algum tratamento de sinal ou algo no dispositivo para emular adequadamente a ejeção em hosts Mac.


1


origem


bem no windows você basicamente está dizendo ao gerenciador PnP para ejetar um dispositivo de armazenamento em massa. Por exemplo, em C # você teria o seguinte trecho de código para lidar com seu usb, if ((device.LogicalDrive == null) || (device.LogicalDrive.Length == 0)) continue; device.Eject(true); Portanto, acho que você só precisa descobrir o gerenciador PnP para seu respectivo host. - pneumatics


Respostas:


O conceito de 'ejetar' no nível do usuário pode significar várias coisas diferentes, enquanto desmontar sempre significa apenas desmontar.

Para mídia ótica, ejetar causa ejeção física do disco após a desmontagem.

Para algumas mídias, como mídia flash removível (cartões de memória USB, qualquer coisa que apareça como uma unidade de carregamento de slot branca no Finder), ejeta a desmontagem de todos os volumes do dispositivo e evite qualquer interação posterior com o dispositivo até que ele seja fisicamente removido o dispositivo permanece na árvore de dispositivos USB, mas bloqueia dispositivos /dev são removidos e não estão mais listados no Utilitário de Disco ou diskutil list.

Para outros tipos de mídia, como unidades de disco rígido removíveis (qualquer coisa que apareça como um invólucro de plástico amarelo no Finder), a ejeção simplesmente desmontará o volume e o deixará acessível para ser montado novamente ou gravado no dispositivo de bloco.

Não sei exatamente quais são os critérios para qual comportamento é aplicado a qual tipo de dispositivo. Eu testei com um monte de unidades de disco rígido criptografadas CoreStorage / FileVault 2 e um monte de drives flash USB. O número de volumes no dispositivo em questão parece fazer pouca diferença, mas o bloco de interação pode ser decidido pelo CoreStorage ou pela diferença no tipo de mídia.

O OS X não recusa se você desconectar um dispositivo que não foi ejetado, mas teve todos os seus volumes desmontados.


2





Quando você usa ferramentas GUI no Mac e no Linux para “ejetar” o dispositivo USB, a GUI geralmente verifica se o dispositivo está ocupado ou não e, se não estiver ocupado, desmonta o dispositivo USB do sistema de arquivos.

A maioria dos sistemas Unix / Linux tem um comando de desmontagem, que é o que as ferramentas da GUI fazem quando você “ejeta” o dispositivo USB. Este comando devemos ser executado antes que o dispositivo seja fisicamente removido (no entanto, existem opções para forçá-lo a remover as referências ao dispositivo, mas elas nem sempre funcionam).

Confira as páginas de manual para umount. Uma cópia pode ser encontrada Aqui.


0