1

Когда USB-устройство извлекается с использованием графического интерфейса в Finder, что именно происходит на низком уровне? Есть ли определенные сигналы, отправленные на устройство?

Причина, по которой я спрашиваю, заключается в том, что я пытаюсь эмулировать ручное извлечение устройства, добавляя и удаляя модуль хранения файлов через консоль устройства под управлением встроенного Linux. Простое удаление модуля прекрасно работает на ПК, но Mac выдает ошибку "не правильно извлечен", а ядро Linux "паникует" и получает ошибку нулевого указателя ядра.

Вот дополнительная информация:

Я использую USB-устройство Gumstix COM под управлением Linux. Устройство подключено к хосту (Windows или Mac), и я эмулирую его физическое удаление, удаляя модуль запоминающего устройства в ядре Linux устройства, таким образом, хост больше не видит его как устройство хранения. Я делаю это с помощью modprobe -r g_file_storage .

Это работает без проблем в Windows. Это не работает на Mac, потому что я получаю сообщение об ошибке на хосте Mac, говорящее о том, что устройство было извлечено неправильно. Это вызывает ошибку нулевого указателя в ядре Linux устройства и вызывает панику.

Это наводит меня на мысль, что есть кое-что, что делает ТОЛЬКО Mac при правильном извлечении USB-устройства, которое мне нужно эмулировать в моем скрипте на устройстве.

По сути, я хочу знать, нужно ли мне выполнять некоторую обработку сигнала или что-то на устройстве, чтобы должным образом эмулировать выброс на хостах Mac.

2 ответа2

2

Понятие «извлечение» на уровне пользователя может означать несколько разных вещей, тогда как размонтирование всегда означает просто размонтирование.

Для оптических носителей извлечение вызывает физический выброс диска после размонтирования.

Для некоторых носителей, таких как съемный флэш-носитель (USB-накопители; все, что отображается в Finder как белый загрузочный слот), извлечение отключает все тома устройства, а затем предотвращает любое дальнейшее взаимодействие с этим устройством до его физического удаления. устройство остается в дереве устройств USB, но блочные устройства в /dev удаляются, и его больше нет в списке в Дисковой утилите или diskutil list .

Для других типов носителей, таких как съемные жесткие диски (все, что в Finder отображается в виде желтого пластикового корпуса), извлечение просто размонтирует том и оставит его доступным для повторной установки или записи на блочное устройство.

Я не совсем уверен, какие критерии для какого поведения применяется к какому устройству. Я провел тестирование с помощью нескольких жестких дисков с зашифрованным CoreStorage/FileVault 2 и нескольких флэш-накопителей USB. Количество томов на рассматриваемом устройстве, по-видимому, мало что меняет, но блок взаимодействия может определяться CoreStorage или различием в типе носителя.

OS X не будет жаловаться, если вы отключите устройство, которое не было извлечено, но все тома которого были отключены.

0

Когда вы используете инструменты GUI в Mac и Linux для «извлечения» USB-устройства, GUI обычно проверяет, занято устройство или нет, и, если оно не занято, отключает USB-устройство из файловой системы.

В большинстве систем Unix/Linux есть команда unmount, что и делают инструменты GUI, когда вы «извлекаете» USB-устройство. Эта команда должна быть выполнена до физического удаления устройства (однако есть варианты, чтобы заставить его удалить ссылки на устройство, но они не всегда работают).

Проверьте из справочных страниц для umount . Копию можно найти здесь .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .