Как libusb получает доступ к материалу ядра?

В zsh, с модернизированным активным завершением (т.е. с compinit в Вашем .zshrc), _history_complete_word функция обеспечивает эту функцию. Это доступно через два виджета: _history-complete-older и _history-complete-newer, связанный с ESC , и ESC / по умолчанию. Эти две команды циклически повторяются через все слова в истории оболочки, которые имеют текущее слово как префикс.

10
15.01.2014, 12:35
3 ответа

Libusb является библиотекой для взаимодействия с USB-устройствами таким же образом, которые проклятия библиотека для взаимодействия с текстовыми терминалами, ALSA (более точно его libasound компонент) является библиотекой для взаимодействия с устройствами Audi и т.д. Ядро обрабатывает аппаратные взаимодействия. Это обеспечивает файлы устройств, которые приложения могут открыть для взаимодействия с аппаратными средствами, через read, write и ioctl системные вызовы.

ioctl системный вызов: это позволяет приложениям (код уровня пользователя) выпускать запросы, которые являются процессами ядром.

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

  • Электрический сигнал на шине инициировал событие на контроллере USB.
  • Контроллер USB повышает сигнал прерывания на главном процессоре.
  • Процессор выполняет обработчика прерываний в ядре операционной системы.
  • Ядро замечает, что процесс в настоящее время находится в блокировании read, write или ioctl системный вызов на файле устройств и причинах тот системный вызов возврата.
  • В процессе пространства пользователя, когда системный вызов возвращается, выполнен код библиотеки.
  • Код библиотеки выполняет функцию обратного вызова, зарегистрированную прикладным программистом.
10
27.01.2020, 20:02
  • 1
    так никакая потребность записать драйверы устройств для USB-устройств? (если, возможно, для оптимизации скорости) –  Thomas 16.01.2014, 10:28
  • 2
    @Thomas, который необходимо записать драйверу ядра, если Вы хотите включить платформу, это независимо от транспорта: клавиатура, устройство хранения данных, Ethernet, и т.д. Иначе, я думаю, что Вам только нужен драйвер, если задержка программы пространства пользователя слишком высока. спасибо –  Gilles 'SO- stop being evil' 16.01.2014, 11:27
  • 3
    Если устройство не распознано компьютером (никакой драйвер для него), будет libusb все еще смогите получить доступ к нему? –  Thomas 16.01.2014, 13:07
  • 4
    @Thomas, который я не знаю, может ли libusb справиться со всеми аспектами протокола USB, но в принципе, да. Программа пространства пользователя может связаться с любым последовательным устройством RS232, через /dev/ttyS*. USB является тем же принципом, только быстрее и более сложным. использование –  Gilles 'SO- stop being evil' 16.01.2014, 14:16

Linux использует два кольцевых кольца 0, назван уровнем ядра, кольцо 3 называют уровнем пользователя. Соединение от пользователя к ядру сделано (как оно было уже сказано) через syscalls. Между ними библиотеки, как замечено от пространства пользователя. Таким образом, большая часть низкоуровневого доступа к ядру реализована в библиотеках, по причинам устойчивости, безопасности, синхронизации, сохраните интервал и так далее. Драйвер ядра предоставляет различные интерфейсы пространству пользователя: (ioctl, sysfs, сокеты, устройства посимвольного ввода-вывода и блочные устройства и так далее) Интерфейсы Пространства пользователя. Таким образом, если Вы хотите, можно реализовать доступ к драйверу ядра собой опускающий библиотеки или намного более легкую компиляцию Ваш двоичный файл со статическими связанными библиотеками.

Хорошая начальная точка должна считать libusb источники, они хорошо документируются.

3
27.01.2020, 20:02

Это использует syscalls (2) и файлы устройств, подготовленные ядром ( /dev/bus/usb/* )

0
27.01.2020, 20:02
  • 1
    Таким образом, все работает, как будто ядро сделало специальный драйвер для неизвестных устройств, который принимает чтения и записи? Как мы уведомляемся относительно прерываний и так далее? –  Thomas 15.01.2014, 12:34

Теги

Похожие вопросы