KasperskyOS Community Edition 1.3

Примеры в KasperskyOS Community Edition

В дополнение к руководству разработчика в составе KasperskyOS Community Edition SDK поставляются примеры решений на базе KasperskyOS. Примеры находятся в директории /opt/KasperskyOS-Community-Edition-<version>/examples. Каждый пример помещен в отдельную директорию, в которой содержатся:

  • Директории с исходным кодом программ.
  • Директория resources, которая содержит формальную спецификацию компонента решения. Опционально эта директория может содержать файлы, необходимые для работы примера. Например, файлы конфигурации сети: hosts, dhcpcd.conf и ntp.conf.
  • Сценарии сборки решения в виде файлов CMakeLists.txt.
  • Файлы README.md. Эти файлы имеют однотипное содержание и ссылаются на это руководство.
  • [Опционально] Директория vendor, которая содержит библиотеки и их метаданные, необходимые для управления зависимостями в проектах на языке Rust.

Перед запуском примеров на Radxa ROCK 3A необходимо также выполнить сборку драйверов, которые поставляются в составе SDK в виде исходного кода. Инструкцию по сборке драйверов можно найти в описаниях примеров (файлы README.md).

В таблице ниже приведено описание примеров по разработке простейших решений.

Простейшие решения

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

Краткое описание примера

Запуск на QEMU

Запуск на Raspberry Pi 4 B

Запуск на Radxa ROCK 3A

hello

Демонстрирует самое простое решение. Программа Hello отправляет сообщение в стандартный вывод ошибок. Подробнее см. "Пример hello".

Да

Да

Да

echo

Демонстрирует взаимодействие программ через IPC. Программа Client отправляет программе Server данные, получает измененные данные обратно и выводит их в стандартный вывод ошибок. Подробнее см. "Пример echo".

Да

Да

Да

ping

Демонстрирует использование политики безопасности решения для управления IPC-взаимодействием между программами. Программа Client вызывает в различной последовательности два интерфейсных метода Ping и Pong, предоставляемых программой Server. Но политика безопасности решения разрешает только чередование вызовов Ping и Pong. Подробнее см. "Пример ping".

Да

Да

Да

hello_from_rust

Демонстрирует, как включить в решение простую программу, разработанную на языке Rust и собранную с использованием системы сборки и менеджера пакетов Cargo. Программа Hello отправляет сообщение в стандартный вывод ошибок. Подробнее см. "Пример hello_from_rust".

Да

Да

Да

hello_corrosion

Демонстрирует, как включить в решение простую программу, разработанную на языке Rust, с использованием Corrosion – набора библиотек для интеграции Rust в CMake-проекты. Программа Hello отправляет сообщение в стандартный вывод ошибок. Подробнее см. "Пример hello_corrosion".

Да

Да

Да

В таблице ниже приведено описание примеров, демонстрирующих использование файловых систем и сетевого стека.

Использование файловых систем и сетевого стека в решениях

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

Краткое описание примера

Запуск на QEMU

Запуск на Raspberry Pi 4 B

Запуск на Radxa ROCK 3A

embedded_vfs

Демонстрирует, как включить в решение системную программу, реализующую файловые системы и сетевой стек. Программа Client выполняет операции: создание директории, создание и удаление файла, чтение из файла и запись в файл. Подробнее см. "Пример embedded_vfs".

Да

Да

Да

net_with_separate_vfs

Демонстрирует установку соединения между запущенными в KasperskyOS программами через TCP-сокеты с использованием loopback-интерфейса. Программа Client создает TCP-сокет, подключается к серверу через loopback-интерфейс, отправляет серверу данные и закрывает соединение. Программа Server принимает запрос на создание соединения через TCP-сокет, получает данные от клиента, после чего закрывает соединение. Подробнее см. "Пример net_with_separate_vfs".

Да

Да

Да

net2_with_separate_vfs

Демонстрирует установку соединения через TCP-сокеты между программой-клиентом, запущенной в KasperskyOS, и программой-сервером, запущенной в хостовой операционной системе. Программа Client создает TCP-сокет, подключается к серверу, отправляет серверу данные и закрывает соединение. Программа Server принимает запрос на создание соединения через TCP-сокет, получает данные от клиента, после чего закрывает соединение. Подробнее см. "Пример net2_with_separate_vfs".

Да

Да

Да

vfs_extfs

Демонстрирует, как монтировать файловые системы (ext2, ext3, ext4) блочного устройства. Программа FileVfs реализует серверную часть виртуальной файловой системы, предоставляя интерфейс для взаимодействия с файловыми системами и блочными устройствами. Программа Client отправляет запросы через IPC программе FileVfs, чтобы смонтировать файловые системы в указанные директории, и выполнить базовые операции с файлами (создание, запись, чтение и удаление) для проверки корректности монтирования файловых систем. Подробнее см. "Пример vfs_extfs".

