- Русские Блоги
- [Драйвер Linux] — Разработка драйвера USB Linux (четыре) —— Hot Swap
- Сначала концепция фундамента USB
- 1, знание оборудования (USB розетка и штекер)
- 2, HUB сообщает о подключении USB-устройства к главному контроллеру USB
- Во-вторых, что такое горячий своп
- 1, концепция фундамента
- 2, Hot Swap преимущества
- Третье, обработка горячей вилки USB под Linux
- 1. Реализация и анализ USB-концентратора под Linux
- 2, анализ уровня программного обеспечения
- Четвертый процесс перечисления USB
Русские Блоги
[Драйвер Linux] — Разработка драйвера USB Linux (четыре) —— Hot Swap
Прежде чем изучить USB Hot String, узнайте некоторые аппаратные знания USB:
Сначала концепция фундамента USB
1, знание оборудования (USB розетка и штекер)
В начальном стандарте разъем USB имеет 4 строки: мощность, D-, D +, заземляющий провод. Мы временно принимаем такой стандартный разъем USB. Позже ОТГ появился, добавил разъем MiniSB. Разъем MiniUSB имеет 5 строк, и есть больше линейки ID для определения идентичности. Стандартные порты USB имеют только тип типа и B. Каждый тип разделен на заглушки и розетки, такие как вилки типа, розетки типа типа и тому подобное. Разъем, используемый на нашем обычном компьютере, называется USB-сокетом типа, а соответствующий штекер называется вилкой, такой как диск. Разъем, такой как принтер, представляет собой гнездо B-типа (по сравнению с четырьмя сторонами, на компьютере нет компьютера), соответствующий штекер является видом B-типа. Может быть, вы видели плоскую удлинитель USB, все в порядке, квартира называется вилкой типа, и тот, который называется вилкой B-типа, а также соответствующие два розетка, это розетка типа и розетки типа , соответственно. Штекер A-Type вставляется в гнездо B-типа и наоборот.
MiniUSB также разделен на тип типа A, B, но добавляет тип AB (не типа крови, не допускает ошибку, нет типа ^ _ ^). Поскольку это называется MiniUSB, конечно, это очень мало, в основном для портативного оборудования, такого как MP3, мобильные телефоны, цифровые камеры и т. Д. USB — это главная мульти-рабская структура, которая может иметь только один хост. Как и компьютер — это хост, другой может быть только устройством, так что два устройства не могут напрямую общаться. Появление USB OTG (на ходу) решается: устройство может изменить идентичность в некотором случае, появляться в виде хоста. Таким образом, появляется розетка типа AB Miniusb, будь то вилка типа MiniUSB или вилка MiniSB B-типа, вы можете вставить его, и более одной линии идентификатора используется для определения своей идентичности: это хост или из машина? Таким образом, два USB-устройств могут быть подключены непосредственно для передачи данных. Разъем MiniUSB, подобный нашему MP3, — это розетка типа B Miniusb (Note, есть класс сокетов Miniusb, который, кажется, находится внутри спецификации USB, потому что разъем MiniSB должен иметь 5 строк, и этот розетки — это всего лишь 4 строки). Поскольку USB поддерживается Hot-SprapPable, он также имеет соответствующие меры по дизайну сустава. Термана и питание штифты USB относительно длительны, и две контакты данных относительно короткие, поэтому при введении в розетку сначала включите питание и заземление, а затем включите две линии данных. Это гарантирует, что источник питания включен до линии данных и предотвращает защелку. Что касается USB-кабеля, обычно нам все равно, выкупайте вне искусства, если вы не используете USB-кабель. В режиме полной скорости необходимо использовать экранированный витой кабель, в то время как режимы с низким уровнем скорости не могут быть экранированы и скручены. Кроме того, протокол USB предусматривает, что USB-кабель не должен превышать 3 метра, а полный кабель скорости не должен превышать 5 метров. Это связано с тем, что кабельная передача задерживается, и для того, чтобы она мог правильно отвечать, она не может быть слишком отложена. Стандарт USB указывает цвет сигнальной линии, где VBUS красный, D-белый, D + зеленый, GND черный. Тем не менее, я видел множество USB-кабелей не следуйте стандартам, поэтому каждый должен быть осторожен при использовании и использовании измерений таблицы более надежным.
2, HUB сообщает о подключении USB-устройства к главному контроллеру USB
Во-первых, на D + и D- D + и D- каждой нижней части узла USB-концентратора, дозирующий резистор 15K OHM. Таким образом, когда порт ступицы суспендирован, два подтягивающих резистора натянуты на низкий уровень. На USB-устройстве 1.5k OHM подтягивающем резистор подключен к D + или D-. Для полной скорости и высокоскоростного оборудования подтягивающий резистор подключен к D +; и низкоскоростное устройство представляет собой устойчивость к D-. Таким образом, когда устройство вставлено в концентратор, выдвижной резистор, разделенный на 1,5 тыс. Уголовного резистора и 15K выдвижной, результат поднимается в линию дифференциала. После того, как концентратор обнаруживает это состояние, он отчет о главном контроллере USB (или сообщите об этом основным контроллере USB с помощью HUB на предыдущем слое), чтобы обнаружена введение устройства. Сначала высокоскоростное устройство USB определяется как устройство для полномочий, а затем подтверждение между хостом и устройством затем переключается на высокоскоростной режим. В высокоскоростном режиме он является текущим режимом передачи, а подтягивающая мощность на D + отключена.
Во-вторых, что такое горячий своп
1, концепция фундамента
Горячая подключение или горячая свопТо есть функция Hot-Swap, функция Hot-Swap, чтобы позволить пользователям удалить и заменить поврежденный жесткий диск, мощность или доску и т. Д., Не выключая питание, тем самым улучшая своевременное восстановление системы и масштабируемость системы. Стихии. И гибкость, такая как некоторые системы зеркалирования диска для высококачественных приложений, могут обеспечить горячую замену дисков. Специфическое академическое утверждение: горячее замена, горячие экснал и горячие обновления (горячие модернизация)
2, Hot Swap преимущества
Преимущества добавления горячих свопов в системе включают в себя:
Удалите поврежденный модуль в системной загрузке, вы также можете сделать обновление или расширение в случае включения питания, не влияя на работу системы.
Из-за достоверности частей горячего подкачки они также могут быть использованы в качестве резки, и поскольку горячий своп может автоматически восстановиться, есть много горячих схватных чипов, чтобы обеспечить сигналы для линии электропитания, чтобы система неисправно Так что сокращенные расходы.
Третье, обработка горячей вилки USB под Linux
1. Реализация и анализ USB-концентратора под Linux
Когда система инициализируетсяФункция USB_init.Средняя регулировкаФункция USB_HUB_INITЯ вошел в это.Инициализация Хаба。
Заполните драйвер регистрации HUB в функции USB_HUB_INITИ использоватьФункция kthread_run создает тему ядраОтказ Эта тема используетсяУправляйте состоянием мониторинга HubВсе ситуации сообщаются на этой теме.
Устройство USB является горячей заменой, который отличается от устройства PCI, и устройство PCI фиксируется при запуске системы, поэтому устройство PCI нужно только для инициализации перечисления, а также можно использовать рекурсивный алгоритм. USB-устройство нуждается в горячей заглушке, такФункция hub_probe.Средняя регулировкаФункция hub_configureЧтобы настроить HUB, в основном использовать функции в этой функцииUSB_ALLOC_URB ФункцияНазначить URB, используйтеusb_fill_int_urbЧтобы инициализировать эту структуру URB, включая программу обслуживания прерывания HUB HUB_IRQ, цикл запросов и т. Д.
Всякий раз, когда устройство подключено к интерфейсу USB, шина USB запускает программу службы прерывания HUB HUB_IRQ при запросе информации о состоянии ступицы и использует Kick_khubd, чтобы добавить структуру ступицы к Khubd Queu Hub_event_List, затем просыпаться в Khubd. Введите функцию hub_events, которая используется для обработки очереди Chubd Event, из каждой структуры данных USB_HUB в HUB_EVENT_LIST of Khubd. Функция сначала определяется, если концентратор неверна, то информация о состоянии каждого порта обнаруживается контуром для цикла. использоватьusb_port_statusПолучить информацию порта, позвоните, если это меняетсяhub_port_connect_changeФункция настроить порт и т. Д.
2, анализ уровня программного обеспечения
Здесь мы впервые поговорим о обработке событий Hot Swap USB. — Хабд демон.
-Хубный демон Это демон, чтобы проверить мероприятие USB-порта, чтобы уведомить HCD и USB-сердечник, а затем выполнять соответствующую обработку.
Каталог приводаdrivers/usb/* :
- USB / SERIAL: USB-драйвер последовательного устройства (например, карта USB 3G, Bluetooth и т. Д.)
- USB / Хранение: USB большой зарезервированный диск (U диск)
- USB / Host: USB-хост USB-хост-контроллер Drive (встроенный OTG: DWC_OTG)
- USB / CORE: USB CORE Некоторые обработки кода, все обработка, связанная с водителем, и она зарегистрирована внутри него.
- USB / USB-Skeleton.c: Classic USB-драйвер клиента, вы можете обратиться к
Общая структура драйверов USB размещена ниже:
Здесь мы в основном проанализируем принцип работы Khubd: уровень аппаратного обеспечения — это работа HUB, как общаться с хостом и его устройствами и соответствующими событиями
int usb_hub_init(void) < if (usb_register(&hub_driver) < 0) < printk(KERN_ERR "%s: can't register hub driver\n", usbcore_name); return -1; >khubd_task = kthread_run(hub_thread, NULL, "khubd"); if (!IS_ERR(khubd_task)) return 0; /* Fall through if kernel_thread failed */ usb_deregister(&hub_driver); printk(KERN_ERR "%s: can't start khubd\n", usbcore_name); return -1; >
Здесь мы заботимся только о Kthread_RUN (HUB_THREAD, NULL, «KHUBD»); тогда мы посмотрим на функцию hub_thread
static int hub_thread(void *__unused) < do < hub_events(); wait_event_interruptible(khubd_wait, !list_empty(&hub_event_list) || kthread_should_stop()); try_to_freeze(); >while (!kthread_should_stop() || !list_empty(&hub_event_list)); pr_debug("%s: khubd exiting\n", usbcore_name); return 0; >
Здесь мы видим функцию hub_events (). Затем установите состояние запуска, и если есть событие, чтобы добавить HUB_EVENT_LIST. Так как этот Хубд бежит.
Здесь мы также опубликовали свою функцию поток звонков (слишком лень, чтобы нарисовать сами, просто порезать)
По комментарию потока мы можем четко понимать, что, когда USB-устройство вставлено в интерфейс USB, запускается Khubd, он обнаруживает изменение состояния порта, вызовов HUB_PORT_CONNECT_CHANGE (), если это новое устройство, так что USB_ALLOC_DEV, то вызовите USB_New_Device Настройте USB-устройство нормальной работы. Пожалуйста, смотрите исходный код для деталей.
Четвертый процесс перечисления USB
Вспомогательная резьба ядра Khubd используется для мониторинга всех портов, подключенных к ступице, обычно, обычно,Нить находится в состоянии сна, и когда драйвер ступицы обнаруживает изменение состояния USB-порта, пробуждается поток ядра.。
Процесс перечисления USB: процесс перечисления USB — это начало устройства USB Hot-Sprappable, в течение которогоКонтроллер хоста получает информацию о устройстве и настраивает устройство, драйвер HUB отвечает за процесс перечисления.。
Процесс перечисления в основном разделен на следующие этапы:
STEPT1: Root Remand Сообщите об изменении тока порта, вызванное вставным устройством, и драйвер ступицы обнаруживает, что это изменение состояния, чтобы разбудить поток Khubd.
Шаг2: Khubd идентифицирует порт текущих изменений
Шаг3: KHUBD отправляет контрольный URB с 1-127 в качестве конечной точки пакетного от 1 до 227 в качестве вставки, передавая управляющие URB на контрольную конечную точку 0
Step4: Khubd использует URB Control, используемый портом 0, чтобы получить дескриптор устройства с вставленного устройства, затем получить дескриптор конфигурации и выбрать подходящий
Step5:Khubd запрашивает USB-сердечник, чтобы подключить соответствующий драйвер клиента и устройство USB