Содержание
- Примеры в KasperskyOS Community Edition
- Пример hello
- Пример echo
- Пример ping
- Пример net_with_separate_vfs
- Пример net2_with_separate_vfs
- Пример embedded_vfs
- Пример vfs_extfs
- Пример multi_vfs_ntpd
- Пример multi_vfs_dns_client
- Пример multi_vfs_dhcpcd
- Пример mqtt_publisher (Mosquitto)
- Пример mqtt_subscriber (Mosquitto)
- Пример gpio_input
- Пример gpio_output
- Пример gpio_interrupt
- Пример gpio_echo
- Пример koslogger
- Пример pcre
- Пример messagebus
- Пример i2c_ds1307_rtc
- Пример i2c_bm8563_rtc
- Пример iperf_separate_vfs
- Пример uart
- Пример spi_check_regs
- Пример barcode_scanner
- Пример watchdog_system_reset
- Пример shared_libs
- Пример pal_tests
- Пример hello_from_rust
- Пример hello_corrosion
- Пример mass_storage
- Пример can_loopback
- Пример can2can
- Пример adc_hello
Примеры в 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 |
Демонстрирует самое простое решение. Программа |
Да |
Да |
Да |
echo |
Демонстрирует взаимодействие программ через IPC. Программа |
Да |
Да |
Да |
ping |
Демонстрирует использование политики безопасности решения для управления IPC-взаимодействием между программами. Программа |
Да |
Да |
Да |
hello_from_rust |
Демонстрирует, как включить в решение простую программу, разработанную на языке Rust и собранную с использованием системы сборки и менеджера пакетов Cargo. Программа |
Да |
Да |
Да |
hello_corrosion |
Демонстрирует, как включить в решение простую программу, разработанную на языке Rust, с использованием Corrosion – набора библиотек для интеграции Rust в CMake-проекты. Программа |
Да |
Да |
Да |
В таблице ниже приведено описание примеров, демонстрирующих использование файловых систем и сетевого стека.
Использование файловых систем и сетевого стека в решениях
Директория примера в SDK |
Краткое описание примера |
Запуск на QEMU |
Запуск на Raspberry Pi 4 B |
Запуск на Radxa ROCK 3A |
---|---|---|---|---|
embedded_vfs |
Демонстрирует, как включить в решение системную программу, реализующую файловые системы и сетевой стек. Программа |
Да |
Да |
Да |
net_with_separate_vfs |
Демонстрирует установку соединения между запущенными в KasperskyOS программами через TCP-сокеты с использованием loopback-интерфейса. Программа |
Да |
Да |
Да |
net2_with_separate_vfs |
Демонстрирует установку соединения через TCP-сокеты между программой-клиентом, запущенной в KasperskyOS, и программой-сервером, запущенной в хостовой операционной системе. Программа |
Да |
Да |
Да |
vfs_extfs |
Демонстрирует, как монтировать файловые системы (ext2, ext3, ext4) блочного устройства. Программа |
Да |
Да |
Да |
multi_vfs_ntpd |
Демонстрирует поддержку сетевого протокола NTP (Network Time Protocol). Программа |
Да |
Да |
Да |
multi_vfs_dns_client |
Демонстрирует использование системы разрешения доменных имен DNS (Domain Name System) в KasperskyOS. Программа |
Да |
Да |
Да |
multi_vfs_dhcpcd |
Демонстрирует поддержку сетевого протокола DHCP (Dynamic Host Configuration Protocol) в KasperskyOS. Программа |
Да |
Да |
Да |
mqtt_publisher |
Демонстрирует поддержку протокола обмена сообщениями MQTT (Message Queue Telemetry Transport) в KasperskyOS. Программа |
Да |
Да |
Да |
mqtt_subscriber |
Демонстрирует поддержку протокола обмена сообщениями MQTT (Message Queue Telemetry Transport) в KasperskyOS. Программа |
Да |
Да |
Да |
В таблице ниже приведено описание примеров использования драйверов, поставляемых в составе 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-пины. Программа |
Нет |
Да |
Да |
gpio_output |
Демонстрирует использование драйвера GPIO для вывода через GPIO-пины. Программа |
Нет |
Да |
Да |
gpio_interrupt |
Демонстрирует использование драйвера GPIO для проверки работы прерываний для GPIO-пинов. Программа |
Нет |
Да |
Да |
gpio_echo |
Демонстрирует использование драйвера GPIO для проверки функциональности ввода/вывода GPIO-пинов, а также работу прерываний для GPIO пинов. Программа |
Нет |
Да |
Да |
i2c_ds1307_rtc |
Демонстрирует использование драйвера I2C (Inter-Integrated Circuit) на аппаратной платформе Raspberry PI 4 B. Программа |
Нет |
Да |
Нет |
i2c_bm8563_rtc
|
Демонстрирует использование драйвера I2C (Inter-Integrated Circuit) на аппаратной платформе Radxa ROCK 3A. Программа |
Нет |
Нет |
Да |
uart |
Демонстрирует использование драйвера UART (Universal Asynchronous Receiver-Transmitter). Программа |
Да |
Да |
Да |
spi_check_regs |
Демонстрирует использование драйвера SPI (Serial Peripheral Interface). Программа |
Нет |
Да |
Да |
barcode_scanner |
Демонстрирует использование драйвера USB (Universal Serial Bus) с помощью библиотеки |
Нет |
Да |
Да |
watchdog_system_reset |
Демонстрирует использование драйвера Watchdog для мониторинга состояния KasperskyOS и автоматического перезапуска Raspberry Pi 4 B. Программа |
Нет |
Да |
Нет |
mass_storage |
Демонстрирует использование драйвера UsbMassStorage для работы с внешними USB-накопителем, подключенным к USB-порту Raspberry Pi 4 B. Программа |
Нет |
Да |
Да |
can_loopback |
Демонстрирует использование драйвера CAN на аппаратной платформе Radxa ROCK 3A, когда нет необходимости подключать дополнительную периферию в виде CAN-трансиверов. В примере производится настройка CAN-порта, после чего происходит отправка CAN-пакета. Полученный CAN-пакет проверяется на соответствие отправленному CAN-пакету. Подробнее см. "Пример can_loopback". |
Нет |
Нет |
Да |
can2can |
Демонстрирует использование драйвера CAN на аппаратной платформе Radxa ROCK 3A для пересылки сообщения между двумя CAN-интерфейсами. В отличие от примера can_loopback, где используется только один CAN-интерфейс и нет необходимости в дополнительном оборудовании, этот пример требует наличия двух CAN-трансиверов подключенных к линиям |
Нет |
Нет |
Да |
adc_hello |
Демонстрирует использование драйвера Sensors для проверки функциональности АЦП на аппаратной платформе Radxa ROCK 3A. Программа |
Нет |
Нет |
Да |
В таблице ниже представлены примеры использования поставляемых в составе KasperskyOS Community Edition библиотек для выполнения различных функций, таких как журналирование, применение регулярных выражений, обмен сообщениями через IPC и тестирование производительности.
Использование библиотек в решениях
Директория примера в SDK |
Краткое описание примера |
Запуск на QEMU |
Запуск на Raspberry Pi 4 B |
Запуск на Radxa ROCK 3A |
---|---|---|---|---|
shared_libs |
Демонстрирует использование динамических и статических библиотек в KasperskyOS. Программа |
Да |
Да |
Да |
koslogger |
Демонстрирует использование библиотеки журналирования |
Да |
Да |
Да |
pcre |
Демонстрирует использование библиотеки |
Да |
Да |
Да |
iperf_separate_vfs |
Демонстрирует использование библиотеки |
Да |
Да |
Да |
messagebus |
Демонстрирует использование компонента |
Да |
Да |
Да |
pal_tests |
Демонстрирует использование PAL (Policy Assertion Language) при написании тестов политики безопасности решения на базе KasperskyOS. Тесты проверяют политику безопасности решения до начала разработки программного кода, основываясь на формальных спецификациях компонентов решения. Подробнее см. "Пример pal_tests". |
Да |
Да |
Да |
В таблице ниже представлены примеры использования паттернов безопасности в KasperskyOS.
Использование паттернов безопасности в решениях
Директория примера в SDK |
Краткое описание примера |
Запуск на QEMU |
Запуск на Raspberry Pi 4 B |
Запуск на Radxa ROCK 3A |
---|---|---|---|---|
secure_logger |
Демонстрирует использование паттерна Distrustful Decomposition для решения задачи разделения чтения и записи в журнал событий. Программа |
Да |
Да |
Да |
separate_storage |
Демонстрирует использование паттерна Distrustful Decomposition для решения задачи раздельного хранения данных для доверенных и недоверенных программ. Пример содержит две программы: |
Да |
Да |
Да |
defer_to_kernel |
Демонстрирует использование паттернов Defer to Kernel и Policy Decision Point: гарантия изоляции запущенных программ (процессов) ядром KasperskyOS. В этом примере программы |
Да |
Да |
Да |
device_access |
Демонстрирует использование паттерна Privilege Separation, при котором авторизация и доступ к данным обеспечиваются разными программами. Программа |
Да |
Да |
Да |
secure_login |
Демонстрирует использование паттерна Information Obscurity: возможность передачи критической для системы информации через недоверенную среду. Веб-сервер |
Да |
Да |
Да |
Пример hello
Код hello.c
выглядит привычным и простым для разработчика на языке C – он полностью совместим с POSIX:
hello.c
Скомпилируйте этот код с использованием aarch64-kos-clang
(входит в состав средств разработки KasperskyOS Community Edition):
Имя программы (а значит и имя исполняемого файла) должно начинаться с заглавной буквы.
EDL-описание класса процессов Hello
Статическое описание программы Hello
состоит из единственного файла Hello.edl
, в котором необходимо прописать имя класса процессов:
Hello.edl
Имя класса процессов должно начинаться с заглавной буквы. Имя EDL-файла должно совпадать с именем класса, который он описывает.
Создание инициализирующей программы Einit
При загрузке KasperskyOS ядро запускает программу с именем Einit
. Программа Einit
запускает все остальные программы, входящие в решение, то есть служит инициализирующей программой.
В составе пакета инструментов KasperskyOS Community Edition поставляется утилита einit, которая позволяет сгенерировать код инициализирующей программы (einit.c
) на основе init-описания. В приведенном ниже примере файл с init-описанием называется init.yaml
, хотя может иметь любое имя.
Подробнее см. "Запуск процессов".
Для того чтобы программа Hello
запустилась после загрузки операционной системы, достаточно указать ее имя в файле init.yaml
и собрать на его основе программу Einit
.
init.yaml
Сборка модуля безопасности
Пример hello содержит простейшую политику безопасности решения (security.psl
), разрешающую любые взаимодействия.
Модуль безопасности (ksm.module
) собирается на основе security.psl
.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
Общая схема сборки примера hello выглядит следующим образом:
Пример echo
Пример echo демонстрирует использование IPC-транспорта.
Показана работа с основными инструментами, позволяющими реализовать взаимодействие между программами.
Пример echo описывает простейший случай взаимодействия двух программ:
- Программа
Client
передает программеServer
число (value
). - Программа
Server
изменяет это число и передает новое число (result
) программеClient
. - Программа
Client
выводит числоresult
на экран.
Чтобы организовать такое взаимодействие программ, потребуется:
- Соединить программы
Client
иServer
, используя init-описание. - Реализовать на сервере интерфейс с единственным методом
Ping
, который имеет один входной аргумент – исходное число (value
) и один выходной аргумент – измененное число (result
).Описание метода
Ping
на языке IDL:Ping(in UInt32 value, out UInt32 result); - Создать файлы статических описаний на языках EDL, CDL и IDL. С помощью компилятора NK сгенерировать файлы, содержащие транспортные методы и типы (прокси-объект, диспетчеры и т.д.).
- В коде программы
Client
инициализировать все необходимые объекты (транспорт, прокси-объект, структуру запроса и др.) и вызвать интерфейсный метод. - В коде программы
Server
подготовить все необходимые объекты (транспорт, диспетчер компонента и диспетчер программы и др.), принять запрос от клиента, обработать его и отправить ответ.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Пример echo состоит из следующих исходных файлов:
client/src/client.c
– реализация программыClient
;server/src/server.c
– реализация программыServer
;resources/Server.edl
,resources/Client.edl
,resources/Responder.cdl
,resources/Pingable.idl
– статические описания;init.yaml
– init-описание.
Сборка и запуск примера
См. "Сборка и запуск примеров".
Схема сборки примера echo выглядит следующим образом:
Пример ping
Пример ping демонстрирует использование политики безопасности решения для управления взаимодействиями между программами.
Пример ping включает в себя четыре программы: Client
, Server
, KlogEntity
и KlogStorageEntity
.
Программа Server
предоставляет два идентичных метода Ping
и Pong
, которые получают число и возвращают измененное число:
Программа Client
вызывает оба этих метода в различной последовательности. Если вызов метода запрещен политикой безопасности решения, выводится сообщение о неудачной попытке вызова.
Системные программы KlogEntity
, KlogStorageEntity
выполняют аудит безопасности.
Транспортная часть примера ping практически аналогична таковой для примера echo. Единственное отличие состоит в том, что в примере ping используется два метода (Ping
и Pong
), а не один.
Политика безопасности решения в примере ping
Политика безопасности решения в этом примере разрешает запуск ядра KasperskyOS и программы Einit, которой разрешено запускать все программы в решении. Обращениями к программе Server
управляют методы модели безопасности Flow.
Конечный автомат, описанный в конфигурации объекта request_state
модели безопасности Flow, имеет два состояния: not_sent
и sent
. Исходное состояние – not_sent
. Разрешены только переходы из not_sent
в sent
и обратно.
При вызове методов Ping
и Pong
проверяется текущее состояние объекта request_state
. В состоянии not_sent
разрешен только вызов Ping
, при этом состояние изменится на sent
. Аналогично, в состоянии sent
разрешен только вызов Pong
, при этом состояние изменится на not_sent
.
Таким образом, методы Ping
и Pong
разрешено вызывать только по очереди.
Фрагмент файла security.psl
Описание политики безопасности в примере ping также содержит секцию тестов политики безопасности решения.
Пример такой политики см. в секции "Пример 2" раздела "Примеры тестов политик безопасности решений на базе KasperskyOS".
Полное описание политики безопасности примера ping находится в файлах security.psl.in
и core.psl
по следующему пути: /opt/KasperskyOS-Community-Edition-<version>/examples/ping/einit/src
.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример net_with_separate_vfs
Пример представляет собой простейший случай взаимодействия по сети с использованием сокетов Беркли.
Пример состоит из программ Client
и Server
, связанных TCP-сокетом с использованием loopback-интерфейса. В коде программ используются стандартные POSIX-функции.
Чтобы соединить программы сокетом через loopback, они должны использовать один экземпляр сетевого стека, то есть взаимодействовать с "общей" программой VFS (в этом примере программа называется VfsNet
).
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример net2_with_separate_vfs
Пример демонстрирует особенности решения, в котором программа использует стандартные функции POSIX для взаимодействия с внешним сервером.
Пример net2_with_separate_vfs
является видоизмененным примером net_with_separate_vfs
. В отличие от примера net_with_separate_vfs
, в этом примере программа взаимодействует по сети не с другой программой, запущенной в KasperskyOS, а с внешним сервером.
Пример состоит из программы Client
, запущенной в KasperskyOS под QEMU или на Raspberry Pi, и программы Server
, запущенной в хостовой операционной системе Linux. Программа Client
и программа Server
связаны TCP-сокетом. В коде программы Client
используются стандартные функции POSIX.
Чтобы соединить программы Client
и Server
сокетом, программа Client
должна взаимодействовать с программой VfsNet
. Программа VfsNet
при сборке компонуется с сетевым драйвером, который обеспечит взаимодействие с программой Server
, запущенной в Linux.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
IP-адрес программы Server
задан в файле ./CMakeList.txt
переменной SERVER_IP
и имеет значение по умолчанию 10.0.2.2
. Значения по умолчанию для программы Client
(имя интерфейса, адрес, сетевая маска и адрес шлюза) взяты из файла /opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos/include/kos_net.h
. Вы можете изменить эти значения в соответствии с конфигурацией вашей сети в файле client/src/client.c
, расположенном в директории примера.
Сборка и запуск примера
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition. См. "Сборка и запуск примеров".
Для корректной работы примера необходимо запустить программу Server
в хостовой операционной системе Linux или на компьютере, подключенном к Raspberry Pi.
Если пример запускается в QEMU, то программа Server
будет собрана и запущена в хостовой операционной системе Linux автоматически скриптом cross-build.sh
. После выполнения сборки, исполняемый файл server
программы Server
находится в следующей директории:
Если пример запускается на Raspberry Pi, то необходимо собрать исполняемый файл программы Server
самостоятельно, выполнив следующие команды:
Пример embedded_vfs
Пример показывает, как встроить виртуальную файловую систему (далее VFS), поставляемую в составе KasperskyOS Community Edition, в разрабатываемую программу.
В этом примере программа Client
полностью инкапсулирует реализацию VFS из KasperskyOS Community Edition. Это позволяет избавиться от использования IPC для всех стандартных функций ввода-вывода (stdio.h
, socket.h
и так далее), например, для отладки или повышения производительности.
Программа Client
тестирует следующие операции:
- создание директории;
- создание и удаление файла;
- чтение из файла и запись в файл.
Поставляемые ресурсы
Для QEMU в пример входит образ жесткого диска с файловой системой FAT32 – hdd.img
.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример vfs_extfs
Пример демонстрирует, как монтировать файловые системы блочного устройства.
Программа FileVfs
реализует серверную часть виртуальной файловой системы, предоставляя интерфейс для взаимодействия с файловыми системами и блочными устройствами. Программа Client
отправляет запросы через IPC программе FileVfs
, чтобы смонтировать файловые системы (ext2
, ext3
, ext4
) в указанные директории, и выполнить базовые операции с файлами (создание, запись, чтение и удаление) для проверки корректности монтирования файловых систем.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
Подготовка SD-карты для запуска на Raspberry Pi 4 B
Для запуска примера vfs_extfs
на Raspberry Pi 4 B необходимо, чтобы SD-карта, помимо загрузочного раздела с образом решения, также содержала 3 дополнительных раздела с файловыми системами ext2
, ext3
и ext4
соответственно.
Пример multi_vfs_ntpd
Пример демонстрирует поддержку сетевого протокола NTP (Network Time Protocol) для синхронизации системного времени в KasperskyOS.
Директория примера в SDK
Код примера и скрипты для сборки находятся по следующему пути:
Список программ
Client
– прикладная программа, изменяющая текущее системное время.Ntpd
– системная программа, реализующая NTP-клиент, который синхронизирует системное время с NTP-серверами.Dhcpcd
– системная программа, реализующая DHCP-клиент.VfsSdCardFs
– системная программа, поддерживающая файловую систему SD-карт.VfsNet
– системная программа, поддерживающая сетевые протоколы.EntropyEntity
– системная программа, реализующая генератор случайных чисел.DNetSrv
– драйвер сетевой карты.SDCard
– драйвер SD-карты.BSP
– драйвер для настройки параметров мультиплексирования пинов (pinmux).Bcm2711MboxArmToVc
– драйвер для работы с сопроцессором VideoCore (VC6) через технологию mailbox для Raspberry Pi 4 B.
Описание инициализации
Файл описания инициализации решения init.yaml
генерируется в процессе сборки решения на основе шаблона:
./einit/src/init.yaml.in
Макрос @INIT_Client_ENTITY_CONNECTIONS+@
в шаблоне init.yaml.in
при сборке примера заменяется в файле init.yaml
на список IPC-каналов со всеми системными программами, с которыми скомпонована программа Client.
Этот список дополняет вручную заданные IPC-каналы в шаблоне init.yaml.in
.
Макрос @INIT_FileVfs_ENTITY_CONNECTIONS@
при сборке примера заменяется в файле init.yaml
на список IPC-каналов со всеми системными программами, с которыми скомпонована программа FileVfs
.
Макрос @INIT_EXTERNAL_ENTITIES@
в шаблоне init.yaml.in
при сборке заменяется в файле init.yaml
на список системных программ, с которыми скомпонованы прикладные программы. Этот список содержит IPC-каналы системных программ, параметры запуска функции main()
и значения переменных окружения.
Подробнее см. "Шаблон init.yaml.in".
Описание политики безопасности
Файл security.psl
содержит описание политики безопасности решения и генерируется в процессе сборки решения на основе шаблона:
./einit/src/security.psl.in
Ресурсы
- В директории
./resources/edl
расположен файл формальной спецификации компонента решения на базе KasperskyOSClient.edl
. - В директории
./resources/hdd/etc
расположены файлы конфигурации для программVfsNet
,Dhcpcd
иNtpd
:hosts
,dhcpcd.conf
иntp.conf
соответственно.
Сценарий работы
Программа Client
изменяет текущее системное время на время, указанное в макросе. После синхронизации времени программой Ntpd
ожидается, что год в полученном системном времени будет отличаться от года, установленного ранее макросом.
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример multi_vfs_dns_client
Этот пример показывает как использовать внешний dns-сервис в KasperskyOS.
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении:
- для работы с сетью используется программа
VfsNet
; - для работы с файловой системой используется программа
VfsSdCardFs
.
Программа Client
использует стандартные функции библиотеки libc
для обращения ко внешнему dns-сервису, которые транслируются в обращения к программе VfsNet
по IPC.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Поставляемые ресурсы
- В директории
./resources/edl
расположен файлClient.edl
, который содержит статическое описание программыClient
. - В директории
./resources/hdd/etc
расположены файлы конфигурации для программVfsNet
иDhcpcd
:hosts
иdhcpcd.conf
соответственно.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример multi_vfs_dhcpcd
Пример использования программы kl.rump.Dhcpcd
.
Программа Dhcpcd
представляет собой реализацию DHCP-клиента, который в фоновом режиме получает параметры сетевых интерфейсов от внешнего DHCP-сервера и передает их виртуальной файловой системе (далее VFS).
Пример также демонстрирует использование разных VFS в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:
- Для работы с сетью используется программа
VfsNet
. - Для работы с файловой системой используется программа
VfsSdCardFs
.
Программа Client
использует стандартные функции библиотеки libc
для получения информации о сетевых интерфейсах (ioctl
), которые транслируются в обращения к VFS по IPC.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Поставляемые ресурсы
Директория ./resources/hdd/etc
содержит файлы конфигурации для программ VFS и Dhcpcd
. Для конфигурации программы Dhcpcd
используется стандартный синтаксис dhcpcd.conf
.
В корневом файле CMakeLists.txt
задаются значения переменных, которые определяют выбор файла конфигурации:
DHCPCD_FALLBACK
Динамическое получение параметров сетевых интерфейсов от внешнего DHCP-сервера с переходом на статическое задание параметров в случае недоступности DHCP-сервера. Значение используется по умолчанию.
DHCPCD_DYNAMIC
Динамическое получение параметров сетевых интерфейсов от внешнего DHCP-сервера.
DHCPCD_STATIC
Статическое задание параметров сетевых интерфейсов.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример mqtt_publisher (Mosquitto)
Пример использования протокола MQTT в KasperskyOS.
В этом примере MQTT-подписчик должен быть запущен в хостовой операционной системе, а MQTT-издатель в KasperskyOS. Программа Publisher
представляет собой реализацию MQTT-издателя, который публикует текущее время с интервалом 5 секунд.
В результате успешного запуска и работы примера MQTT-подписчик, запущенный в хостовой операционной системе, выведет сообщение "received PUBLISH"
с топиком "datetime"
.
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении:
- для работы с сетью используется программа
VfsNet
; - для работы с файловой системой используется программа
VfsSdCardFs
.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Запуск Mosquitto
Для запуска этого примера MQTT брокер Mosquitto должен быть установлен и запущен в хостовой системе. Для установки и запуска Mosquitto выполните следующие команды:
Для запуска MQTT-подписчика в хостовой системе выполните следующую команду:
Поставляемые ресурсы
- В директории
./resources/edl
расположен файлPublisher.edl
, который содержит статическое описание программыPublisher
. - В директории
./resources/hdd/etc
расположены файлы конфигурации для программVfsNet
,Dhcpcd
иNtpd
:hosts
,dhcpcd.conf
иntp.conf
соответственно.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример mqtt_subscriber (Mosquitto)
Пример использования протокола MQTT в KasperskyOS.
В этом примере MQTT-издатель должен быть запущен в хостовой операционной системе, а MQTT-подписчик в KasperskyOS. Программа Subscriber
представляет собой реализацию MQTT-подписчика.
В результате успешного запуска и работы примера MQTT-подписчик, запущенный в KasperskyOS, выведет сообщение "Got message with topic: my/awesome/topic, payload: hello"
.
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении:
- для работы с сетью используется программа
VfsNet
; - для работы с файловой системой используется программа
VfsSdCardFs
.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Запуск Mosquitto
Для запуска этого примера MQTT брокер Mosquitto должен быть установлен и запущен в хостовой системе. Для установки и запуска Mosquitto выполните следующие команды:
Для запуска MQTT-издателя в хостовой системе выполните следующую команду:
Поставляемые ресурсы
- В директории
./resources/edl
расположен файлSubscriber.edl
, который содержит статическое описание программыSubscriber
. - В директории
./resources/hdd/etc
расположены файлы конфигурации для программVfsNet
,Dhcpcd
иNtpd
:hosts
,dhcpcd.conf
иntp.conf
соответственно.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример gpio_input
Пример использования драйвера GPIO.
Этот пример позволяет проверить функциональность ввода GPIO пинов. Общее количество пинов на плате задается макросом GPIO_PIN_NUM
. Все пины, кроме указанных в массиве ExceptionPinArr
, по умолчанию ориентированы на ввод, напряжение на пинах согласуется с состоянием регистров подтягивающих резисторов. Состояния всех пинов будут последовательно считаны, сообщения о состояниях пинов будут выведены в консоль. Задержка между считываниями смежных пинов определяется макросом DELAY_S
(время указывается в секундах).
ExceptionPinArr
- массив номеров GPIO пинов, которые необходимо исключить из примера. Это может понадобиться в случае, если часть пинов уже задействована для других функций, например, если пины используются для UART соединения при отладке.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера GPIO для QEMU нет.
При сборке и запуске этого примера на аппаратных платформах Raspberry Pi 4 или Radxa ROCK 3a ошибка не возникает.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример gpio_output
Пример использования драйвера GPIO.
Этот пример позволяет проверить функциональность вывода GPIO пинов. Общее количество пинов на плате задается макросом GPIO_PIN_NUM
. Все пины, кроме указанных в массиве ExceptionPinArr
, будут настроены на вывод. Каждый пин будет последовательно переведен в состояние логической единицы (появление на пине напряжения), а затем в состояние логического нуля. Задержка между изменениями состояния пинов задается макросом DELAY_S
(время указывается в секундах).
ExceptionPinArr
– массив номеров GPIO пинов, которые необходимо исключить из примера. Это может понадобиться в случае, если часть пинов уже задействована для других функций, например, если пины используются для UART соединения при отладке.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера GPIO для QEMU нет.
При сборке и запуске этого примера на аппаратных платформах Raspberry Pi 4 или Radxa ROCK 3a ошибка не возникает.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример gpio_interrupt
Пример использования драйвера GPIO.
Этот пример позволяет проверить функциональность прерываний для GPIO пинов. Общее количество пинов на плате задается макросом GPIO_PIN_NUM
. В битовой маске pinsBitmap
пины из массива ExceptionPinArr
помечаются отработавшими, чтобы в дальнейшем пример мог корректно завершиться. Все пины, кроме указанных в массиве ExceptionPinArr
, переводятся в состояние PINS_MODE
. Для всех пинов, кроме указанных в массиве ExceptionPinArr
, будет зарегистрирована функция обработки прерывания.
В бесконечном цикле происходит проверка условия равенства битовой маски pinsBitmap
битовой маске окончания работы примера DONE_BITMASK
(соответствует условию, когда прерывание произошло на каждом GPIO пине). Далее в этом цикле вызывается функция обработчик прерывания. Если прерывание происходит впервые на пине, который не указан в массиве ExceptionPinArr
, функция обработки прерывания получает это событие с помощью функции GpioGetEvent
. Соответствующий пин в битовой маске pinsBitmap
помечается отработавшим. Обнаружение прерываний на этом пине отключается вызовом функции GpioReleaseMode
.
Следует учитывать возможное влияние начального состояния регистров подтягивающих резисторов для каждого пина на работу примера.
На некоторых пинах GPIO могут также присутствовать внешние подтягивающие резисторы (например, в ревизиях 1.4, 1.5 платформы Raspberry Pi 4 B они есть на пинах GPIO2 и GPIO3). При наличии таких резисторов, более слабые внутренние резисторы не позволят притянуть такие пины к 0.
Прерывания для событий GPIO_EVENT_LOW_LEVEL
и GPIO_EVENT_HIGH_LEVEL
не поддерживаются.
ExceptionPinArr
– массив номеров GPIO пинов, которые необходимо исключить из примера. Это может понадобиться в случае, если часть пинов уже задействована для других функций, например, если пины используются для UART соединения при отладке.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера GPIO для QEMU нет.
При сборке и запуске этого примера на аппаратных платформах Raspberry Pi 4 или Radxa ROCK 3a ошибка не возникает.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример gpio_echo
Пример использования драйвера GPIO.
Этот пример позволяет проверить функциональность ввода/вывода GPIO пинов, а также работу GPIO прерываний. При проверке используется порт gpio0
. Пин вывода (номер пина задается в макросе GPIO_PIN_OUT
) следует соединить с пином ввода (GPIO_PIN_IN
). Устанавливается конфигурация для пина вывода (GPIO_PIN_OUT
), а также для пина ввода (GPIO_PIN_IN
). Конфигурация пина ввода указана в макросе IN_MODE
. Регистрируется обработчик прерываний для пина ввода. Несколько раз изменяется состояние пина вывода. В случае корректной работы примера, при изменении состояния пина вывода должен вызываться обработчик прерываний, который выводит состояние пина ввода, при этом состояния пина вывода и пина ввода должны совпадать.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера GPIO для QEMU нет.
При сборке и запуске этого примера на аппаратных платформах Raspberry Pi 4 или Radxa ROCK 3a ошибка не возникает.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример koslogger
Пример демонстрирует использование библиотеки spdlog
в KasperskyOS с помощью библиотеки-обертки KOSLogger
.
В этом примере программа Client
создает записи журнала, которые сохраняются на SD-карте (в случае запуска примера на Raspberry Pi) или в файле образа build/einit/sdcard0.img
(при запуске примера на QEMU).
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:
- Для работы с сетью используется программа
VfsNet
. - Для работы с файловой системой используется программа
VfsSdCardFs
.
Программа kl.Ntpd
поставляется в составе KasperskyOS Community Edition и представляет собой реализацию ntp-клиента, который в фоновом режиме получает параметры времени от внешних ntp-серверов и передает их ядру KasperskyOS.
Программа kl.rump.Dhcpcd
поставляется в составе KasperskyOS Community Edition и представляет собой реализацию DHCP-клиента, который в фоновом режиме получает параметры сетевых интерфейсов от внешнего DHCP-сервера и передает их виртуальной файловой системе.
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
Для корректной работы примера koslogger
на Raspberry Pi после сборки примера и подготовки загрузочной SD-карты требуется выполнить следующие действия:
- создать директорию
/lib
на загрузочной SD-карте, если этой директории не существует; - скопировать в директорию
/lib
на загрузочной SD-карте содержимое директорииbuild/hdd/lib
, которая генерируется во время сборки примера.
Пример pcre
Пример демонстрирует использование библиотеки pcre
в KasperskyOS.
В этом примере программа Client
использует библиотеку pcre
и выводит результаты в консоль.
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
Для корректной работы примера pcre
на Raspberry Pi после сборки примера и подготовки загрузочной SD-карты требуется выполнить следующие действия:
- создать директорию
/lib
на загрузочной SD-карте, если этой директории не существует; - скопировать в директорию
/lib
на загрузочной SD-карте содержимое директорииbuild/hdd/lib
, которая генерируется во время сборки примера.
Пример messagebus
Пример демонстрирует использование компонента MessageBus в KasperskyOS.
В этом примере программы Publisher
, SubscriberA
и SubscriberB
используют компонент MessageBus
для обмена сообщениями:
Пример использования компонента MessageBus в решении на базе KasperskyOS
Компонент MessageBus
реализует шину сообщений, которая обеспечивает прием, распределение и доставку сообщений между программами. Использование шины сообщений в решениях на базе KasperskyOS позволяет, например, легко масштабировать рассылку сообщений для большего количества подписчиков. Шина сообщений может обрабатывать большие объемы сообщений и распределять их эффективно между получателями.
Уровень журналирования для компонента MessageBus
устанавливается переменной окружения LOG_LEVEL
, которая задана в файле ./einit/CMakeLists.txt
. Для этой переменной допустимы следующие значения:
- LOG_TRACE
- LOG_DEBUG
- LOG_INFO (значение по умолчанию)
- LOG_WARNING
- LOG_ERROR
- LOG_CRITICAL
- LOG_OFF
Программа Publisher
является издателем и передает сообщения в шину:
- Для получения интерфейса регистрации издателя в шине сообщений используется метод
IProviderFactory::CreateBusControl()
. - Для получения интерфейса, содержащего методы для отправки издателем сообщений в шину, используется метод
IProviderFactory::CreateBus()
. - Для регистрации издателя в шине сообщений используется метод
IProviderControl::RegisterPublisher()
. - Для оправки сообщений в шину используется метод
IProvider::Push()
. - Для дерегистрации издателя в шине сообщений используется метод
IProviderControl::UnregisterPublisher()
.
Программы SubscriberA
и SubscriberB
являются подписчиками и получают сообщения из шины:
- Для получения интерфейса регистрации подписчика в шине сообщений используется метод
IProviderFactory::CreateBusControl()
. - Для получения интерфейсов, содержащих методы для получения подписчиком сообщений из шины используется метод
IProviderFactory::CreateSubscriberRunner()
. - Для регистрации подписчика в шине сообщений используется метод
IProviderControl::RegisterSubscriber()
. - Чтобы перевести подписчика в режим ожидания сообщения от шины используется метод
ISubscriberRunner::Run()
. - При получении сообщения из шины вызывается метод
ISubscriber::OnMessage()
. - Для дерегистрации подписчика в шине сообщений используется метод
IProviderControl::UnregisterSubscriber()
.
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:
- Для работы с сетью используется программа
VfsNet
. - Для работы с файловой системой используется программа
VfsSdCardFs
.
Программа kl.Ntpd
поставляется в составе KasperskyOS Community Edition и представляет собой реализацию ntp-клиента, который в фоновом режиме получает параметры времени от внешних ntp-серверов и передает их ядру KasperskyOS.
Программа kl.rump.Dhcpcd
поставляется в составе KasperskyOS Community Edition и представляет собой реализацию DHCP-клиента, который в фоновом режиме получает параметры сетевых интерфейсов от внешнего DHCP-сервера и передает их виртуальной файловой системе.
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
Для корректной работы примера messagebus
на Raspberry Pi после сборки примера и подготовки загрузочной SD-карты требуется выполнить следующие действия:
- создать директорию
/lib
на загрузочной SD-карте, если этой директории не существует; - скопировать в директорию
/lib
на загрузочной SD-карте содержимое директорииbuild/hdd/lib
, которая генерируется во время сборки примера.
Пример i2c_ds1307_rtc
Пример демонстрирует использование драйвера i2c
(Inter-Integrated Circuit) в KasperskyOS.
В этом примере программа I2cClient
использует интерфейс драйвера i2c
.
Клиентская библиотека драйвера i2c
статически компонуется с программой I2cClient
. Реализация драйвера i2c
использует подсистему BSP (Board Support Platform) для настройки частоты тактирования (Clocks) и мультиплексирование сигналов (PinMux). Поэтому, для корректной работы драйвера нужно:
- скомпоновать программу
I2cClient
с клиентской библиотекойi2c_CLIENT_LIB
; - скомпоновать программу
I2cClient
с клиентской библиотекойbsp_CLIENT_LIB
; - создать IPC-канал между программой
I2cClient
и драйверомkl.drivers.I2C
; - создать IPC-канал между программой
I2cClient
и драйверомkl.drivers.BSP
.
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
Этот пример предназначен только для запуска на Raspberry Pi. Для корректной работы примера необходимо подключить к i2c порту модуль часов реального времени на микросхеме DS1307Z.
См. "Сборка и запуск примеров".
В началоПример i2c_bm8563_rtc
Пример демонстрирует использование драйвера i2c
(Inter-Integrated Circuit) в KasperskyOS.
В этом примере программа Bm8563
использует интерфейс драйвера i2c
.
Клиентская библиотека драйвера i2c
статически компонуется с программой Bm8563
. Реализация драйвера i2c
использует подсистему BSP (Board Support Platform) для настройки частоты тактирования (Clocks) и мультиплексирование сигналов (PinMux). Поэтому, для корректной работы драйвера нужно:
- скомпоновать программу
Bm8563
с клиентской библиотекойi2c_CLIENT_LIB
; - скомпоновать программу
Bm8563
с клиентской библиотекойbsp_CLIENT_LIB
; - создать IPC-канал между программой
Bm8563
и драйверомkl.drivers.I2C
; - создать IPC-канал между программой
Bm8563
и драйверомkl.drivers.BSP
.
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
Этот пример предназначен только для запуска на Radxa ROCK 3A.
См. "Сборка и запуск примеров".
В началоПример iperf_separate_vfs
Пример демонстрирует использование библиотеки iperf
в KasperskyOS.
В этом примере программа Server
использует библиотеку iperf
.
По умолчанию, в примере используется программная эмуляция (SLIRP) сети в QEMU. Если вы настроили TAP-интерфейсы для QEMU, то для корректной работы примера нужно изменить сетевые параметры запуска QEMU (переменная QEMU_FLAGS
) в файле einit/CMakeLists.txt
(подробнее см. комментарии в файле).
В примере не используется DHCP, поэтому IP-адрес сетевого интерфейса должен быть указан вручную в коде программы Server
(server/src/main.cpp
). SLIRP использует значения по умолчанию.
Библиотека iperf
в примере используется в режиме сервера. Чтобы подключиться к этому серверу, установите программу iperf3
на хостовой машине и запустите ее с помощью команды iperf3 -c localhost
. Если вы настроили TAP-интерфейсы, укажите актуальный IP-адрес вместо localhost
.
Первый запуск примера может занять продолжительное время, так как клиент iperf
использует энтропию /dev/urandom
для заполнения пакетов случайными данными. Чтобы избежать этого, запустите клиент iperf
с параметром --repeating-payload
.
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример uart
Пример использования драйвера UART.
Этот пример показывает, как вывести сообщение "Hello world!" в соответствующий порт, используя драйвер UART.
Полное описание интерфейса драйвера UART содержится в файле /opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include/uart/uart.h
.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример spi_check_regs
Пример демонстрирует использование драйвера SPI
(Serial Peripheral Interface) в KasperskyOS.
Пример показывает как работать с интерфейсом SPI на плате расширения Sense HAT для Raspberry Pi. В этом примере программа Client
использует интерфейс драйвера SPI
. Программа открывает SPI-канал, выводит его параметры и выставляет нужный режим работы. После этого программа посылает по каналу последовательность данных и ожидает получения идентификатора контроллера ATTiny, установленного на плате Sense HAT.
Клиентская библиотека драйвера SPI
статически компонуется с программой Client
. Программа Client
также использует драйвер gpio
для установки режима работы контроллера и подсистему BSP (Board Support Platform) для настройки частоты тактирования (Clocks) и мультиплексирование сигналов (PinMux).
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
Для корректной работы примера необходимо подключить к SPI порту модуль Sense HAT.
См. "Сборка и запуск примеров".
В началоПример barcode_scanner
Пример демонстрирует использование драйвера USB
(Universal Serial Bus) в KasperskyOS с помощью библиотеки libevdev
.
В этом примере программа BarcodeScanner
использует библиотеку libevdev
для взаимодействия со сканером штрихкодов, подключенным к USB порту Raspberry Pi.
Программа ожидает сигналов от сканера штрихкодов и выводит полученные данные в stderr
.
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
Для корректной работы примера необходимо подключить к USB порту сканер штрихкодов, работающий в режиме эмуляции клавиатуры (например Zebra Symbol LS2208).
См. "Сборка и запуск примеров".
В началоПример watchdog_system_reset
Пример демонстрирует использование драйвера Watchdog
в KasperskyOS.
В этом примере программа Client
использует интерфейс драйвера Watchdog
для взаимодействия со сторожевым таймером:
- получает текущие параметры драйвера
Watchdog
и выводит их вstderr
; - изменяет значение таймера по умолчанию на новое и запускает таймер;
- несколько раз сбрасывает таймер;
- ожидает перезагрузки системы при срабатывании таймера.
Клиентская библиотека драйвера Watchdog
статически компонуется с программой Client
.
Для сборки и запуска примера используется система CMake
из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
Этот пример предназначен только для запуска на Raspberry Pi.
См. "Сборка и запуск примеров".
В началоПример pal_tests
Пример демонстрирует использование PAL (Policy Assertion Language) при написании тестов политики безопасности решения на базе KasperskyOS. Тесты на языке PAL позволяют проверить политику безопасности решения еще до начала разработки программного кода, основываясь на формальных спецификациях компонентов решения. Подробнее о PAL см. "Создание и выполнение тестов политики безопасности решения на базе KasperskyOS".
Директория примера в SDK
Код примера и скрипты для сборки находятся по следующему пути:
Список программ
Тесты проверяют события безопасности следующих программ:
WebServer
– прикладная программа, предоставляющая пользователю доступ к программеService
через веб-интерфейс.Service
– прикладная программа, обрабатывающая запросы пользователя и возвращающая результат выполнения запроса.UserManager
– прикладная программа, реализующая управление учетными записями и авторизацией пользователей.
Описание инициализации
Файл init.yaml
генерируется автоматически в директории сборки примера и не важен для понимания этого примера.
Описание политики безопасности
Файлы описания политики безопасности решения на базе KasperskyOS находятся по следующему пути ./einit/src
.
Файл security.psl
содержит описание политики безопасности решения. Этот файл является файлом верхнего уровня, в который через декларацию use
включены части описания политики безопасности решения в виде PSL-файлов: core.psl
, user_mngr.psl
, service.psl
, vfs_net.psl
, vfs_sdcard.psl
.
Файл pal_tests.psl
содержит наборы тестов и также включен в файл верхнего уровня security.psl
через декларацию use
.
Ресурсы
В директориях ./resources/edl
и ./resources/idl
расположены EDL- и IDL-описания для программ WebServer
, Service
и UserManager
.
Сценарий работы
Запускаются на выполнение наборы тестов, описанных в файле pal_tests.psl
. Тесты проверяют, соблюдаются ли заданные политики безопасности для каждой из списка программ. Результаты выполнения тестов отображаются в стандартном выводе.
Сборка и запуск примера
См. "Создание и выполнение тестов политики безопасности решения на базе KasperskyOS".
В началоПример hello_from_rust
Пример демонстрирует, как включить в решение на базе KasperskyOS простую программу, разработанную на языке Rust и собранную с использованием системы сборки и менеджера пакетов Cargo.
Директория примера в SDK
Код примера и скрипты для сборки находятся по следующему пути:
Список программ
В состав решения входит прикладная программа Hello
, которая выводит сообщение в стандартный вывод ошибок. Эта программа разработана на языке Rust.
Описание инициализации
Файл описания инициализации решения init.yaml
генерируется в процессе сборки решения на основе шаблона:
./einit/src/init.yaml.in
Описание политики безопасности
Файл security.psl
содержит описание политики безопасности решения и генерируется в процессе сборки решения на основе шаблона:
./einit/src/security.psl.in
Макрос @INIT_EXTERNAL_ENTITIES@
в шаблоне security.psl.in
при сборке решения заменяется на список системных программ, поставляемых в составе KasperskyOS SDK. Подробнее см. "Шаблон security.psl.in".
Политика безопасности решения в этом примере разрешает любые взаимодействия процессов между собой и ядром. Такая политика безопасности решения используется чтобы упростить пример. В реальном решении применять такую политику недопустимо.
Ресурсы
В директории ./resources
содержится EDL-описание программы Hello
.
В директории ./vendor
содержатся библиотеки и их метаданные, которые необходимы для управления зависимостями в проектах на Rust, собираемых с использованием системы сборки Cargo.
Сценарий работы
Программа Hello
выводит в стандартный вывод ошибок сообщение Hello, world!
.
Сборка и запуск примера
При сборке решения используется система сборки CMake из состава KasperskyOS SDK. Для сборки программы Hello
используется система сборки Cargo, также входящая в SDK. В процессе сборки решения команда add_custom_command()
в файле ./hello/CMakeLists.txt
выполняет команду cargo build
, которая собирает исполняемый файл программы Hello
. Этот файл включается в решение как импортируемый исполняемый файл командой add_executable()
.
См. "Сборка и запуск примеров".
В началоПример hello_corrosion
Пример демонстрирует, как включить в решение простую программу, разработанную на языке Rust, с использованием Corrosion – набора библиотек для интеграции Rust в CMake-проекты.
Директория примера в SDK
Код примера и скрипты для сборки находятся по следующему пути:
Список программ
В состав решения входит прикладная программа Hello
, которая выводит сообщение в стандартный вывод ошибок. Эта программа разработана на языке Rust.
Описание инициализации
Файл описания инициализации решения init.yaml
генерируется в процессе сборки решения на основе шаблона:
./einit/src/init.yaml.in
Макрос @INIT_hello_ENTITY_CONNECTIONS@
при сборке примера заменяется в файле init.yaml
на список IPC-каналов со всеми системными программами, с которыми скомпонована программа Hello
.
Макрос @INIT_EXTERNAL_ENTITIES@
в шаблоне init.yaml.in
при сборке заменяется в файле init.yaml
на список системных программ, с которыми скомпонованы прикладные программы. Этот список содержит IPC-каналы системных программ, параметры запуска функции main()
и значения переменных окружения.
Подробнее см. "Шаблон init.yaml.in".
Описание политики безопасности
Файл security.psl
содержит описание политики безопасности решения и генерируется в процессе сборки решения на основе шаблона:
./einit/src/security.psl.in
Макрос @INIT_EXTERNAL_ENTITIES@
в шаблоне security.psl.in
при сборке решения заменяется на список системных программ, поставляемых в составе KasperskyOS SDK. Подробнее см. "Шаблон security.psl.in".
Политика безопасности решения в этом примере разрешает любые взаимодействия процессов между собой и ядром. Такая политика безопасности решения используется чтобы упростить пример. В реальном решении применять такую политику недопустимо.
Ресурсы
В директории ./resources
содержится EDL-описание программы Hello
.
Сценарий работы
Программа Hello
выводит в стандартный вывод ошибок сообщение Hello, world!
.
Сборка и запуск примера
При сборке решения используется система сборки CMake из состава KasperskyOS SDK.
Чтобы синхронизировать целевую платформу для сборки исходного-кода, разработанного на Rust, с целевой платформой C-компилятора, нужно в файле ./CMakeList.txt
добавить команду:
set (Rust_CARGO_TARGET ${CMAKE_C_COMPILER_TARGET})
Чтобы использовать в решении Corrosion нужно в этом же файле добавить команду:
find_package (Corrosion REQUIRED)
Чтобы интегрировать в решение исходный код, разработанный на Rust, в файле ./hello/CMakeList.txt
нужно вызвать функцию:
corrosion_import_crate (MANIFEST_PATH ${CMAKE_SOURCE_DIR}/hello/Cargo.toml)
При выполнении этой функции скомпилируется исполняемый файл hello
, который будет включен в решение.
См. "Сборка и запуск примеров".
В началоПример mass_storage
Пример демонстрирует использование драйвера UsbMassStorage в решениях на базе KasperskyOS для работы с внешними USB-накопителем, подключенным к USB-порту Raspberry Pi 4 B.
Директория примера в SDK
Код примера и скрипты для сборки находятся по следующему пути:
Список программ
Client
– прикладная программа, которая монтирует файловые системы в указанные директории на внешнем USB-накопителе, и выполняет базовые операции с файлами (создание, запись, чтение и удаление).FileVfs
– прикладная программа, реализующая серверную часть виртуальной файловой системы, предоставляя интерфейс для взаимодействия с файловыми системами и блочными устройствами.UsbMassStorage
– драйвер для доступа к данным на внешних USB-накопителях (USB-флеш-накопители, внешние жесткие диски).EntropyEntity
– системная программа, реализующая генератор случайных чисел.USB
– драйвер для управления всеми типами USB-устройств.PCIE
– драйвер шины PCIe.Bcm2711MboxArmToVc
– драйвер для работы с сопроцессором VideoCore (VC6) через технологию mailbox для Raspberry Pi 4 B.
Описание инициализации
Файл описания инициализации решения init.yaml
генерируется в процессе сборки решения на основе шаблона:
./einit/src/init.yaml.in
Макрос @INIT_Client_ENTITY_CONNECTIONS+@
в шаблоне init.yaml.in
при сборке примера заменяется в файле init.yaml
на список IPC-каналов со всеми системными программами, с которыми скомпонована программа Client.
Этот список дополняет вручную заданные IPC-каналы в шаблоне init.yaml.in
.
Макрос @INIT_FileVfs_ENTITY_CONNECTIONS@
при сборке примера заменяется в файле init.yaml
на список IPC-каналов со всеми системными программами, с которыми скомпонована программа FileVfs
.
Макрос @INIT_EXTERNAL_ENTITIES@
в шаблоне init.yaml.in
при сборке заменяется в файле init.yaml
на список системных программ, с которыми скомпонованы прикладные программы. Этот список содержит IPC-каналы системных программ, параметры запуска функции main()
и значения переменных окружения.
Подробнее см. "Шаблон init.yaml.in".
Описание политики безопасности
Файл security.psl
содержит описание политики безопасности решения и генерируется в процессе сборки решения на основе шаблона:
./einit/src/security.psl.in
Макрос @INIT_EXTERNAL_ENTITIES@
в шаблоне security.psl.in
при сборке решения заменяется на список системных программ, поставляемых в составе KasperskyOS SDK. Подробнее см. "Шаблон security.psl.in".
Ресурсы
В директории ./resources/edl
содержатся EDL-описания для программ Client
и FileVfs
.
Сценарий работы
Программа Client
отправляет запросы через IPC программе FileVfs
, чтобы смонтировать файловые системы (ext2
, ext3
, ext4
) в указанные директории, и выполнить базовые операции с файлами (создание, запись, чтение и удаление) для проверки корректности монтирования файловых систем на внешнем USB-накопителе. Результаты выполнения операций отображаются в стандартном выводе.
Сборка и запуск примера
Чтобы подготовить USB-накопитель для использования в этом примере, необходимо вызвать следующие команды:
См. "Сборка и запуск примеров".
В началоПример can_loopback
Пример использования драйвера CAN.
Пример демонстрирует использование драйвера CAN, когда нет необходимости подключать дополнительную периферию в виде CAN-трансиверов. В примере производится настройка CAN-порта, после чего происходит отправка CAN-пакета. Полученный CAN-пакет проверяется на соответствие отправленному пакету.
Для настройки порта используется CAN-интерфейс с именем can0
, указатель на имя порта присваивается переменной CanPortName
. Также драйвер CAN поддерживает имена can1
и can2
, которые можно использовать в тестовом приложении.
Драйвер CAN поддерживает несколько режимов работы, и может работать как классический CAN, а также как CANFD. За режим CANFD отвечает флаг CAN_FLAGS_FD
, который передается в функцию открытия CAN-порта тестового примера. Если флаг CAN_FLAGS_FD
отсутствует в параметрах открытия порта, то будет использоваться классический CAN с соответствующими ограничениями по скорости.
В примере открывается порт и устанавливается скорость передачи 800 КБ/c. Для этого используется константа CAN_BR_800KBS
.
При использовании флага CAN_FLAGS_FD
, поддерживаются следующие константы скорости передачи данных:
CANFD_BR_500KBS_D_2MBS
CANFD_BR_500KBS_D_2_5MBS
CANFD_BR_1MBS_D_2MBS
CAN_BR_1MBS
CAN_BR_800KBS
CAN_BR_500KBS
CAN_BR_250KBS
CAN_BR_125KBS
CAN_BR_62_5KBS
Классический CAN не может использовать скорости выше 1 МБ/с, поэтому при отсутствии флага CAN_FLAGS_FD
необходимо использовать только следующие константы для настройки скорости передачи:
CAN_BR_1MBS
CAN_BR_800KBS
CAN_BR_500KBS
CAN_BR_250KBS
CAN_BR_125KBS
CAN_BR_62_5KBS
Тестовый пакет CAN содержит идентификатор, длину поля данных и сами данные. Описание полей содержатся в структуре CanFrame
. Для классического CAN, длина поля данных ограничена 8 байтами, для CANFD – 64 байтами.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
Этот пример предназначен только для запуска на Radxa ROCK 3A.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера CAN для QEMU нет.
См. "Сборка и запуск примеров".
В началоПример can2can
Пример использования драйвера CAN.
Пример демонстрирует использование драйвера CAN для пересылки сообщения между двумя CAN-интерфейсами.
В отличие от примера can_loopback, где используется только один CAN-интерфейс и нет необходимости в дополнительном оборудовании, этот пример требует наличия двух трансиверов подключенных к линиям CAN_H
и CAN_L
. Описание способов подключения трансиверов ко встроенным CAN-контроллерам находится в директории примера.
Пример отправляет CAN-пакет между интерфейсами can0
и can1
. В примере используются настройки классического CAN, что подразумевает ограничение скорости передачи в 1 МБ/с.
При настройке скорости передачи, необходимо использовать только следующие константы:
CAN_BR_1MBS
CAN_BR_800KBS
CAN_BR_500KBS
CAN_BR_250KBS
CAN_BR_125KBS
CAN_BR_62_5KBS
Драйвер CAN не накладывает ограничений на направление отправки сообщений. В примере происходит отправка сообщения из can0
в can1
, но при использовании функции CanTransmitFrame
, можно выполнить отправку и в обратном направлении.
Тестовый CAN-пакет содержит идентификатор пакета, длину поля данных и сами данные. Описание полей содержатся в структуре CanFrame
. Для классического CAN, длина поля данных ограничена 8 байтами.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
Этот пример предназначен только для запуска на Radxa ROCK 3A.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера CAN для QEMU нет.
См. "Сборка и запуск примеров".
В началоПример adc_hello
Пример демонстрирует использование драйвера Sensors в KasperskyOS.
В примере программа AdcHello
позволяет проверить функциональность каналов АЦП. Номер канала, используемого при проверке, задается в макросе ADC_CHAN_NUM
.
Программа считывает поданное на канал напряжение, нормализует его и выводит в стандартный вывод. Так же программа отображает список доступных для работы каналов ADC (каналы SARADC_VIN6
и SARADC_VIN7
присутствуют в выводе, но для работы недоступны).
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
Сборка и запуск примера
Этот пример предназначен только для запуска на Radxa ROCK 3A.
Для корректной работы примера необходимо подключить к ADC пину источник напряжения 1 вольт согласно схеме:
См. "Сборка и запуск примеров".
В начало