Привет всем.
Объясню задачу: мне нужно написать драйвер обработки сигналов от платы ввода/вывода. Делаю я все это для ядра 2.6.8 в Debian. Написал свой модуль для ядра, собрал его с помощбю kbild, все прошло нормально. Создаю устройство
Все проходит нормально, возвращается номер устройства 100. По lsmod проверяю - модуль загружен. Проблема начинается когда я из клиента пытаюсь открыть устройство
При вызове в клиенте open() возвращается отрицательный результат, который является признаком ошибки. Может быть можно более конкретно узнать причину ошибки?
При вызове в клиенте open() возвращается отрицательный результат, который является признаком ошибки. Может быть можно более конкретно узнать причину ошибки?
При вызове perror() пишет: неправильный путь или имя. Устройство /dev/adw1711 есть и доступ к нему разрешен, а клиент не видит. Второй момент: если я указываю в вызове register_chrdev имя несуществующего устройства, то все равно возвращается номер старшего устройства и все нормально, хотя такого файла в /dev нет. Прямо не знаю что и делать, парадокс. Или я чего не доганяю
При вызове perror() пишет: неправильный путь или имя. Устройство /dev/adw1711 есть и доступ к нему разрешен, а клиент не видит. Второй момент: если я указываю в вызове register_chrdev имя несуществующего устройства, то все равно возвращается номер старшего устройства и все нормально, хотя такого файла в /dev нет. Прямо не знаю что и делать, парадокс. Или я чего не доганяю
register_chrdev на имя кладет - оно нужно лишь для sysfs (или devfs в старых ядрах). Он в качестве первого аргумента принимает major, а если ему 0 дать - то выдаст от балды, причем этот номер не обязательно совпадет с тем, который Вы в mknod указали. Поэтому у Вас ничего не работает. Правильное поведение будет таким
maj = register_chrdev(0, "name", &ops);
printk("I have major %d - call mknod accordingly\n", maj);
...
mknod /dev/myname c maj MINOR
Поскольку многие мажоры уже зарезервированы за конкретными девайсами - может быть будет лучше второй вариант, но тогда возникают проблемы с mknod. Для этого существует в старых ядрах devfs, а в новых - uevent на которые возбуждается udevd. Как поступить в Вашей ситуации - решайте сами.
В каждом из нас спит гений... и с каждым днем все крепче...