2013-12-04 3 views
8

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

В принципе, я ищу, чтобы получить ответы на эти вопросы:

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

Надеюсь, вопрос не слишком расплывчатый - я попробовал Google безрезультатно, поэтому мне интересно, знают ли кто-нибудь какие-либо статьи или диаграммы, которые могут это объяснить, или, может быть, если они сами смогут объяснить это сами, , Благодарю.

ответ

9

Нет, это очень хороший вопрос.

Запись блока происходит в linux с уровнем блочного устройства. Файловые системы работают с этим блочным dev-слоем.

Если этот слой хочет что-то написать, он говорит об этом драйверу ведущего устройства usb. Этот драйвер разговаривает с чипом контроллера usb материнской платы.

Этот чип очень прост: USB-порт представляет собой практически последовательный порт с большим количеством расширений, в основном ориентированный на автоконфигурацию и управление питанием. Но в принципе вы можете записывать байты и читать в байтах.

Ваши вопросы:

При подключении устройства к компьютеру, что происходит? Есть ли демон, который набирает на нем, или событие вызывает прерывание где-то?

Устройство (usb slave) говорит, что мастер (в материнской плате): «Я здесь». Чип контроллера USB получает сообщение и сообщает его ядру (обычно) с прерыванием. Ядро повторно инициализирует и rescans шину usb, и говорит udev: «вот новое устройство usb 1234: 5678 на дереве usb 1.3.5»

«Как он определяет, какое устройство это устройство?»

Устройства USB имеют идентификатор поставщика и модели, и они могут сказать это по запросу. Google для «usb ids».

«Как устройство монтируется и что позволяет ему связываться с файловой системой компьютера?»

Ядро загружает только драйвер и говорит, что udev (который находится в пользовательском пространстве): «Вот новое блочное устройство на устройстве номер 22:16». Из этого, udev пытается установить это с некоторым демоном пространства пользователей, он уже зависит от дистрибутива.

Смежные вопросы