Да

Да

Да

multi_vfs_ntpd

Демонстрирует поддержку сетевого протокола NTP (Network Time Protocol). Программа Ntpd поставляется в составе KasperskyOS Community Edition и представляет собой реализацию NTP-клиента, который синхронизирует системное время с NTP-серверами. Программа Client изменяет текущее системное время на время, указанное в макросе. После синхронизации времени программой Ntpd ожидается, что год в полученном системном времени будет отличаться от года, установленного ранее макросом. Подробнее см. "Пример multi_vfs_ntpd".

Да

Да

Да

multi_vfs_dns_client

Демонстрирует использование системы разрешения доменных имен DNS (Domain Name System) в KasperskyOS. Программа Client после проверки сетевого соединения получает информацию о DNS-сервере, используя его полное доменное имя и порт. Далее, выполняет разрешение доменного имени в IP-адрес и проверяет соответствие IP-адреса заранее заданным значениям. Подробнее см. "Пример multi_vfs_dns_client".

Да

Да

Да

multi_vfs_dhcpcd

Демонстрирует поддержку сетевого протокола DHCP (Dynamic Host Configuration Protocol) в KasperskyOS. Программа Dhcpcd поставляется в составе KasperskyOS Community Edition и представляет собой реализацию DHCP-клиента, который выполняет настройку сетевых интерфейсов. Программа Client получает сведения о настроенных сетевых интерфейсах и выводит их в стандартный вывод ошибок. Подробнее см. "Пример multi_vfs_dhcpcd".

Да

Да

Да

mqtt_publisher

Демонстрирует поддержку протокола обмена сообщениями MQTT (Message Queue Telemetry Transport) в KasperskyOS. Программа Publisher представляет собой реализацию MQTT-издателя, запущенного в KasperskyOS, который в цикле публикует текущее время. MQTT-подписчик, запущенный в хостовой операционной системе, выводит сообщения, полученные от MQTT-издателя, в стандартный вывод. Подробнее см. "Пример mqtt_publisher".

Да

Да

Да

mqtt_subscriber

Демонстрирует поддержку протокола обмена сообщениями MQTT (Message Queue Telemetry Transport) в KasperskyOS. Программа Subscriber представляет собой реализацию MQTT-подписчика, запущенного в KasperskyOS, который выводит сообщения, полученные от MQTT-издателя, в стандартный вывод. MQTT-издатель запускается в хостовой операционной системе. Подробнее см. "Пример mqtt_subscriber".

Да

Да

Да

В таблице ниже приведено описание примеров использования драйверов, поставляемых в составе KasperskyOS Community Edition, для работы с аппаратными интерфейсами GPIO, I2C, UART, SPI и USB.

Использование драйверов в решениях на базе KasperskyOS

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

Краткое описание примера

Запуск на QEMU

Запуск на Raspberry Pi 4 B

Запуск на Radxa ROCK 3A

gpio_input

Демонстрирует использование драйвера GPIO (General-Purpose Input/Output) для ввода через GPIO-пины. Программа Client настраивает GPIO-пины в режим ввода и считывает их значения. Подробнее см. "Пример gpio_input".

Нет

Да

Да

gpio_output

Демонстрирует использование драйвера GPIO для вывода через GPIO-пины. Программа Client настраивает GPIO-пины в режим вывода и переводит их в состояние логической единицы (появление на пине напряжения), а затем в состояние логического нуля (напряжение на пине отсутствует). Подробнее см. "Пример gpio_output".

Нет

Да

Да

gpio_interrupt

Демонстрирует использование драйвера GPIO для проверки работы прерываний для GPIO-пинов. Программа Client настраивает GPIO-пины в режим ввода и регистрирует функции обработки прерываний для всех GPIO-пинов, кроме указанных в списке исключений. В случае срабатывания прерывания на GPIO-пине, программа Client снимает функцию-обработчик для этого GPIO-пина. Программа завершится, когда прерывание произойдет на каждом GPIO-пине. Подробнее см. "Пример gpio_interrupt".

Нет

Да

Да

gpio_echo

Демонстрирует использование драйвера GPIO для проверки функциональности ввода/вывода GPIO-пинов, а также работу прерываний для GPIO пинов. Программа Client настраивает два связанных между собой пина: один пин в режим ввода, второй в режим вывода. Далее регистрирует обработчик прерываний для пина ввода и несколько раз изменяет состояние пина вывода, ожидая срабатывания обработчика прерываний. Подробнее см. "Пример gpio_echo".

