Как получить бесплатный минорный номер для драйвера устройства linux? - PullRequest
3 голосов
/ 22 июня 2010

У меня есть несколько процессов в моей среде Linux, которые должны использовать один и тот же драйвер устройства для доступа к ряду похожих устройств. Моя проблема в том, что если один процесс создает файл устройства (под экземпляром, я имею в виду mknod) и использует младшее число, скажем 0 и 1, для двух устройств. Так как же другой процесс, делая то же самое, узнает, какой младший номер использовать?

Короче говоря, в пространстве приложения можно найти количество файлов устройств, которые используют один и тот же драйвер?

Ответы [ 3 ]

3 голосов
/ 23 июня 2010

Моя проблема в том, что если один процесс создает экземпляр файла устройства (под экземпляром, я имею в виду mknod)

В * мировых устройствах NIX обычно назначаются старшие / младшие номера статически и внутри ядра. Статически в том смысле, что большинство устройств в настоящее время в Linux имеют динамические основные / минорные и доступны через узлы устройств в / dev (или / proc или /sys).

IOW, приложение из пользовательского пространстване может этого сделать, потому что для связи с драйвером (или устройством) он должен знать, как старший / младший уже сможет получить доступ к драйверу.

Подробностей будет много, лучше прочитать на 3-я глава LDD , где обсуждаются основные / второстепенные назначения.

Автоматическое создание устройств в / dev / теперь обычно обрабатывается udev , с которым я не очень знаком.

1 голос
/ 23 июня 2010

Предполагая, что вы имеете в виду драйвер, который вы создаете или, по крайней мере, имеете источник, попробуйте использовать младшие числа в числовом порядке (для простоты), начиная с нуля.Пусть ваш драйвер отследит, сколько второстепенных номеров / устройств было создано, и выставит это количество через запись в sysfs.Когда вы приступаете к созданию экземпляра нового устройства, используйте текущее значение переменной для младшего номера нового устройства и увеличивайте значение переменной (внутри драйвера).

0 голосов
/ 23 июня 2010

Младшие номера, используемые устройствами, зарегистрированными вашим драйвером, должны быть видны приложениям в псевдофайловой системе /sys. Файл dev, расположенный в каталоге / каталогах /sys/class/..., связанных с вашим устройством, содержит основной: minor.

Вероятно, ваш драйвер использует /sys/class/misc/.../.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...