Процедура регистрации драйвера устройства Linux - PullRequest
4 голосов
/ 30 декабря 2011

Я новичок в Linux, пытаюсь понять модель устройства Linux.Я изучал кодовую базу Linux 3.1.6, особенно часть драйверов, и обнаружил, что

  1. некоторые драйверы использовали (например, устройство i2c-bus: linux-3.1.6 / drivers /i2c / i2c-dev.c) * register_chrdev () * и
  2. несколько других (например, шина pci: linux-3.1.6 / drivers / pci / bus.c) использовали * device_register () *.

Мой вопрос: когда использовать register_chrdev (да, я знаю его для символьного устройства, но почему бы не использовать device_register) и device_register?

Зависит ли это от того, где находится драйверРазработчик хочет, чтобы его устройство / драйвер были перечислены внизу, как devfs vs sysfs?Или интерфейс, доступный для пользовательского пространства для доступа к устройству?

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Одна функция регистрирует символьное устройство ассоциация (подключение основных: второстепенных к вашей функции), другая просто создает абстрактное устройство объект (только), так сказать. Два дополняют друг друга. Объект устройства используется для генерации события, поэтому udev может, если есть также зарегистрированная ассоциация cdev, создать узел в /dev. (Сравните с, например, drivers/char/misc.c.)

0 голосов
/ 27 октября 2012

Посмотрите, когда вы регистрируете устройство как символьное устройство, тогда происходит следующее:

Основной номер дан в соответствии. Если вы используете какое-либо устройство в зависимости от функциональности, регистрация которого основана на символьном устройстве (например, tty, ввод и т. Д.), То у них будет соответствующий основной номер. Вот почему сказано, что не назначайте главный номер статически, если не уверены.

И

Существуют определенные файловые операции, которые соответствуют операциям, которые могут выполняться только на символьных устройствах.

Спросите, есть ли запрос.

...