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

Из того, что я понимаю:

  • Вообще говоря, драйвер работает в пространстве ядра и может быть вызван из пользовательского пространства.
  • Только код в пространстве ядра может вызывать объекты низкого уровня usb / ioctl
  • libusb – это библиотека, поэтому она будет компилироваться и выполняться в пользовательском пространстве

Итак, как libusb достигает низкого уровня USB?

  • Форматирование внешнего диска в CentOS, ранее использовавшегося в OS X
  • Как работают драйверы Linux и где их найти? (например, драйвер NIC)
  • Как загрузить kali из родного usb
  • Как я могу записать необработанные данные на USB-устройство
  • Драйвер Debian Realtek RTL7832BS
  • Тестирование QinHeng Electronics HL-340 USB-последовательный адаптер
  • Как установить Debian с USB? (Использование полноразмерного изображения, а не netinstall)
  • 2 или более программ в одном USB-конвертере
  • Проблема при установке драйвера для Archer T4U AC1300 на Mint 17
  • USB 3.0 работает всегда, USB 2.0 иногда работает
  • Использование экрана для подключения к консоли Cisco
  • Разница между файлами устройства и драйверами устройств
  • 3 Solutions collect form web for “Как libusb получает доступ к материалам ядра?”

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

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

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

    • Электрический сигнал на шине вызывает событие на контроллере USB.
    • Контроллер USB вызывает сигнал прерывания на основном процессоре.
    • Процессор выполняет обработчик прерываний в ядре операционной системы.
    • Ядро замечает, что в настоящее время процесс блокирует системный вызов для read , write или ioctl в файле устройства и вызывает возврат системного вызова.
    • В процессе пользовательской земли, когда системный вызов возвращается, выполняется код библиотеки.
    • Код библиотеки выполняет функцию обратного вызова, зарегистрированную прикладным программистом.

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

    Хорошей отправной точкой является чтение источников libusb, они хорошо документированы.

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

    Linux и Unix - лучшая ОС в мире.