Примечание:Я перечисляю эту проблему, как она есть сегодня, я не против изменения реализации (перемещения создания класса в общую область, например ), если это упрощает задачу... Я просто не знаю, как это сделать.:Конечная нота
У меня есть два модуля ядра 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, теперь я хочу, чтобы мой другой модуль также мог регистрировать свои устройства в том же классе.
Я не могу вызвать класс _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 class», затем вызовите устройство _create, как и раньше, но я не уверен, как это сделать.