Jump to content

Драйвер для DNet


Recommended Posts

Добрый день.

Пытаюсь собрать конфигурацию с отдельным сетевым драйвером, как это описано в https://support.kaspersky.ru/help/KCE/1.1/ru-RU/vfs_app_build.htm подраздел "Сборка сетевой версии VFS с отдельным сетевым драйвером". В main драйвера делаю DNetRegisterDriver, отрабатывает без ошибки, но драйвер при этом не запускается (переданный _DNetDriverEntry не вызывается). Что было испробовано:

1. При сборке программы-драйвера подключаются библиотеки dnet_implementation и dnet_server. При запуске в qemu не запускается с сообщением Can't initialize task "kl.drivers.DNetSrv". Файл dnet_entity при этом в сборку добавляется автоматически.

2. При сборке программы-драйвера подключаются библиотеки dnet_implementation и dnet_server. При сборке vfs помимо рекомендованных в вышеупомянутой статье параметров добавляю:

set_target_properties (VfsNet PROPERTIES ${dnet_ENTITY}_REPLACEMENT "ds.ModemDriver")

, где "ds.ModemDriver" -- имя сущности драйвера. В таком случае при запуске появляется сообщение:

[2023-09-16T10:28:10.774][Info][ds.VfsNet][29:30][DNETCL] Try to connect to server 'kl.drivers.DNet' with interface 'kl.drivers.DNet.dnet'...

dnet_entity при этом в сборке отсутствует. Нужно клиенту dnet как-то указать, куда подключаться? Не нашел такой возможности.

3. При сборке программы-драйвера подключается библиотека dnet_client. Результат аналогичный п.1.

Подскажите, как все-же правильно реализовать конфигурацию с нестандартным драйвером?

Link to comment
Share on other sites

Да, не было разрешение на запуск kl.drivers.DNetSrv. Теперь все процессы запускаются, но драйвер после регистрации через DNetRegisterDriver по прежнему не стартует.

Вообще, такая схема с vfs, dnet и драйвером в трех разных процессах имеет право на жизнь?

Link to comment
Share on other sites

Добрый день!

 

 

Подключение "нового" драйвера, можно посмотреть на примере embed_ext2_with_separate_vfs  из состава SDK KOS-CE-1.1 .  В этом примере подключаются уже собраные библиотеки (существуюшие драйвера), но так же можно сделать свою реализацию драйвера и включить его в серверный процесс. Это пример показывает как работать с файловой системой. Но также пожно добавить и свою библиотеку реализующую функционал "нового"сетевого  дравера.

 

С уважением,

Altyn Sartaeva | Technical Support Engineer | Kaspersky Lab

 

Link to comment
Share on other sites

8 часов назад, Ярослав сказал:

А драйвер прописан в init.yaml ?

Да, и сам процесс запускается. Файл init.yaml выглядит так:

entities:

# Entity "client"
- name: ds.Client
  connections:
  - target: ds.VfsNet
    id: {var: _VFS_CONNECTION_ID, include: vfs/defs.h}
@INIT_Client_ENTITY_CONNECTIONS+@

- name: ds.VfsNet
@INIT_VfsNet_ENTITY_CONNECTIONS@

- name: ds.ModemDriver
@INIT_ModemDriver_ENTITY_CONNECTIONS@

@INIT_EXTERNAL_ENTITIES@

В программе драйвера (упрощено для теста):

DNetDriver* _DNetDriverEntryTest(void *context)
{
    fprintf(stderr, "_DNetDriverEntryTest()\n");
    return(NULL);
}

int main(void)
{
    fprintf(stderr, "DNetRegisterDriver...\n");
    DNetError err = DNetRegisterDriver(_DNetDriverEntryTest, NULL);
    if(err != DNET_EOK)
    {
        fprintf(stderr, "DNetRegisterDriver failed with %u\n", err);
    }
    fprintf(stderr, "DNetRegisterDriver passed\n");
    
    // ...
}

При запуске DNetRegisterDriver отрабатывает с кодом DNET_EOK, но _DNetDriverEntryTest не вызывается.

 

6 часов назад, Altyn сказал:

Подключение "нового" драйвера, можно посмотреть на примере embed_ext2_with_separate_vfs  

Посмотрел этот пример, вижу, что при компиляции добавляется LWEXT4_LIB. Посмотрел библиотеку liblwext4.a, нашел несколько init функций внутри секции initcall_fs_section, нашел упоминание в vfs/fs.h, там же нашелся REGISTER_FILESYSTEM. Поискал аналогичное для сети, но не нашел.

Link to comment
Share on other sites

В 22.09.2023 в 18:06, Segfault сказал:

Да, и сам процесс запускается. Файл init.yaml выглядит так:

entities:

# Entity "client"
- name: ds.Client
  connections:
  - target: ds.VfsNet
    id: {var: _VFS_CONNECTION_ID, include: vfs/defs.h}
@INIT_Client_ENTITY_CONNECTIONS+@

- name: ds.VfsNet
@INIT_VfsNet_ENTITY_CONNECTIONS@

- name: ds.ModemDriver
@INIT_ModemDriver_ENTITY_CONNECTIONS@

@INIT_EXTERNAL_ENTITIES@

 

Это файл init.yaml.in , этот файл преобразуется в init.yaml и вот его лучше посмотреть , init.yaml файл обычно находится в каталоге build/einit/Einit-.../  

Link to comment
Share on other sites

В 22.09.2023 в 18:06, Segfault сказал:

 

В программе драйвера (упрощено для теста):

DNetDriver* _DNetDriverEntryTest(void *context)
{
    fprintf(stderr, "_DNetDriverEntryTest()\n");
    return(NULL);
}

int main(void)
{
    fprintf(stderr, "DNetRegisterDriver...\n");
    DNetError err = DNetRegisterDriver(_DNetDriverEntryTest, NULL);
    if(err != DNET_EOK)
    {
        fprintf(stderr, "DNetRegisterDriver failed with %u\n", err);
    }
    fprintf(stderr, "DNetRegisterDriver passed\n");
    
    // ...
}

При запуске DNetRegisterDriver отрабатывает с кодом DNET_EOK, но _DNetDriverEntryTest не вызывается.

 

Посмотрел этот пример, вижу, что при компиляции добавляется LWEXT4_LIB. Посмотрел библиотеку liblwext4.a, нашел несколько init функций внутри секции initcall_fs_section, нашел упоминание в vfs/fs.h, там же нашелся REGISTER_FILESYSTEM. Поискал аналогичное для сети, но не нашел.

Вроде понял. ))

Что бы создать драйвер для нового устройства и включить его в существующий API KOS(dnet_class), достаточно сложный процесс. Возможно, на уровни представленного SDK даже не получится.

Конечно, писать свой собственный драйвер, без сетевого стека тоже не то.

 

 

Link to comment
Share on other sites

Здравствуйте!

В SDK KOS CE 1.1  не представлен пример создания "нового" сетевого драйвера.  Сейчас можно только подключать существующие драйвера. В разной конфигурации. Что представлено в примерах.

Спасибо!

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now


×
×
  • Create New...