KasperskyOS Community Edition 1.3

Начало работы

Этот раздел содержит информацию, необходимую для начала работы с KasperskyOS Community Edition.

В этом разделе

Использование Docker-контейнера

Установка и удаление

Настройка среды разработки

Расширение KasperskyOS SDK Extension for Visual Studio Code

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

В начало
[Topic getting_started]

Использование Docker-контейнера

Для установки и использования KasperskyOS Community Edition можно использовать Docker-контейнер, в котором развернут образ одной из поддерживаемых операционных систем.

Чтобы использовать Docker-контейнер для установки KasperskyOS Community Edition:

  1. Убедитесь что программное обеспечение Docker установлено и запущено.
  2. Для загрузки официального Docker-образа операционной системы Ubuntu GNU/Linux 22.04 "Jammy Jellyfish" из публичного репозитория Docker Hub выполните следующую команду:

    docker pull ubuntu:22.04

  3. Для запуска образа выполните следующую команду:

    docker run --net=host --user root --privileged -it --rm ubuntu:22.04 bash

  4. Скопируйте deb-пакет для установки KasperskyOS Community Edition в контейнер.
  5. Установите KasperskyOS Community Edition.
В начало
[Topic using_docker]

Установка и удаление

Установка

KasperskyOS Community Edition поставляется в виде deb-пакета. Для установки KasperskyOS Community Edition мы рекомендуем использовать установщик пакетов apt.

Для развертывания пакета с помощью apt запустите команду:

$ sudo apt update && sudo apt install <путь-к-deb-пакету>

Пакет будет установлен в директорию /opt/KasperskyOS-Community-Edition-<version>.

Чтобы удобно работать с инструментами, поставляемыми в составе KasperskyOS Community Edition SDK, нужно добавить в переменную окружения PATH путь к исполняемым файлам этих инструментов /opt/KasperskyOS-Community-Edition-<version>/toolchain/bin. Чтобы не делать это каждый раз при входе в пользовательскую сессию, нужно выполнить скрипт /opt/KasperskyOS-Community-Edition-<version>/common/set_env.sh, выйти и снова войти в сессию.

Синтаксис команды вызова скрипта set_env.sh:

$ sudo ./set_env.sh [-h] [-d]

Параметры:

  • -d

    Отменяет действие скрипта.

  • -h, --help

    Отображает текст справки.

Помимо изменения переменной окружения PATH скрипт задает переменные окружения KOSCEVER и KOSCEDIR, которые содержат версию и абсолютный путь к KasperskyOS Community Edition SDK соответственно. Использование этих переменных окружения позволяет системе сборки при запуске определить путь установки SDK, а также проверить, что версия решения соответствует версии SDK.

Удаление

Перед удалением KasperskyOS Community Edition отмените действие скрипта set_env.sh, если выполняли этот скрипт после установки SDK.

Для удаления KasperskyOS Community Edition выполните команду:

$ sudo apt remove --purge kasperskyos-community-edition-<version>

В результате выполнения этой команды будут удалены все установленные файлы в директории /opt/KasperskyOS-Community-Edition-<version>.

В начало
[Topic sdk_install_and_remove]

Настройка среды разработки

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

Настройка редактора кода

Для упрощения процесса разработки решений на базе KasperskyOS перед началом работы рекомендуется:

  • Установить в редакторе кода расширения и плагины для используемых языков программирования (C, C++ и/или Rust).
  • Добавить заголовочные файлы, поставляемые в KasperskyOS Community Edition, в проект разработки.

    Заголовочные файлы расположены в следующей директории: /opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include.

Пример настройки Visual Studio Code

В состав KasperskyOS Community Edition входит расширение KasperskyOS SDK Extension for Visual Studio Code, которое обеспечивает интеграцию KasperskyOS Community Edition с редактором исходного кода Visual Studio Code.

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

Для более удобной навигации по коду проекта, включая системный API, необходимо выполнить следующие действия:

  1. Создайте новую рабочую область (workspace) или откройте существующую рабочую область в Visual Studio Code.

    Рабочая область может быть открыта неявно, с помощью пунктов меню File > Open folder.

  2. Убедитесь, что расширение C/C++ for Visual Studio Code установлено.
  3. В меню View выберите пункт Command Palette.
  4. Выберите пункт C/C++: Edit Configurations (UI).
  5. В поле Include path добавьте путь /opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include.
  6. Закройте окно C/C++ Configurations.
В начало
[Topic ide_settings]

Расширение KasperskyOS SDK Extension for Visual Studio Code

Расширение KasperskyOS SDK Extension for Visual Studio Code (далее также KasperskyOS SDK Extension) обеспечивает интеграцию KasperskyOS Community Edition с редактором исходного кода Visual Studio Code.

В этом разделе

Установка и удаление расширения

Функции расширения

Параметры расширения

В начало
[Topic vscode_extension]

Установка и удаление расширения

Установка зависимостей

Зависимости расширения автоматически устанавливаются из магазина расширений Visual Studio Code. Если на вашем компьютере имеется доступ к магазину расширений Visual Studio Code, вы можете пропустить перечисленные ниже шаги по установке зависимостей и перейти к разделу "Установка расширения" ниже.

