Пример kpa_example

12 января 2026

ID kpa_example

Пример демонстрирует работу с KPA-пакетами в решении на базе KasperskyOS:

  • скачивание KPA-пакета с HTTP-сервера;
  • сборка KPA-пакета из исходных компонентов с использованием функций библиотеки kpa;
  • предварительная установка KPA-пакета в собираемый образ решения на базе KasperskyOS с использованием утилиты cas-pm;
  • установка KPA-пакета в работающее решение на базе KasperskyOS с использованием компонента PackageManager;
  • получение данных о манифесте KPA-пакета;
  • запуск процесса из исполняемого файла, установленного из KPA-пакета, а также получение сведений о процессе и его остановка с использованием компонента ExecutionManager.

Директория примера в SDK

Код примера и скрипты для сборки находятся по следующему пути:

/opt/KasperskyOS-Community-Edition-<platform>-<version>/examples/kpa_example

Список программ

  • Client – прикладная программа, которая выполняет работу с тремя KPA-пакетами: DownloadedApp.kpa (скачивается с HTTP-сервера), Application.kpa (собирается из исходных компонентов и устанавливается в работающее решение), PreinstalledApp.kpa (собирается из исходных компонентов и предварительно устанавливается в собираемый образ решения).
  • Server – системная программа, реализующая сервер журналирования, которому другие программы передают сообщения. Для отправки сообщений серверу журналирования программы используют библиотеку logrr_cpp, которая фильтрует сообщения по уровню журналирования. Сервер журналирования передаёт полученные сообщения каналу вывода FsOutputChannel.
  • FsOutputChannel – системная программа, реализующая канал вывода для программы Server. Канал вывода сохраняет полученные от сервера журналирования сообщения в файл.
  • PkgMgrEntity – системная программа, предоставляющая функциональность для управления KPA-пакетами.
  • ExecMgrEntity – системная программа, управляющая жизненным циклом процессов через IPC-механизмы.
  • BlobContainer – системная программа, предназначенная для загрузки бинарных данных в память и используемая программой Execution Manager для запуска процессов.
  • EntropyEntity – системная программа, реализующая генератор случайных чисел.
  • Dhcpcd – системная программа, реализующая DHCP-клиент, который в фоновом режиме получает параметры сетевых интерфейсов от внешнего DHCP-сервера и передает их виртуальной файловой системе.
  • VfsSdCardFs – системная программа, поддерживающая файловую систему SD-карт.
  • VfsNet – системная программа, поддерживающая сетевые протоколы.
  • DCM – системная программа, позволяющая динамически создавать IPC-каналы.
  • SDCard – драйвер SD-карты.
  • DNetSrv – драйвер сетевой карты.

При сборке примера для целевой аппаратной платформы в решение автоматически включаются платформенно-зависимые драйверы:

  • BSP – пакет поддержки аппаратной платформы (англ. Board Support Package). Обеспечивает кросс-платформенную настройку периферии для Radxa ROCK 3A и Raspberry Pi 4 B.
  • Bcm2711MboxArmToVc – драйвер для работы с сопроцессором VideoCore (VC6) через технологию mailbox для Raspberry Pi 4 B.

Описание инициализации

Файл описания инициализации решения init.yaml генерируется в процессе сборки решения на основе шаблона ./einit/src/init.yaml.in. Макросы вида @INIT_*@, которые содержатся в шаблоне, автоматически раскрываются в итоговом файле init.yaml. Подробнее см. "Шаблон init.yaml.in".

Описание политики безопасности

Файл security.psl содержит описание политики безопасности решения на базе KasperskyOS и находится в директории ./einit/src. Декларации в PSL-файле снабжены комментариями, которые поясняют назначение этих деклараций.

Описание политики безопасности решения в этом примере разрешает любые взаимодействия процессов между собой и ядром. Эту политику можно использовать только в качестве заглушки на ранних стадиях разработки решения, чтобы модуль безопасности не препятствовал взаимодействиям. В реальном решении на KasperskyOS применять такую политику недопустимо.

