Как использовать устройство _для создания в существующем классе в Linux?

Примечание:Я перечисляю эту проблему, как она есть сегодня, я не против изменения реализации (перемещения создания класса в общую область, например ), если это упрощает задачу... Я просто не знаю, как это сделать.:Конечная нота

У меня есть два модуля ядра 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, как и раньше, но я не уверен, как это сделать.

13
задан Mike 21 August 2012 в 16:42
поделиться