В противном случае, вам потребуется вручную установить зависимости для расширения. Для установки зависимостей KasperskyOS SDK Extension for Visual Studio Code выполните следующие действия:

  1. На другом компьютере с имеющимся доступом к магазину расширений Visual Studio Code откройте адрес https://marketplace.visualstudio.com/vscode в браузере.
  2. Найдите и скачайте расширения:
    • cpptools – требуется для работы с отладчиком.
    • clangd – требуется для статического анализа исходного кода.
    • devcontainers – требуется для поддержки Docker.
  3. Скопируйте полученные VSIX-файлы на компьютер, на котором требуется установить расширение KasperskyOS SDK Extension.
  4. Откройте среду разработки Visual Studio Code.
  5. Нажмите на клавишу F1.
  6. Выполните команду Extensions: Install from VSIX... в появившейся в верхней части окна командной строке.
  7. Установите скачанные на шаге 2 расширения.

Установка расширения

Для установки KasperskyOS SDK Extension выполните следующие действия:

  1. Откройте среду разработки Visual Studio Code.
  2. Нажмите на клавишу F1.
  3. Выполните команду Extensions: Install from VSIX... в появившейся в верхней части окна командной строке.
  4. Выберите файл расширения kos-extension-<version>.vsix, расположенный в директории /opt/KasperskyOS-Community-Edition-<version>/dev_tools/ide_integration/vscode/.

    При установке расширения KasperskyOS SDK Extension автоматически устанавливаются его зависимости.

Удаление расширения

Для удаления расширения нажмите комбинацию клавиш CTRL+SHIFT+X, найдите расширение в списке и в контекстном меню расширения выберите команду Uninstall.

В начало
[Topic vscode_ext_install]

Функции расширения

Расширение автоматически обнаруживает в открытом рабочем пространстве проект KasperskyOS и запускается. Параметр обнаружения – наличие в рабочем пространстве файла .vscode/kos_project.json или директории einit. Если расширение автоматически не активировалось в директории, но вы уверены, что это проект KasperskyOS, то выполните команду KOS: Activate extension in this directory. Команда активирует расширение и создает в директории проекта пустой файл .vscode/kos_project.json. Чтобы отменить ручную активацию, удалите этот файл.

После запуска расширение добавляет на нижнюю панель редактора кода Visual Studio Code следующие кнопки:

  • lower_panel_select_target – выбор цели сборки;
  • lower_panel_run – запуск проекта в QEMU;
  • lower_panel_run_with_debug – запуск выбранной цели с отладкой;
  • lower_panel_build – сборка всех целей;
  • lower_panel_build_user_target – сборка выбранной цели;
  • lower_panel_clean – очистка директории сборки;
  • lower_panel_build_type – переключение типа сборки;
  • lower_panel_build_with_tests – включение/отключение сборки проекта с тестами;
  • lower_panel_build_target – выбор целевой платформы для сборки;
  • lower_panel_select_device – выбор устройства или эмулятора QEMU;
  • vscode_sdk_version – отображение версии SDK.

Функции, которые предоставляют кнопки, также можно вызвать из командной строки редактора кода, открываемой по нажатию на клавишу F1. Все команды имеют префикс KOS:.

Работа с базовым образом KasperskyOS

Расширение позволяет не выполнять полную сборку решения на базе KasperskyOS после внесения изменений в код прикладной программы, а вместо этого использовать следующий сценарий:

  1. Запуск в эмуляторе QEMU базового образа решения на базе KasperskyOS, входящего в состав SDK. В базовом образе содержатся все системные программы, необходимые для запуска и отладки программ, упакованных в KPA-пакеты.
  2. Сборка прикладной программы и ее упаковка в KPA-пакет. Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать CMake-команды библиотеки kpa.
  3. Установка программы из KPA-пакета в запущенный на шаге 1 образ решения и ее запуск под управлением KasperskyOS.
  4. Внесение изменений в код прикладной программы.
  5. Повторение шагов 2-5.
  6. Расширение также позволяет отлаживать программу, запущенную в базовом образе KasperskyOS. Подробнее см. "Отладка программ в составе KPA-пакета".

Создание базового описания политики безопасности решения

Расширение позволяет автоматически создавать простейшие описания политики безопасности решения для проекта.

Чтобы создать базовое описание политики безопасности:

  1. Убедитесь, что расширение KasperskyOS SDK Extension установлено и активно.
  2. Нажмите на клавишу F1.
  3. Выполните команду KOS: Generate policy file for current project.
  4. Выберите тип базового описания политики, который вы хотите создать:
    • Grant all permissions - создать простейшее описание политики безопасности решения, которая разрешает любые взаимодействия процессов любых классов между собой и с ядром KasperskyOS, а также разрешает любому процессу инициализировать запуск процессов.
    • Grant necessary permissions - создать простейшее описание политики безопасности решения, которая разрешает любые взаимодействия процессов любых классов между собой и с ядром KasperskyOS, а также определяет необходимые разрешения для инициализации запуска процессов на основе файла init.yaml.in в составе проекта.
  5. Введите имя файла для сохранения созданного описания политики безопасности.