Ресурс

  • В директории ./resources/xdl/kpa_example расположены файлы Application.edl, Client.edl, DownloadedApp.edl и PreinstalledApp.edl – EDL-описания программ.
  • В директории ./resources/hdd/etc расположены файлы конфигурации для программ VfsNet и Dhcpcd: hosts и dhcpcd.conf соответственно.
  • В директории ./resources/packages/application/files расположен файл text.txt. Этот файл является ресурсом для KPA-пакета Application.kpa.

Сценарий работы

Программа Client выполняет следующие действия:

  1. Проверяет доступность сети. Если сеть не доступна, отправляет сообщение в журнал с использованием макроса LOG компонента LogRR и завершает работу.
  2. Загружает KPA-пакет DownloadedApp.kpa с HTTP-сервера.
  3. Отправляет сообщение в журнал со списком доступных KPA-пакетов: Application.kpa и DownloadedApp.kpa. Сборка KPA-пакета Application.kpa выполняется при сборке решения в файле ./application/CMakeLists.txt.
  4. Получает с использованием функций CreatePackageManager() и GetPackageController() указатели на экземпляры интерфейсов IPackageManager и IPackageController соответственно, необходимые для работы с компонентом PackageManager.
  5. Устанавливает KPA-пакет Application.kpa с использованием функции InstallPackage() интерфейса IPackageController.
  6. Отправляет сообщение в журнал со списком уникальных идентификаторов установленных KPA-пакетов: kpa_example.application и kpa_example.preinstalled_app. Сборка KPA-пакета PreinstalledApp.kpa и его предварительная установка в собираемый образ решения выполняется в файле ./preinstalled_app/CMakeLists.txt.
  7. Отправляет сообщение в журнал о получении данных о манифесте KPA-пакета Application.kpa с использованием функции GetManifest() интерфейса IPackageController.
  8. Получает с использованием функции DcmConnect() указатель на экземпляр интерфейса IExecutionManager. Для соединения с процессом ExecutionManager используется системная программа DCM.
  9. Используя указатель на экземпляр интерфейса IExecutionManager получает доступ к интерфейсу IProcessControl.
  10. Запускает процесс из исполняемого файла, поставляемого в KPА-пакете Application.kpa. В цикле получает состояния запущенного процесса с использованием функции GetProcessState() интерфейса IProcessControl и отправляет сообщения о полученных состояниях в журнал. Процесс самостоятельно завершает свою работу.
  11. Запускает с задержкой 60 сек процесс из исполняемого файла, поставляемого в KPА-пакете Application.kpa.
  12. Используя указатель на экземпляр интерфейса IExecutionManager получает доступ к интерфейсу ISystemController. Получает сведения о процессах, запущенных с использованием компонента ExecutionManager, с использованием функции GetSystemInfo() интерфейса ISystemController и отправляет сообщения с полученными сведениями в журнал. Через 5 сек принудительно завершает работу запущенного процесса с использованием функции StopProcess() интерфейса IProcessControl.

Сборка и запуск примера

Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.

Для эмулятора QEMU после сборки примера, но перед его запуском, необходимо:

  1. Дополнительно собрать KPA-пакет DownloadedApp.kpa. (Исходный код для сборки находится в файле ./downloaded_kpa/CMakeLists.txt.) Для сборки KPA-пакета выполните команду:

    cmake --build build --target DownloadedKpa

  2. Запустить HTTP-сервер, который будет предоставлять доступ к файлам из директории ./build/kpa/ на порту 8080. Для этого в отдельном сеансе терминала выполните команду:

    python3 -m http.server -d ./build/kpa/ 8080

    Чтобы проверить доступность KPA-пакета DownloadedApp.kpa, откройте в браузере страницу по адресу http://localhost:8080 и убедитесь, что файл присутствует в списке.

Для целевых аппаратных платформ необходимо запустить HTTP-сервер до запуска образа, содержащего пример.

См. "Сборка и запуск примеров".

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!