Как выделяется основной номер для драйвера устройства платформы?

Интересно, как основной номер выделяется для драйвера устройства платформы. Например, в коде драйвера, я не вижу никаких вызовов функций, таких как

alloc_chrdev_region()

or

register_chrdev_region()

Кто-нибудь, пожалуйста, дайте мне понять это. Спасибо.


person Sagar Jain    schedule 08.04.2014    source источник
comment
Общий вопрос: почему вы думаете, что контроллеру MCSPI нужен мажор символьного устройства? Это не имеет ничего общего с видимыми пользователями символьными устройствами.   -  person oakad    schedule 08.04.2014
comment
Это условность. См. также udev   -  person Basile Starynkevitch    schedule 08.04.2014


Ответы (2)


Ядро создает множество устройств, подключенных к различным виртуальным шинам (которые могут представлять или не представлять физическую шину). Только некоторые из этих устройств могут быть осмысленно доступны непосредственно из пользовательского пространства. И только часть из них использует для этого интерфейс «узел устройства» (поскольку в современных ядрах существует множество других опций). Если этот конкретный интерфейс не используется драйвером, то нет необходимости выделять номера узлов устройств.

Внутри ядра устройства располагаются по их принадлежности к определенным шинам (используя внутренние имена устройств и идентификаторы шин). Например, драйвер mcspi регистрируется как «устройство» на «платформенной шине» и как «мастер шины» на «шине spi». Увидев, что мастер шины зарегистрирован, подсистема spi инициирует «повторное сканирование шины» на вновь подключенной шине.

Драйвер spidev настроен таким образом, чтобы всегда «соответствовать» воображаемому устройству, присутствующему на каждой шине spi, поэтому он будет создаваться для каждой регистрации «хозяина шины». Он создаст узел устройства пользовательского пространства, который можно использовать для прямой связи с его «хозяином шины» (контроллером шины spi, в данном конкретном случае mcspi).

person oakad    schedule 08.04.2014

Контроллер не должен быть выставлен. Следовательно, никаких устройств нет.

С другой стороны, для SPI устройств требуется ОСНОВНОЕ? МИНОРНОЕ, не определенное в spidev.c, здесь регистрируется устройство. А в вверху того же файла есть макрос для мажора не определяется как:

56 #define SPIDEV_MAJOR 153 /* назначено */
57 #define N_SPI_MINORS 32 /* ... до 256 */

person brokenfoot    schedule 08.04.2014
comment
Чем этот драйвер контроллера отличается от драйвера char? - person Sagar Jain; 08.04.2014
comment
Контроллер — это контроллер, spidev — это совершенно другой драйвер, который вы можете использовать для подключения к контроллеру из пользовательского пространства. - person oakad; 08.04.2014
comment
@brokenfoot Ваш ответ в основном неверен. mcspi является драйвером контроллера сам по себе и не связан напрямую с spidev. - person oakad; 08.04.2014
comment
@oakad: не могли бы вы рассказать о разнице между драйвером spidev и драйвером контроллера mcspi. Пожалуйста, предоставьте вспомогательные ссылки. - person Sagar Jain; 08.04.2014
comment
Смотрите мой ответ. Что касается вспомогательных ссылок — ознакомьтесь с книгой «Драйверы устройств Linux», глава 14 3-го издания (но лучше поищите более новые издания). - person oakad; 08.04.2014