Эти политики можно использовать только в качестве заглушек на ранних стадиях разработки решения на базе KasperskyOS, чтобы модуль безопасности Kaspersky Security Module "не мешал" взаимодействиям. В реальном решении на базе KasperskyOS применять такие политики недопустимо.

Запуск тестов

После активации расширения на боковой панели Visual Studio Code появляется вкладка Testing – left_panel_testing. При выборе вкладки Testing в окне редактора кода отобразится дерево тестов, созданных с помощью библиотеки Google Test и обнаруженных в файлах директории test/.

Для запуска тестов нажмите на кнопку run_tests. По умолчанию запускаются все обнаруженные тесты, но вы можете выбирать определенные тесты на вкладках с исходным кодом тестов или определенные группы тестов, выбирая их из дерева всех тестов. Запускать можно только тесты, которые добавлены в файлы CMakeLists.txt для сборки программ с помощью CMake-команд kl_kos_add_small_test() или generate_kos_test() из CMake-библиотеки TestGenerator, поставляемой в составе SDK.

Результаты работы тестов, а также файлы журналов находятся в директории <директория_сборки>/bin/tests/output.

Запуск тестов политик безопасности решения

Расширение позволяет запускать тесты политики безопасности решения для проекта, созданные на основе описания политики безопасности решения.

Чтобы собрать и выполнить тесты политики безопасности решения:

  1. Убедитесь, что описание политики безопасности решения содержит тесты политики безопасности решения.
  2. Убедитесь, что CMake-команды сборки тестов политики безопасности решения добавлены в один из файлов CMakeLists.txt проекта.
  3. Убедитесь, что расширение KasperskyOS SDK Extension установлено и активно.
  4. Выполните сборку всех целей, нажав на кнопку lower_panel_build на нижней панели.
  5. Нажмите на кнопку lower_panel_select_target выбора цели сборки и выберите цель с именем kos-qemu-image-PalTest<N>-sim, где N – индекс PSL-файла в списке PSL-файлов, содержащих тесты политики безопасности решения.
  6. Нажмите на кнопку сборки выбранной цели lower_panel_build_user_target.

В этом разделе

Запуск базового образа решения на базе KasperskyOS

Сборка программ в Visual Studio Code

Запуск программ в базовом образе решения

Отладка программы в составе KPA-пакета

В начало
[Topic vscode_ext_use]

Запуск базового образа решения на базе KasperskyOS

Базовый образ решения на базе KasperskyOS входит в состав SDK и содержит все системные программы, необходимые для запуска и отладки программ, упакованных в KPA-пакеты.

Чтобы запустить базовый образ решения KasperskyOS из Visual Studio Code:

  1. Убедитесь, что расширение KasperskyOS SDK Extension установлено и активно.
  2. Нажмите на кнопку выбора устройства lower_panel_select_device на нижней панели или нажмите на клавишу F1 и выполните команду KOS: Select Device.
  3. Выберите Create new emulator.
  4. Выберите kos_base-dev.
  5. В отобразившемся поле введите дополнительные флаги QEMU и нажмите Enter, либо сразу нажмите Enter чтобы использовать флаги по умолчанию.
  6. В отобразившемся поле введите имя нового эмулятора и нажмите Enter, либо сразу нажмите Enter чтобы использовать автоматически сгенерированное имя.
  7. Дождитесь завершения предыдущей команды.
  8. В отобразившемся уведомлении о создании нового эмулятора нажмите на кнопку Start.
  9. Дождитесь окончания загрузки эмулятора.
В начало
[Topic vscode_emu_start]

Сборка программ в Visual Studio Code

Чтобы собрать программу в Visual Studio Code:

  1. Откройте директорию проекта программы в Visual Studio Code.
  2. Убедитесь, что проект верно определился по наличию дополнительных кнопок расширения на нижней панели. Если кнопки не появились, то активируйте решение вручную, выполнив команду KOS: Activate extension in this directory.
  3. Выберите архитектуру сборки, нажав на кнопку выбора целевой платформы для сборки lower_panel_build_target.
  4. Выполните сборку всех целей, нажав на кнопку lower_panel_build на нижней панели.
В начало
[Topic vscode_app_build]

Запуск программ в базовом образе решения

Если запускаемая программа использует файловые системы (через компонент VFS), то перед запуском необходимо:

  1. Вызвать через меню окно параметров расширения: FilePreferencesSettings, далее ExtensionsKasperskyOS.
  2. Выставить значение client:kl.VfsSdCardFs для переменной окружения VFS_FILESYSTEM_BACKEND в параметре Application Environment Variables.

Чтобы запустить программу в базовом образе решения:

  1. Откройте директорию проекта программы в Visual Studio Code.
  2. Убедитесь, что проект верно определился по наличию дополнительных кнопок расширения на нижней панели. Если кнопки не появились, то активируйте решение вручную, выполнив команду KOS: Activate extension in this directory.
  3. Убедитесь, что базовый образ решения запущен в соответствии с инструкцией в разделе "Запуск базового образа решения на базе KasperskyOS".
  4. Нажмите на кнопку выбора устройства или эмулятора QEMU lower_panel_select_device на нижней панели.
  5. Выберите запущенный ранее базовый образ решения.
  6. Выполните сборку программы в соответствии с инструкцией в разделе "Сборка программы в Visual Studio Code".
  7. Убедитесь, для программа упакована в KPA-пакет.

    Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать CMake-команды библиотеки kpa.

  8. Нажмите на кнопку выбора цели lower_panel_select_target и в раскрывающемся списке выберите собранный KPA-пакет программы, подписанный в списке как [application].
  9. Нажмите на кнопку запуска lower_panel_run. Программа будет установлена в выбранный базовый образ и автоматически запущена.
