Содержание
Дополнительные примеры
Этот раздел содержит описания дополнительных примеров, входящих в состав KasperskyOS Community Edition.
Пример net_with_separate_vfs
Пример представляет собой простейший случай взаимодействия по сети с использованием сокетов Беркли.
Пример состоит из сущностей Client
и Server
, связанных TCP-сокетом с использованием loopback-интерфейса. В коде сущностей используются стандартные POSIX-функции.
Чтобы соединить сущности сокетом через loopback, они должны использовать один экземпляр сетевого стека, то есть взаимодействовать с "общей" сущностью VFS (в этом примере сущность называется NetVfs
).
Для корректного соединения сущностей Client
и Server
с сущностью NetVfs
необходимо также включить в решение сущность Env.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/net_with_separate_vfs
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример net2_with_separate_vfs
Пример демонстрирует особенности решения, в котором сущность использует стандартные функции POSIX для взаимодействия с внешним сервером.
Пример net2_with_separate_vfs является видоизмененным примером net_with_separate_vfs. В отличие от примера net_with_separate_vfs, в этом примере сущность взаимодействует по сети не с другой сущностью, а с внешним сервером.
Пример состоит из сущности Client
, запущенной в KasperskyOS под QEMU, и программы Server
, запущенной в хостовой операционной системе Linux. Сущность Client
и процесс Server
связаны TCP-сокетом. В коде сущности Client
используются стандартные функции POSIX.
Чтобы соединить сущность Client
и процесс Server
сокетом, сущность Client
должна взаимодействовать с сущностью NetVfs
. Сущность NetVfs
при сборке компонуется с сетевым драйвером, который обеспечит взаимодействие с процессом Server
, запущенным в Linux.
Для корректного соединения сущности Client
с сущностью NetVfs
необходимо также включить в решение сущность Env.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/net2_with_separate_vfs
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример embedded_vfs
Пример показывает, как встроить виртуальную файловую систему (далее VFS), поставляемую в составе KasperskyOS Community Edition, в разрабатываемую сущность.
В этом примере сущность Client
полностью инкапсулирует реализацию VFS из KasperskyOS Community Edition. Это позволяет избавиться от использования IPC для всех стандартных функций ввода-вывода (stdio.h
, socket.h
и так далее), например, для отладки или повышения производительности.
Сущность Client
тестирует следующие операции:
- создание директории;
- создание и удаление файла;
- чтение из файла и запись в файл.
Поставляемые ресурсы
В пример входит образ жесткого диска с файловой системой FAT32 – hdd.img
.
Этот пример не содержит реализации драйверов блочных устройств, с которыми работает Client
. Эти драйверы (сущности ATA
и SDCard
) поставляются в составе KasperskyOS Community Edition и добавляются в файле сборки ./CMakeLists.txt
.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/embedded_vfs
Сборка и запуск примера
Чтобы запустить пример на QEMU, перейдите в директорию с примером, соберите пример и выполните следующие команды:
$ cd build/einit
# Перед выполнением следующей команды убедитесь, что путь к
# директории с исполняемым файлом qemu-system-arm сохранен в
# переменной окружения PATH. В случае отсутствия
# добавьте его в переменную PATH.
$ qemu-system-arm -m 2048 -machine vexpress-a15 -nographic -monitor none -sd hdd.img -kernel kos-qemu-image
Также см. "Сборка и запуск примеров".
В началоПример embed_ext2_with_separate_vfs
Пример показывает, как встроить новую файловую систему в виртуальную файловую систему (VFS), поставляемую в составе KasperskyOS Community Edition.
В этом примере сущность Client
тестирует работу файловых систем (ext2, ext3, ext4) на блочных устройствах. Для этого Client
обращается по IPC к драйверу файловой системы (сущности FileVfs
), а FileVfs
в свою очередь обращается по IPC к блочному устройству.
Файловые системы ext2
и ext3
работают с настройками по умолчанию. Файловая система ext4
работает, если отключить extent
(mkfs.ext4 -O ^64bit,^extent /dev/foo
).
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/embed_ext2_with_separate_vfs
Сборка и запуск примера
Чтобы запустить пример на QEMU, перейдите в директорию с примером, соберите пример и выполните следующие команды:
$ cd build/einit
# Перед выполнением следующей команды убедитесь, что путь к
# директории с исполняемым файлом qemu-system-arm сохранен в
# переменной окружения PATH. В случае отсутствия
# добавьте его в переменную PATH.
$ qemu-system-arm -m 2048 -machine vexpress-a15 -nographic -monitor none -sd hdd.img -kernel kos-qemu-image
Также см. "Сборка и запуск примеров".
Подготовка SD-карты для запуска на Raspberry Pi 4 B
Для запуска примера embed_ext2_with_separate_vfs
на Raspberry Pi 4 B необходимо, чтобы SD-карта, помимо загрузочного раздела с образом решения, также содержала 3 дополнительных раздела с файловыми системами ext2
, ext3
и ext4
соответственно.
Пример multi_vfs_ntpd
Этот пример показывает как использовать ntp-сервис в KasperskyOS. Сущность kl.Ntpd
поставляется в составе KasperskyOS Community Edition и представляет собой реализацию ntp-клиента, который в фоновом режиме получает параметры времени от внешних ntp-серверов и передает их ядру KasperskyOS.
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:
- Для работы с сетью используется сущность
VfsNet
. - Для работы с файловой системой используются сущности
VfsRamfs
иVfsSdCardFs
.
Сущность Client
использует стандартные функции библиотеки libc для получения информации о времени, которые транслируются в обращения к сущностям VFS по IPC.
Сущность Env
используется для передачи переменных окружения и аргументов функции main другим сущностям.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Поставляемые ресурсы
В пример входят следующие файлы конфигурации:
./resources/include/config.h.in
содержит описание бэкенда файловой системы, которая будет использоваться в решении:sdcard
илиramfs
.Для каждого бэкенда в решении также используется отдельная сущность VFS:
VfsSdCardFs
илиVfsRamfs
соответственно.- Директории
./resources/ramfs/etc
и/resources/sdcard/etc
содержат файлы конфигурации для сущностей VFS иNtpd
.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/multi_vfs_ntpd
Сборка и запуск примера
Чтобы запустить пример на QEMU, перейдите в директорию с примером, соберите пример и выполните следующие команды:
$ cd build/einit
# Перед выполнением следующей команды убедитесь, что путь к
# директории с исполняемым файлом qemu-system-arm сохранен в
# переменной окружения PATH. В случае отсутствия
# добавьте его в переменную PATH.
$ qemu-system-arm -m 2048 -machine vexpress-a15 -nographic -monitor none -sd sdcard0.img -kernel kos-qemu-image
Также см. "Сборка и запуск примеров".
В началоПример multi_vfs_dns_client
Этот пример показывает как использовать внешний dns-сервис в KasperskyOS.
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:
- Для работы с сетью используется сущность
VfsNet
. - Для работы с файловой системой используются сущности
VfsRamfs
иVfsSdCardFs
.
Сущность Client
использует стандартные функции библиотеки libc для обращения ко внешнему dns-сервису, которые транслируются в обращения к сущности VfsNet
по IPC.
Сущность Env
используется для передачи переменных окружения и аргументов функции main другим сущностям.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Поставляемые ресурсы
В пример входят следующие файлы конфигурации:
./resources/include/config.h.in
содержит описание бэкенда файловой системы, которая будет использоваться в решении:sdcard
илиramfs
.Для каждого бэкенда в решении также используется отдельная сущность VFS:
VfsSdCardFs
илиVfsRamfs
соответственно.- Директории
./resources/ramfs/etc
и/resources/sdcard/etc
содержат файлы конфигурации для сущностей VFS.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/multi_vfs_dns_client
Сборка и запуск примера
Чтобы запустить пример на QEMU, перейдите в директорию с примером, соберите пример и выполните следующие команды:
$ cd build/einit
# Перед выполнением следующей команды убедитесь, что путь к
# директории с исполняемым файлом qemu-system-arm сохранен в
# переменной окружения PATH. В случае отсутствия
# добавьте его в переменную PATH.
$ qemu-system-arm -m 2048 -machine vexpress-a15 -nographic -monitor none -sd sdcard0.img -kernel kos-qemu-image
Также см. "Сборка и запуск примеров".
В началоПример multi_vfs_dhcpcd
Пример использования сущности kl.Dhcpcd
.
Сущность Dhcpcd
представляет собой реализацию DHCP-клиента, который в фоновом режиме получает параметры сетевых интерфейсов от внешнего DHCP-сервера и передает их сущности виртуальной файловой системы (далее VFS).
Пример также демонстрирует использование разных VFS в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:
- Для работы с сетью используется сущность
VfsNet
. - Для работы с файловой системой используются сущности
VfsRamfs
иVfsSdCardFs
.
Сущность Client
использует стандартные функции библиотеки libc
для получения информации о сетевых интерфейсах (ioctl
), которые транслируются в обращения к сущности VFS по IPC.
Сущность Env
используется для передачи переменных окружения и аргументов функции main другим сущностям.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Поставляемые ресурсы
В пример входят следующие файлы конфигурации:
./resources/include/config.h.in
содержит описание бэкенда файловой системы, которая будет использоваться в решении:sdcard
илиramfs
.Для каждого бэкенда в решении также используется отдельная сущность VFS:
VfsSdCardFs
илиVfsRamfs
соответственно.- Директории
./resources/ramfs/etc
и/resources/sdcard/etc
содержат файлы конфигурации для сущностей VFS иDhcpcd
.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/multi_vfs_dhcpcd
Сборка и запуск примера
Чтобы запустить пример на QEMU, перейдите в директорию с примером, соберите пример и выполните следующие команды:
$ cd build/einit
# Перед выполнением следующей команды убедитесь, что путь к
# директории с исполняемым файлом qemu-system-arm сохранен в
# переменной окружения PATH. В случае отсутствия
# добавьте его в переменную PATH.
$ qemu-system-arm -m 2048 -machine vexpress-a15 -nographic -monitor none -sd sdcard0.img -kernel kos-qemu-image
Также см. "Сборка и запуск примеров".
В началоПример mqtt_publisher
Пример использования протокола MQTT в KasperskyOS.
В этом примере MQTT-подписчик должен быть запущен в хостовой операционной системе, а MQTT-издатель в KasperskyOS. Сущность Publisher
представляет собой реализацию MQTT-издателя, который публикует текущее время с интервалом 5 секунд.
В результате успешного запуска и работы примера MQTT-подписчик, запущенный в хостовой операционной системе, выведет сообщение "received PUBLISH"
с топиком "datetime"
.
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:
- Для работы с сетью используется сущность
VfsNet
. - Для работы с файловой системой используются сущности
VfsRamfs
иVfsSdCardFs
.
Сущность Env
используется для передачи переменных окружения и аргументов функции main другим сущностям.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Запуск Mosquitto
Для запуска этого примера MQTT брокер Mosquitto должен быть установлен и запущен в хостовой системе. Для установки и запуска Mosquitto выполните следующие команды:
$ sudo apt install mosquitto mosquitto-clients
$ sudo /etc/init.d/mosquitto start
Для запуска MQTT-подписчика в хостовой системе выполните следующую команду:
$ mosquitto_sub -d -t "datetime"
Поставляемые ресурсы
В пример входят следующие файлы конфигурации:
./resources/include/config.h.in
содержит описание бэкенда файловой системы, которая будет использоваться в решении:sdcard
илиramfs
.Для каждого бэкенда в решении также используется отдельная сущность VFS:
VfsSdCardFs
илиVfsRamfs
соответственно.- Директории
./resources/ramfs/etc
и/resources/sdcard/etc
содержат файлы конфигурации для сущностей VFS иNtpd
.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/mqtt_publisher
Сборка и запуск примера
Чтобы запустить пример на QEMU, перейдите в директорию с примером, соберите пример и выполните следующие команды:
$ cd build/einit
# Перед выполнением следующей команды убедитесь, что путь к
# директории с исполняемым файлом qemu-system-arm сохранен в
# переменной окружения PATH. В случае отсутствия
# добавьте его в переменную PATH.
$ qemu-system-arm -m 2048 -machine vexpress-a15 -nographic -monitor none -sd sdcard0.img -kernel kos-qemu-image
Также см. "Сборка и запуск примеров".
В началоПример mqtt_subscriber
Пример использования протокола MQTT в KasperskyOS.
В этом примере MQTT-издатель должен быть запущен в хостовой операционной системе, а MQTT-подписчик в KasperskyOS. Сущность Subscriber
представляет собой реализацию MQTT-подписчика.
В результате успешного запуска и работы примера MQTT-подписчик, запущенный в KasperskyOS, выведет сообщение "Got message with topic: my/awesome/topic, payload: hello"
.
Пример также демонстрирует использование разных виртуальных файловых систем (далее VFS) в одном решении. В примере для доступа к функциям работы с файловой системой и функциям работы с сетью используются разные VFS:
- Для работы с сетью используется сущность
VfsNet
. - Для работы с файловой системой используются сущности
VfsRamfs
иVfsSdCardFs
.
Сущность Env
используется для передачи переменных окружения и аргументов функции main другим сущностям.
Для сборки и запуска примера используется система CMake из состава KasperskyOS Community Edition.
Запуск Mosquitto
Для запуска этого примера MQTT брокер Mosquitto должен быть установлен и запущен в хостовой системе. Для установки и запуска Mosquitto выполните следующие команды:
$ sudo apt install mosquitto mosquitto-clients
$ sudo /etc/init.d/mosquitto start
Для запуска MQTT-издателя в хостовой системе выполните следующую команду:
$ mosquitto_pub -t "my/awesome/topic" -m "hello"
Поставляемые ресурсы
В пример входят следующие файлы конфигурации:
./resources/include/config.h.in
содержит описание бэкенда файловой системы, которая будет использоваться в решении:sdcard
илиramfs
.Для каждого бэкенда в решении также используется отдельная сущность VFS:
VfsSdCardFs
илиVfsRamfs
соответственно.- Директории
./resources/ramfs/etc
и/resources/sdcard/etc
содержат файлы конфигурации для сущностей VFS иNtpd
.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/mqtt_subscriber
Сборка и запуск примера
Чтобы запустить пример на QEMU, перейдите в директорию с примером, соберите пример и выполните следующие команды:
$ cd build/einit
# Перед выполнением следующей команды убедитесь, что путь к
# директории с исполняемым файлом qemu-system-arm сохранен в
# переменной окружения PATH. В случае отсутствия
# добавьте его в переменную PATH.
$ qemu-system-arm -m 2048 -machine vexpress-a15 -nographic -monitor none -sd sdcard0.img -kernel kos-qemu-image
Также см. "Сборка и запуск примеров".
В началоПример gpio_input
Пример использования драйвера GPIO.
Этот пример позволяет проверить функциональность ввода GPIO пинов. Используется порт "gpio0". Все пины, кроме указанных в массиве exceptionPinArr
, по умолчанию ориентированы на ввод, напряжение на пинах согласуется с состоянием регистров подтягивающих резисторов. Состояния всех пинов, начиная с GPIO0 (с учетом указанных в массиве exceptionPinArr
), будут последовательно считаны, сообщения о состояниях пинов будут выведены в консоль. Задержка между считываниями смежных пинов определяется макроопределением DELAY_S
(время указывается в секундах).
exceptionPinArr
- массив номеров GPIO пинов, которые необходимо исключить из примера. Это может понадобиться в случае, если часть пинов уже задействована для других функций, например, если пины используются для UART соединения при отладке.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера GPIO для QEMU нет.
При сборке и запуске этого примера на Raspberry Pi 4 B ошибка не возникает.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/gpio_input
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример gpio_output
Пример использования драйвера GPIO.
Этот пример позволяет проверить функциональность вывода GPIO пинов. Используется порт "gpio0". Начальное состояние всех пинов GPIO должно соответствовать логическому нулю (напряжение на пине отсутствует). Все пины, кроме указанных в массиве exceptionPinArr
, будут настроены на вывод. Каждый пин, начиная с GPIO0 (с учетом указанных в массиве exceptionPinArr
), будет последовательно переведен в состояние логической единицы (появление на пине напряжения), а затем в состояние логического нуля. Задержка между изменениями состояния пинов определяется макроопределением DELAY_S
(время указывается в секундах). Включение/выключение пинов производится от GPIO0
до GPIO27
и обратно до GPIO0
.
exceptionPinArr
- массив номеров GPIO пинов, которые необходимо исключить из примера. Это может понадобиться в случае, если часть пинов уже задействована для других функций, например, если пины используются для UART соединения при отладке.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера GPIO для QEMU нет.
При сборке и запуске этого примера на Raspberry Pi 4 B ошибка не возникает.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/gpio_output
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример gpio_interrupt
Пример использования драйвера GPIO.
Этот пример позволяет проверить функциональность прерываний для GPIO пинов. Используется порт "gpio0". В битовой маске pinsBitmap
структуры контекста прерываний CallBackContext
пины из массива exceptionPinArr
помечаются отработавшими, чтобы в дальнейшем пример мог корректно завершиться. Все пины, кроме указанных в массиве exceptionPinArr
, переводятся в состояние PINS_MODE
. Для всех пинов, кроме указанных в массиве exceptionPinArr
, будет зарегистрирована функция обработки прерывания.
В бесконечном цикле происходит проверка условия равенства битовой маски pinsBitmap
из структуры контекста прерываний CallBackContext
битовой маске окончания работы примера DONE_BITMASK
(соответствует условию, когда прерывание произошло на каждом GPIO пине). Также в цикле снимается функция-обработчик для последнего пина, на котором произошла обработка прерывания. При возникновении в первый раз прерывания на пине вызывается функция-обработчик, которая помечает соответствующий пин в битовой маске pinsBitmap
в структуре контекста прерываний CallBackContext
. Функция-обработчик для этого пина в дальнейшем снимается.
Следует учитывать возможное влияние начального состояния регистров подтягивающих резисторов для каждого пина на работу примера.
Прерывания для событий GPIO_EVENT_LOW_LEVEL
и GPIO_EVENT_HIGH_LEVEL
не поддерживаются.
exceptionPinArr
- массив номеров GPIO пинов, которые необходимо исключить из примера. Это может понадобиться в случае, если часть пинов уже задействована для других функций, например, если пины используются для UART соединения при отладке.
При сборке и запуске этого примера на QEMU возникает ошибка. Это ожидаемое поведение, поскольку драйвера GPIO для QEMU нет.
При сборке и запуске этого примера на Raspberry Pi 4 B ошибка не возникает.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/gpio_interrupt
Сборка и запуск примера
См. "Сборка и запуск примеров".
В началоПример 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 B ошибка не возникает.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/gpio_echo
Сборка и запуск примера
См. "Сборка и запуск примеров".
В начало