Нет

Да

Да

i2c_ds1307_rtc

Демонстрирует использование драйвера I2C (Inter-Integrated Circuit) на аппаратной платформе Raspberry PI 4 B. Программа I2cClient проверяет работу модуля часов реального времени на микросхеме DS1307Z через интерфейс драйвера I2C, устанавливая и проверяя дату на устройстве. Подробнее см. "Пример i2c_ds1307_rtc".

Нет

Да

Нет

i2c_bm8563_rtc

 

Демонстрирует использование драйвера I2C (Inter-Integrated Circuit) на аппаратной платформе Radxa ROCK 3A. Программа Bm8653 проверяет работу часов реального времени на микросхеме BM8563 через интерфейс драйвера I2C, устанавливая и проверяя дату на устройстве. Подробнее см. "Пример i2c_bm8563_rtc".

Нет

Нет

Да

uart

Демонстрирует использование драйвера UART (Universal Asynchronous Receiver-Transmitter). Программа Client выполняет операции с UART: инициализацию, открытие порта, отправку данных и закрытие порта. Подробнее см. "Пример uart".

Да

Да

Да

spi_check_regs

Демонстрирует использование драйвера SPI (Serial Peripheral Interface). Программа Client открывает SPI-канал, выводит его параметры в стандартный вывод и устанавливает требуемый режим работы. Далее программа посылает по SPI-каналу последовательность данных и ожидает получения идентификатора контроллера ATTiny, установленного на плате Sense HAT. Подробнее см. "Пример spi_check_regs".

Нет

Да

Да

barcode_scanner

Демонстрирует использование драйвера USB (Universal Serial Bus) с помощью библиотеки libevdev. Программа BarcodeScanner использует библиотеку libevdev для взаимодействия со сканером штрихкодов, подключенным к USB-порту Raspberry Pi 4 B. Подробнее см. "Пример barcode_scanner".

Нет

Да

Да

watchdog_system_reset

Демонстрирует использование драйвера Watchdog для мониторинга состояния KasperskyOS и автоматического перезапуска Raspberry Pi 4 B. Программа Client взаимодействует со сторожевым таймером: изменяет значение таймера по умолчанию на новое и запускает таймер, несколько раз сбрасывает таймер, ожидает перезагрузки операционной системы при срабатывании таймера. Подробнее см. "Пример watchdog_system_reset".

Нет

Да

Нет

mass_storage

Демонстрирует использование драйвера UsbMassStorage для работы с внешними USB-накопителем, подключенным к USB-порту Raspberry Pi 4 B. Программа FileVfs реализует серверную часть виртуальной файловой системы, предоставляя интерфейс для взаимодействия с файловыми системами и блочными устройствами. Программа Client отправляет запросы через IPC программе FileVfs, чтобы смонтировать файловые системы в указанные директории, и выполнить базовые операции с файлами (создание, запись, чтение и удаление) для проверки корректности монтирования файловых систем на внешнем USB-накопителе. Подробнее см. "Пример mass_storage".

Нет

Да

Да

can_loopback

Демонстрирует использование драйвера CAN на аппаратной платформе Radxa ROCK 3A, когда нет необходимости подключать дополнительную периферию в виде CAN-трансиверов. В примере производится настройка CAN-порта, после чего происходит отправка CAN-пакета. Полученный CAN-пакет проверяется на соответствие отправленному CAN-пакету. Подробнее см. "Пример can_loopback".

Нет

Нет

Да

can2can

Демонстрирует использование драйвера CAN на аппаратной платформе Radxa ROCK 3A для пересылки сообщения между двумя CAN-интерфейсами. В отличие от примера can_loopback, где используется только один CAN-интерфейс и нет необходимости в дополнительном оборудовании, этот пример требует наличия двух CAN-трансиверов подключенных к линиям CAN_H и CAN_L. Подробнее см. "Пример can2can".

Нет

Нет

Да

adc_hello

Демонстрирует использование драйвера Sensors для проверки функциональности АЦП на аппаратной платформе Radxa ROCK 3A. Программа AdcHello считывает поданное на канал АЦП напряжение, нормализует его и выводит в стандартный вывод. Подробнее см. "Пример adc_hello".

Нет

Нет

Да

В таблице ниже представлены примеры использования поставляемых в составе KasperskyOS Community Edition библиотек для выполнения различных функций, таких как журналирование, применение регулярных выражений, обмен сообщениями через IPC и тестирование производительности.

Использование библиотек в решениях

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

Краткое описание примера

Запуск на QEMU

Запуск на Raspberry Pi 4 B