В начало
[Topic vscode_app_start]

Отладка программы в составе KPA-пакета

Отладка программы в составе KPA-пакета, в отличие от отладки программ в решении на базе KasperskyOS, позволяет не выполнять полную сборку решения на базе KasperskyOS после внесения изменений в код прикладной программы.

Сценарий отладки программы в составе KPA-пакета выглядит следующим образом:

  1. Установка расширения KasperskyOS SDK Extension.
  2. Сборка прикладной программы и ее упаковка в KPA-пакет. Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать CMake-команды библиотеки kpa.
  3. Запуск базового образа KasperskyOS из состава KasperskyOS Community Edition со встроенным в ядро GDB-сервером.
  4. Подключение отладчика к GDB-серверу ядра. Отладчик можно подключить при старте программы или при работе программы. Подробнее:
  5. Отладка программы с помощью графического интерфейса Visual Studio Code. Подробнее см. документацию Visual Studio Code: https://code.visualstudio.com/docs/editor/debugging.
В начало
[Topic kpa_debug]

Подключение отладчика при старте программы в базовом образе

Чтобы подключить отладчик к GDB-серверу ядра при старте программы в QEMU с помощью расширения Visual Studio Code:

  1. Установите точку останова в исходном коде программы перед отлаживаемым фрагментом.
  2. Соберите программу. Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать CMake-команды библиотеки kpa.
  3. Запустите базовый образ KasperskyOS из состава KasperskyOS Community Edition.
  4. Дождитесь окончания загрузки базового образа и установите программу с помощью команды KOS: Install package.
  5. В боковой панели Visual Studio Code нажмите Run and debug > create a launch.json file , а затем выберите KasperskyOS Debugger.

    В результате будет создан файл конфигурации отладки launch.json.

  6. В файле launch.json в поле конфигурации с именем (kos/gdb) Launch & debug application укажите путь до бинарного файла вашей программы, полученного в результате сборки и имя программы. В поле eiid необходимо указать значение kl.Kds.
  7. Запустите отладку, нажав на кнопку (kos/gdb) Launch & debug application на нижней панели.
  8. В раскрывающемся списке выберите конфигурацию с именем (kos/gdb) Launch & debug application.
  9. В отладочной консоли появится сообщение, что программа готова к отладке. Нажмите на кнопку Continue и выполнение программы будет остановлено на выбранной в п.1 точке останова.
В начало
[Topic kpa_debug_start]

Подключение отладчика при работе программы, запущенной в базовом образе

Чтобы подключить отладчик к GDB-серверу ядра при работе программы в QEMU с помощью расширения Visual Studio Code:

  1. Добавьте в функцию main программы бесконечный цикл. Это позволит отладчику подключиться к работающей программе.
  2. Установите точку останова в исходном коде программы перед отлаживаемым фрагментом.
  3. Соберите программу. Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать CMake-команды библиотеки kpa.
  4. Запустите базовый образ KasperskyOS из состава KasperskyOS Community Edition.
  5. В боковой панели Visual Studio Code нажмите Run and debug > create a launch.json file , а затем выберите KasperskyOS Debugger.

    В результате будет создан файл конфигурации отладки launch.json.

  6. В файле launch.json в поле конфигурации с именем (kos/gdb) Attach to process укажите путь до бинарного файла вашей программы, полученного в результате сборки.
  7. Запустите программу в базовом образе.
  8. Запустите отладку, нажав на кнопку (kos/gdb) Attach to process на нижней панели.
  9. В раскрывающемся списке выберите конфигурацию с именем (kos/gdb) Attach to process и выберите имя программы для отладки.
  10. В отладочной консоли появится сообщение, что программа готова к отладке. Нажмите на кнопку Continue и выполнение программы будет остановлено на выбранной в п.2 точке останова.
В начало
[Topic kpa_debug_attach]

Параметры расширения

Расширение имеет параметры, располагающиеся в хранилище Visual Studio Code, вызываемом через меню: FilePreferencesSettings, далее ExtensionsKasperskyOS.

Параметры расширения

