делаю так:
#define MAX_DEV_NUM 16
#define MAJ_DEV 240
...
dev_reg = MKDEV(MAJ_DEV, 0);
register_chrdev_region(dev_reg, MAX_DEV_NUM, "sp605");
а потом для каждого найденого устройства
struct cdev *chr_dev;
...
chr_dev = cdev_alloc() // ошибки везде проверяются по стаднартной схеме с goto, я их здесь убрал просто.
chr_dev->owner = THIS_MODULE;
chr_dev->ops = filops;
devno = MKDEV(MAJ_NUM, i); //i - соответсвующий minor number 0<i<MAX_DEV_NUM;
cdev_add(chr_dev, devno, 1);
короче общая схема такая - делаю register_chrdev_region для 16ти устройств, а потом по одному из добавляю cdev_add.
загружается драйвер нормально, ошибок никаких не возвращает. в /proc/devices запись есть. но когда я делаю
mknod /dev/device0 c 240 0
В чём проблема? Спасибо.