Чтобы программа Client
могла использовать ту или иную функциональность через механизм IPC, необходимо:
Server
), реализующий нужную функциональность. (Под функциональностью мы здесь понимаем одну или несколько служб, имеющих самостоятельные IPC-интерфейсы)Server
и его клиентскую библиотеку.Server
в образ решения.Einit
запускала новый серверный процесс из исполняемого файла Server
и соединяла его IPC-каналом с процессом, запускаемым из файла Client
.Необходимо указать корректное имя IPC-канала, чтобы транспортные библиотеки могли идентифицировать этот канал и найти его IPC-дескрипторы. Корректное имя IPC-канала, как правило, совпадает с именем класса серверного процесса. VFS при этом является исключением.
Client
заголовочный файл с методами сервера.Client
с клиентской библиотекой.Пример добавления GPIO-драйвера в решение
В составе KasperskyOS Community Edition есть файл gpio_hw
, реализующий функциональность GPIO-драйвера.
Следующие команды подключают CMake‑пакет gpio:
.\CMakeLists.txt
...
find_package (gpio REQUIRED COMPONENTS CLIENT_LIB ENTITY)
include_directories (${gpio_INCLUDE})
...
Добавление исполняемого файла gpio_hw
в образ решения производится с помощью переменной gpio_HW_ENTITY
, имя которой можно найти в конфигурационном файле пакета – /opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos/lib/cmake/gpio/gpio-config.cmake:
einit\CMakeLists.txt
...
set (ENTITIES Client ${gpio_HW_ENTITY})
...
В init-описание нужно добавить следующие строки:
init.yaml.in
...
- name: client.Client
connections:
- target: kl.drivers.GPIO
id: kl.drivers.GPIO
- name: kl.drivers.GPIO
path: gpio_hw
В PSL-описание нужно добавить следующие строки:
security.psl.in
...
execute src=Einit, dst=kl.drivers.GPIO
{
grant()
}
request src=client.Client, dst=kl.drivers.GPIO
{
grant()
}
response src=kl.drivers.GPIO, dst=client.Client
{
grant()
}
...
В коде программы Client
нужно подключить заголовочный файл, в котором объявлены методы GPIO-драйвера:
client.c
...
#include <gpio/gpio.h>
...
Наконец, нужно скомпоновать программу Client
с клиентской библиотекой GPIO:
client\CMakeLists.txt
...
target_link_libraries (Client ${gpio_CLIENT_LIB})
...
Для корректной работы GPIO‑драйвера может понадобиться добавить в решение компонент BSP. Чтобы не усложнять этот пример, мы не рассматриваем здесь BSP. Подробнее см. пример gpio_output: /opt/KasperskyOS-Community-Edition-<version>/examples/gpio_output