Application Arguments
Список аргументов командной строки для запускаемых с помощью расширения приложений.
Application Environment Variables
Список переменных окружения для запускаемых с помощью расширения приложений.
Auto_update
Включение/выключение автоматического обновления расширения при изменении параметра SDK Path.
Build Threads Num
Выбор количества потоков процессора, использующихся при сборке. По умолчанию используются все доступные потоки.
Cmake Build Flags
Дополнительные флаги CMake для сборки.
Cmake Config Flags
Дополнительные конфигурационные флаги для запуска CMake.
Auto Open Log Tab
Включение/выключение автоматического открытия вкладки с журналом выполнения команды.
Force Clean
Кнопка очистки удаляет директорию сборки.
Gdbinit File
Путь к файлу gdbinit, который содержит GDB-команды, выполняемые при запуске отладчика.
Run No Graphic
Включение/выключение принудительного запуска эмулятора в режиме без графического пользовательского интерфейса.
SDK Path
Путь до установленного KasperskyOS Community Edition.
Если расширение при запуске не обнаружит корректного SDK в SDK Path, будет выдан запрос с предложением выбрать SDK из списка обнаруженных. Чтобы не делать это для каждого рабочего пространства, рекомендуется установить SDK Path для пространства настроек User.
Set Build Dir
Директория сборки проекта. По умолчанию используется директория ./build.
Shell Export Variables
Дополнительные переменные, устанавливаемые перед запуском CMake.
Suppress Extensions Recommendations
Включение/выключение напоминания о необходимости установить зависимости KasperskyOS SDK Extension.
Test Failures Num
Количество непройденных тестов, отображаемое в журнале.
Test Failures Only
Включение/выключение отображения в журнале только непройденных тестов.
Test Files Pattern
Маска для поиска файлов с исходным кодом тестов проекта.
Test No Skipped
Включение/выключение отображения в журнале пропущенных тестов.
Test Skip Details
Включение/выключение отображения в журнале пропущенных и непройденных тестов.
Test Threads Num
Выбор количества потоков процессора, использующихся при запуске тестов. По умолчанию используются все доступные потоки, но для единичных тестов будет использоваться по одному потоку.
Test Timeout
Ограничение по времени на выполнение каждого теста (в секундах). При установке значения 0 используются ограничения из тестовых конфигураций.
Test Verbose
Включение/выключение отображения в журнале отладочной информации о тестах.
Trace: Server
Выбор уровня детализации журналирования для LSP-клиента Visual Studio Code при работе со встроенным в SDK LSP-сервером для языков IDL/CDL/EDL. Журнал LSP-клиента можно просмотреть выбрав канал nk-lsp в окне вывода Visual Studio Code.
User SDKs
Дополнительные пути до SDK для отображения в меню выбора SDK.
В начало
[Topic vscode_params][Topic building_and_running_sample_programs]

Сборка примеров

Сборка примеров осуществляется с помощью системы сборки CMake, входящей в состав KasperskyOS Community Edition.

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

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

Сборку примеров нужно выполнять в директории, к которой у вас есть доступ на запись, например, скопировав директорию с примером в домашнюю директорию.

Сборка примеров для запуска на QEMU

Чтобы выполнить сборку примера, перейдите в директорию с примером и выполните команду:

$ ./cross-build.sh

В результате работы скрипта cross-build.sh создается образ решения на базе KasperskyOS, который включает пример, и инициируется запуск примера на QEMU. Файл образа решения kos-qemu-image сохраняется в директории <название примера>/build/einit.

Сборка примеров для запуска на Raspberry Pi 4 B или Radxa ROCK 3A

Чтобы выполнить сборку примера, перейдите в директорию с примером и выполните команду:

$ ./cross-build.sh --target {kos-image|sd-image}

Какой образ создается в результате работы скрипта cross-build.sh зависит от выбора значения параметра target:

  • kos-image

    Создается образ решения на базе KasperskyOS, который включает в себя пример. Файл образа решения kos-image сохраняется в директории <название примера>/build/einit.

  • sd-image

    Создается образ файловой системы загрузочной SD-карты. В образ файловой системы загружаются: образ kos-image, загрузчик U-Boot, который запускает пример, и встроенное программное обеспечение (англ. firmware) для Raspberry Pi 4 B или Radxa ROCK 3A. Исходный код загрузчика U-Boot и встроенное программное обеспечение загружаются с сайта https://github.com. Файл образа файловой системы hdd.img сохраняется в директории <название примера>/build.

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

В начало
[Topic building_sample_programs]

Запуск примеров на QEMU

Запуск примеров на QEMU в Linux с графической оболочкой

Запуск примеров нужно выполнять в директории сборки, к которой у вас есть доступ на запись.

Запуск примера на QEMU в Linux с графической оболочкой осуществляется скриптом cross-build.sh, который также выполняет сборку примера. Чтобы запустить скрипт, перейдите в директорию с примером и выполните команду:

$ ./cross-build.sh

Запуск примеров на QEMU в Linux без графической оболочки

Чтобы запустить пример на QEMU в Linux без графической оболочки, перейдите в директорию с примером, соберите пример и выполните следующие команды:

$ cd build/einit # Перед выполнением следующей команды убедитесь, что путь к # директории с исполняемым файлом qemu-system-aarch64 сохранен в # переменной окружения PATH. В случае отсутствия # добавьте его в переменную PATH. $ qemu-system-aarch64 -m 2048 -machine vexpress-a15,secure=on -cpu cortex-a72 -nographic -monitor none -smp 4 -nic user -serial stdio -kernel kos-qemu-image
В начало
[Topic running_sample_programs_qemu]

Подготовка Raspberry Pi 4 B к запуску примеров

Коммутация компьютера и Raspberry Pi 4 B