Запуск на Radxa ROCK 3A

shared_libs

Демонстрирует использование динамических и статических библиотек в KasperskyOS. Программа Client вызывает функции из: статической библиотеки; динамической библиотеки, скомпонованной вместе с программой; динамической библиотеки, загружаемой в память при вызове функции dlopen() интерфейса POSIX. Подробнее см. "Пример shared_libs".

Да

Да

Да

koslogger

Демонстрирует использование библиотеки журналирования spdlog в KasperskyOS с помощью библиотеки-обертки KOSLogger. Программа Client записывает сообщения в журнал, который сохраняется на SD-карте при запуске примера на Raspberry Pi 4 B или в файле образа sdcard0.img при запуске примера на QEMU. Сообщения записываются с использованием разных уровней журналирования. Подробнее см. "Пример koslogger".

Да

Да

Да

pcre

Демонстрирует использование библиотеки pcre для работы с регулярными выражениями в KasperskyOS. Программа Client ищет все вхождения требуемого слова в заданном текстовом фрагменте и подсчитывает количество этих вхождений. Подробнее см. "Пример pcre".

Да

Да

Да

iperf_separate_vfs

Демонстрирует использование библиотеки iperf для тестирования производительности сети. Программа Server настраивает сетевой интерфейс, создает и запускает тест производительности сети с использованием библиотеки iperf. Подробнее см. "Пример iperf_separate_vfs".

Да

Да

Да

messagebus

Демонстрирует использование компонента MessageBus в KasperskyOS. В этом примере программа-издатель Publisher, программы-подписчики SubscriberA и SubscriberB используют компонент MessageBus для обмена сообщениями через IPC. Подробнее см. "Пример messagebus".

Да

Да

Да

pal_tests

Демонстрирует использование PAL (Policy Assertion Language) при написании тестов политики безопасности решения на базе KasperskyOS. Тесты проверяют политику безопасности решения до начала разработки программного кода, основываясь на формальных спецификациях компонентов решения. Подробнее см. "Пример pal_tests".

Да

Да

Да

В таблице ниже представлены примеры использования паттернов безопасности в KasperskyOS.

Использование паттернов безопасности в решениях

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

Краткое описание примера

Запуск на QEMU

Запуск на Raspberry Pi 4 B

Запуск на Radxa ROCK 3A

secure_logger

Демонстрирует использование паттерна Distrustful Decomposition для решения задачи разделения чтения и записи в журнал событий. Программа Application формирует сообщение и передает его через IPC программе Logger. Программа Logger принимает сообщение и записывает его в журнал событий, расположенный на диске. Программа Reader читает сообщение из журнала событий и передает его через IPC программе LogViewer. Программа LogViewer выводит сообщение в стандартный вывод. Подробнее см. "Пример secure_logger".

Да

Да

Да

separate_storage

Демонстрирует использование паттерна Distrustful Decomposition для решения задачи раздельного хранения данных для доверенных и недоверенных программ. Пример содержит две программы: UserManager и CertificateManager. Каждая из этих программ использует собственный экземпляр программы VFS для доступа к отдельной файловой системе. При этом каждый экземпляр программы VFS включает в себя драйвер блочного устройства, связанный с отдельным логическим разделом диска. Программа UserManager не имеет доступа к файловой системе программы CertificateManager и наоборот. Подробнее см. "Пример separate_storage".

Да

Да

Да

defer_to_kernel

Демонстрирует использование паттернов Defer to Kernel и Policy Decision Point: гарантия изоляции запущенных программ (процессов) ядром KasperskyOS. В этом примере программы ValidPictureClient и NonValidPictureClient обращаются к программе PictureManager для получения информации. Но только программе ValidPictureClient разрешено взаимодействие с программой PictureManager. Подробнее см. "Пример defer_to_kernel".

Да

Да

Да

device_access

Демонстрирует использование паттерна Privilege Separation, при котором авторизация и доступ к данным обеспечиваются разными программами. Программа Device обращается к программе Storage для получения информации и к программе LoginManager для авторизации. Программа Device может обращаться к программе Storage только после успешной авторизации в программе LoginManager. Подробнее см. "Пример device_access".

Да

Да

Да

secure_login

Демонстрирует использование паттерна Information Obscurity: возможность передачи критической для системы информации через недоверенную среду. Веб-сервер Civetweb взаимодействует с браузером, обслуживая запросы на аутентификацию, при этом передача данных между браузером и сервером осуществляется через TLS-терминатор для шифрования трафика. Программа AuthService генерирует криптографические ключи для шифрования паролей по алгоритму Диффи-Хеллмана. Подробнее см. "Пример secure_login".

Да

Да

Да