Примечание.. Я перечисляю эту проблему, как и сегодня, я не против изменения реализации (например, перемещение создания класса в общую область), если это делает вещи проще... Я просто не знаю, как это сделать. : Конечная записка
У меня есть два модуля ядра Linux, и я пытаюсь обновить их /sys. Поиск в google и других источниках, я видел много кода в строках:
static dev_t MyDev;
static struct class *c1;
static int __init start_func(void)
{
...
MyDev = MKDEV(nMajor, MINOR_VERSION);
register_chrdev_region(MyDev, 1, MODULE_NAME);
c1 = class_create(THIS_MODULE, "chardrv");
device_create(c1, NULL, MyDev, NULL, MODULE_NAME);
....
И я проверил для своего первого модуля этот код работает и что он правильно создает:
/sys/class/chardrv/<MODULE_NAME>
запись. Я хотел бы знать, как создать устройство в существующем классе. Другими словами, один из моих модулей создал этот новый класс chardrv, теперь я хочу, чтобы мой другой модуль мог также зарегистрировать свои устройства в одном классе.
Я не могу снова вызвать class_create() (во втором модуле), потому что этот класс "chardrv" уже существует...
Итак, я могу запустить проверку, чтобы увидеть, существует ли /sys/class/chardrv, и это может помочь мне решить, нужно ли мне вызвать class_create() или нет, это не проблема. Здесь можно внести некоторые псевдокоды:
if ( path "/sys/class/chardrv" does not exist)
new_class = class_create("chardrv")
else
new_class = some how get class "chardrv" handle, or properties, or whatever
device_create(new_class, ...)
Итак, как в этом примере, если мой класс уже существует, и я просто хочу добавить в него свое новое устройство из второго модуля, я предполагаю, что мне нужно создать структуру класса и как-то заполнить его с правильными атрибутами класса chardrv, тогда вызовите device_create, как и раньше, но я не уверен, как это сделать.