Чтобы видеть вывод с Raspberry Pi 4 B на компьютере и иметь возможность отладки, выполните следующие действия:

  1. Соедините пины преобразователей USB-UART на базе FT232 с соответствующими GPIO-пинами Raspberry Pi 4 B (см. рис. ниже). Если отладку выполнять не требуется, то достаточно подключить один преобразователь USB-UART для вывода.

    RPI_USB

    Схема соединения преобразователей USB-UART и Raspberry Pi 4 B

  2. Соедините USB-порты компьютера и преобразователи USB-UART.
  3. Установите PuTTY или другую аналогичную программу. Настройте параметры следующим образом: bps = 115200, data bits = 8, stop bits = 1, parity = none, flow control = none. Задайте порт USB, через который подключен преобразователь USB-UART, используемый для получения вывода с Raspberry Pi 4 B.

Чтобы компьютер и Raspberry Pi 4 B могли взаимодействовать через сеть Ethernet, выполните следующие действия:

  1. Соедините сетевые карты компьютера и Raspberry Pi 4 B с коммутатором или друг с другом.
  2. Выполните настройку сетевой карты компьютера, чтобы ее IP-адрес был в одной подсети с IP-адресом сетевой карты Raspberry Pi 4 B (параметры сетевой карты Raspberry Pi 4 B задаются в файле dhcpcd.conf, который находится по пути <название примера>/resources/...).

Подготовка загрузочной SD-карты для Raspberry Pi 4 B

Если при сборке примера был создан образ hdd.img, то достаточно записать получившийся образ на SD-карту. Для этого подключите SD-карту к компьютеру и выполните следующую команду:

# В следующей команде path_to_img – путь к файлу образа, # [X] – последний символ в имени блочного устройства для SD-карты. $ sudo pv -L 32M path_to_img | sudo dd bs=64k of=/dev/sd[X] conv=fsync

Если при сборке примера был создан образ kos-image, то перед записью образа на SD-карту, её нужно дополнительно подготовить. Загрузочную SD-карту для Raspberry Pi 4 B можно подготовить автоматически и вручную. После подготовки SD-карты, необходимо скопировать файл kos-image из директории <название примера>/build/einit в загрузочную область (раздел с FAT32) подготовленной SD-карты.

Чтобы подготовить загрузочную SD-карту автоматически, подключите SD-карту к компьютеру и выполните следующие команды:

# Для создания файла образа загрузочного носителя (*.img) # выполните скрипт: $ sudo /opt/KasperskyOS-Community-Edition-<version>/common/rpi4_prepare_sdcard_image.sh # В следующей команде path_to_img – путь к файлу образа # загрузочного носителя (этот путь выводится по окончании # выполнения предыдущей команды), [X] – последний символ # в имени блочного устройства для SD-карты. $ sudo pv -L 32M path_to_img | sudo dd bs=64k of=/dev/sd[X] conv=fsync

Чтобы подготовить загрузочную SD-карту вручную, выполните следующие действия:

  1. Если при работе с KasperskyOS Community Edition используется Docker-контейнер, то ему требуется предоставить доступ к устройствам в директории /dev на хост-системе. Для этого при запуске Docker-контейнера добавьте в команду запуска следующий параметр:
    -v /dev:/dev
  2. Выполните сборку загрузчика U-Boot для платформы ARMv8, который будет автоматически запускать пример. Для этого выполните следующие команды:
    $ sudo apt install git build-essential libssl-dev bison flex unzip parted gcc-aarch64-linux-gnu udev dosfstools pv -y $ git clone --depth 1 --branch v2022.01 https://github.com/u-boot/u-boot.git u-boot-armv8 $ cd u-boot-armv8 $ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- rpi_4_defconfig $ echo 'CONFIG_SERIAL_PROBE_ALL=y' > ./.custom_config $ echo 'CONFIG_BOOTCOMMAND="fatload mmc 0 ${loadaddr} kos-image; bootelf ${loadaddr} ${fdt_addr}"' >> ./.custom_config $ echo 'CONFIG_PREBOOT="pci enum;"' >> ./.custom_config $ ./scripts/kconfig/merge_config.sh '.config' '.custom_config' $ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- u-boot.bin
  3. Подготовьте образ с файловой системой для SD-карты.
    # Образ будет содержать boot-раздел на 1 ГБ в fat32 и три раздела по 350 МБ в ext2, ext3 и ext4 соответственно. $ fs_image_name=sdcard.img $ dd if=/dev/zero of=${fs_image_name} bs=1024k count=2048 $ sudo parted ${fs_image_name} mklabel msdos $ loop_device=$(sudo losetup --find --show --partscan ${fs_image_name}) $ sudo parted ${loop_device} mkpart primary fat32 8192s 50% $ sudo parted ${loop_device} mkpart extended 50% 100% $ sudo parted ${loop_device} mkpart logical ext2 50% 67% $ sudo parted ${loop_device} mkpart logical ext3 67% 84% $ sudo parted ${loop_device} mkpart logical ext4 84% 100% $ sudo parted ${loop_device} set 1 boot on $ sudo mkfs.vfat ${loop_device}p1 $ sudo mkfs.ext2 ${loop_device}p5 $ sudo mkfs.ext3 ${loop_device}p6 $ sudo mkfs.ext4 -O ^64bit,^extent ${loop_device}p7
  4. Скопируйте загрузчик U-Boot и встроенное программное обеспечение (англ. firmware) для Raspberry Pi 4 B на полученный образ файловой системы, выполнив следующие команды:
    # В следующих командах путь ~/mnt/fat32 используется для примера. # Вы можете использовать другой путь. $ mount_temp_dir=~/mnt/fat32 $ mkdir -p ${mount_temp_dir} $ sudo mount ${loop_device}p1 ${mount_temp_dir} $ git clone --depth 1 --branch 1.20220331 https://github.com/raspberrypi/firmware.git firmware $ sudo cp u-boot.bin ${mount_temp_dir}/u-boot.bin $ sudo cp -r firmware/boot/. ${mount_temp_dir}
  5. Заполните конфигурационный файл для загрузчика U-Boot в образе используя следующие команды:
    $ sudo sh -c "echo '[all]' > ${mount_temp_dir}/config.txt" $ sudo sh -c "echo 'arm_64bit=1' >> ${mount_temp_dir}/config.txt" $ sudo sh -c "echo 'enable_uart=1' >> ${mount_temp_dir}/config.txt" $ sudo sh -c "echo 'kernel=u-boot.bin' >> ${mount_temp_dir}/config.txt" $ sudo sh -c "echo 'dtparam=i2c_arm=on' >> ${mount_temp_dir}/config.txt" $ sudo sh -c "echo 'dtparam=i2c=on' >> ${mount_temp_dir}/config.txt" $ sudo sh -c "echo 'dtparam=spi=on' >> ${mount_temp_dir}/config.txt" $ sudo sh -c "echo 'device_tree_address=0x2eff5b00' >> ${mount_temp_dir}/config.txt" $ sudo sh -c "echo 'device_tree_end=0x2f0f5b00' >> ${mount_temp_dir}/config.txt" $ sudo sh -c "echo 'dtoverlay=uart5' >> ${mount_temp_dir}/config.txt" $ sudo umount ${mount_temp_dir} $ sudo losetup -d ${loop_device}
  6. Запишите получившийся образ на SD-карту. Для этого подключите SD-карту к компьютеру и выполните следующую команду:
    # В следующей команде [X] – последний символ в имени блочного устройства для SD-карты. $ sudo pv -L 32M ${fs_image_name} | sudo dd bs=64k of=/dev/sd[X] conv=fsync
  7. После подготовки SD-карты, необходимо скопировать файл kos-image из директории <название примера>/build/einit в загрузочную область (раздел с FAT32) подготовленной SD-карты.
В начало
[Topic preparing_sd_card_rpi]

Подготовка Radxa ROCK 3A к запуску примеров

Коммутация компьютера и Radxa ROCK 3A

Чтобы видеть вывод с Radxa ROCK 3A на компьютере и иметь возможность отладки, выполните следующие действия:

  1. Соедините пины преобразователей USB-UART с соответствующими GPIO-пинами Radxa ROCK 3A (см. рис. ниже). Если отладку выполнять не требуется, то достаточно подключить один преобразователь USB-UART для вывода.

    RPI_USB

    Схема соединения преобразователей USB-UART и Radxa ROCK 3A

  2. Соедините USB-порты компьютера и преобразователи USB-UART.
  3. Установите PuTTY или другую аналогичную программу. Настройте параметры следующим образом: bps = 1500000, data bits = 8, stop bits = 1, parity = none, flow control = none. Задайте порт USB, через который подключен преобразователь USB-UART, используемый для получения вывода с Radxa ROCK 3A.

Чтобы компьютер и Radxa ROCK 3A могли взаимодействовать через сеть Ethernet, выполните следующие действия:

  1. Соедините сетевые карты компьютера и Radxa ROCK 3A с коммутатором или друг с другом.
  2. Выполните настройку сетевой карты компьютера, чтобы ее IP-адрес был в одной подсети с IP-адресом сетевой карты Radxa ROCK 3A (параметры сетевой карты Radxa ROCK 3A задаются в файле dhcpcd.conf, который находится по пути <название примера>/resources/...).

Отладка программ на для Radxa ROCK 3A

Для того чтобы выполнять отладку программ, запущенных на Radxa ROCK 3A, необходимо:

  1. Подключить второй преобразователь USB-UART (см. рис. выше).
  2. В домашней директории пользователя создать файл .gdbinit и добавить в него следующие строки:
    set sysroot /opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos add-symbol-file <path_to_debuggee>/build/einit/EinitQemu-kss/ksm.module set follow-fork-mode parent set follow-exec-mode same set detach-on-fork off set schedule-multiple on set serial baud 115200 target extended-remote /dev/ttyUSB[n]
  3. В файл CmakeLists.txt в директории <path_to_debuggee>/einit добавить параметр GDBSTUB_KERNEL в вызов команды build_kos_hw_image ().
  4. Выполнить сборку программы. После запуска и инициализации в выводе появится запись: [KDBG ] Waiting for GDB connection infinitely. Приложение остановится, ожидая подключения отладчика.
  5. Для подключения отладчика необходимо запустить gdb из SDK: /opt/KasperskyOS-Community-Edition-<version>/toolchain/bin/aarch64-kos-gdb.
  6. После запуска отладчика в выводе появится запись: [KDBG ] Connection to GDB was established.

    Подробнее см. "Подготовка к отладке на аппаратной платформе" и "Начальные шаги отладки на аппаратной платформе".

Подготовка загрузочной SD-карты для Radxa ROCK 3A

Если при сборке примера был создан образ hdd.img, то достаточно записать получившийся образ на SD-карту. Для этого подключите SD-карту к компьютеру и выполните следующую команду:

# В следующей команде path_to_img – путь к файлу образа, # [X] – последний символ в имени блочного устройства для SD-карты. $ sudo pv -L 32M path_to_img | sudo dd bs=64k of=/dev/sd[X] conv=fsync

Если при сборке примера был создан образ kos-image, то перед записью образа на SD-карту, её нужно дополнительно подготовить. Загрузочную SD-карту для Radxa ROCK 3A можно подготовить автоматически и вручную. После подготовки SD-карты, необходимо скопировать файл kos-image из директории <название примера>/build/einit в загрузочную область (раздел с FAT32) подготовленной SD-карты.

Чтобы подготовить загрузочную SD-карту автоматически, подключите SD-карту к компьютеру и выполните следующие команды:

# Для создания файла образа загрузочного носителя (*.img) # выполните скрипт: $ sudo /opt/KasperskyOS-Community-Edition-<version>/common/radxa_prepare_sdcard_image.sh # В следующей команде path_to_img – путь к файлу образа # загрузочного носителя (этот путь выводится по окончании # выполнения предыдущей команды), [X] – последний символ # в имени блочного устройства для SD-карты. $ sudo pv -L 32M path_to_img | sudo dd bs=64k of=/dev/sd[X] conv=fsync

Очистка flash памяти Radxa ROCK 3A

В некоторых модификациях Radxa ROCK 3A во флеш-памяти может находиться загрузчик, который несовместим с картой, подготовленной по инструкции выше.

Если при запуске примеров на Radxa ROCK 3A вы видите сообщение "SPL: failed to boot from all boot devices", то вам необходимо очистить флеш-память Radxa ROCK 3A перед запуском примеров.

Чтобы очистить флеш-память Radxa ROCK 3A:

  1. Скачайте и установите утилиту rkdeveloptool.

    Инструкции по установке утилиты приведены в документации: https://docs.radxa.com/en/rock3/rock3a/low-level-dev/rkdeveloptool?host-os=debian#installation-for-rkdeveloptool

  2. Скачайте загрузчик для взаимодействия с Radxa ROCK 3A: https://dl.radxa.com/rock3/images/loader/rk356x_spl_loader_ddr1056_v1.12.109_no_check_todly.bin
  3. Переведите Radxa ROCK 3A в режим Maskrom:
    1. Отключите питание.
    2. Извлеките SD-карту (и модуль eMMC при наличии).
    3. Соедините USB-порт компьютера с портом ROCK 3A OTG (верхний порт USB3.0).
    4. Соедините пины Radxa ROCK 3A как показано на рисунке ниже и подайте питание на Radxa ROCK 3A.

      RPI_USB

    5. Разомкните пины, соединенные на предыдущем шаге.
    6. Убедитесь, что Radxa ROCK 3A находится в режиме Maskrom, выполнив в терминале следующую команду:
      $: rkdeveloptool ld DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=104 Maskrom
  4. Скопируйте на Radxa ROCK 3A загрузчик для инициализации оперативной памяти и подготовки среды прошивки, выполнив в терминале следующую команду:
    rkdeveloptool db rk356x_spl_loader_ddr1056_v1.12.109_no_check_todly.bin
  5. Очистите флеш-память Radxa ROCK 3A, выполнив в терминале следующие команды:
    rkdeveloptool ef rkdeveloptool rd
В начало
[Topic preparing_sd_card_radxa]

Запуск примеров на Raspberry Pi 4 B или Radxa ROCK 3A

Чтобы запустить пример на Raspberry Pi 4 B или Radxa ROCK 3A, выполните следующие действия:

  1. Перейдите в директорию с примером и соберите пример.
  2. Убедитесь, что Raspberry Pi 4 B или Radxa ROCK 3A и загрузочная SD-карта подготовлены к запуску примеров.
  3. Подключите загрузочную SD-карту к Raspberry Pi 4 B или Radxa ROCK 3A.
  4. Подайте питание на Raspberry Pi 4 B или Radxa ROCK 3A и дождитесь, пока запустится пример.

    О том, что пример запустился, свидетельствует вывод, отображаемый на компьютере, к которому подключен Raspberry Pi 4 B или Radxa ROCK 3A.

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

Если при запуске примеров на Radxa ROCK 3A вы видите сообщение "SPL: failed to boot from all boot devices", то вам необходимо очистить флеш-память Radxa ROCK 3A перед запуском примеров. Подробнее см. "Подготовка Radxa ROCK 3A к запуску примеров".

В начало
[Topic running_sample_programs_rpi]