Содержание
Начало работы
Этот раздел содержит информацию, необходимую для начала работы с KasperskyOS Community Edition.
Использование Docker-контейнера
Для установки и использования KasperskyOS Community Edition можно использовать Docker-контейнер, в котором развернут образ одной из поддерживаемых операционных систем.
Чтобы использовать Docker-контейнер для установки KasperskyOS Community Edition:
- Убедитесь что программное обеспечение Docker установлено и запущено.
- Для загрузки официального Docker-образа операционной системы Ubuntu GNU/Linux 22.04 "Jammy Jellyfish" из публичного репозитория Docker Hub выполните следующую команду:
docker pull ubuntu:22.04
- Для запуска образа выполните следующую команду:
docker run --net=host --user root --privileged -it --rm ubuntu:22.04 bash
- Скопируйте deb-пакет для установки KasperskyOS Community Edition в контейнер.
- Установите KasperskyOS Community Edition.
Установка и удаление
Установка
KasperskyOS Community Edition поставляется в виде deb-пакета. Для установки KasperskyOS Community Edition мы рекомендуем использовать установщик пакетов apt
.
Для развертывания пакета с помощью apt
запустите команду:
Пакет будет установлен в директорию /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
:
Параметры:
-d
Отменяет действие скрипта.
-h
,--help
Отображает текст справки.
Помимо изменения переменной окружения PATH
скрипт задает переменные окружения KOSCEVER
и KOSCEDIR
, которые содержат версию и абсолютный путь к KasperskyOS Community Edition SDK соответственно. Использование этих переменных окружения позволяет системе сборки при запуске определить путь установки SDK, а также проверить, что версия решения соответствует версии SDK.
Удаление
Перед удалением KasperskyOS Community Edition отмените действие скрипта set_env.sh
, если выполняли этот скрипт после установки SDK.
Для удаления KasperskyOS Community Edition выполните команду:
В результате выполнения этой команды будут удалены все установленные файлы в директории /opt/KasperskyOS-Community-Edition-<version>
.
Настройка среды разработки
В этом разделе содержится краткое руководство по настройке среды разработки и добавлению заголовочных файлов, поставляемых в 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, необходимо выполнить следующие действия:
- Создайте новую рабочую область (workspace) или откройте существующую рабочую область в Visual Studio Code.
Рабочая область может быть открыта неявно, с помощью пунктов меню
File
>Open folder
. - Убедитесь, что расширение C/C++ for Visual Studio Code установлено.
- В меню
View
выберите пунктCommand Palette
. - Выберите пункт
C/C++: Edit Configurations (UI)
. - В поле
Include path
добавьте путь/opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/include
. - Закройте окно
C/C++ Configurations
.
Расширение KasperskyOS SDK Extension for Visual Studio Code
Расширение KasperskyOS SDK Extension for Visual Studio Code (далее также KasperskyOS SDK Extension) обеспечивает интеграцию KasperskyOS Community Edition с редактором исходного кода Visual Studio Code.
Установка и удаление расширения
Установка зависимостей
Зависимости расширения автоматически устанавливаются из магазина расширений Visual Studio Code. Если на вашем компьютере имеется доступ к магазину расширений Visual Studio Code, вы можете пропустить перечисленные ниже шаги по установке зависимостей и перейти к разделу "Установка расширения" ниже.
В противном случае, вам потребуется вручную установить зависимости для расширения. Для установки зависимостей KasperskyOS SDK Extension for Visual Studio Code выполните следующие действия:
- На другом компьютере с имеющимся доступом к магазину расширений Visual Studio Code откройте адрес https://marketplace.visualstudio.com/vscode в браузере.
- Найдите и скачайте расширения:
cpptools
– требуется для работы с отладчиком.clangd
– требуется для статического анализа исходного кода.devcontainers
– требуется для поддержки Docker.
- Скопируйте полученные VSIX-файлы на компьютер, на котором требуется установить расширение KasperskyOS SDK Extension.
- Откройте среду разработки Visual Studio Code.
- Нажмите на клавишу F1.
- Выполните команду
Extensions: Install from VSIX...
в появившейся в верхней части окна командной строке. - Установите скачанные на шаге 2 расширения.
Установка расширения
Для установки KasperskyOS SDK Extension выполните следующие действия:
- Откройте среду разработки Visual Studio Code.
- Нажмите на клавишу F1.
- Выполните команду
Extensions: Install from VSIX...
в появившейся в верхней части окна командной строке. - Выберите файл расширения
kos-extension-<version>.vsix
, расположенный в директории/opt/KasperskyOS-Community-Edition-<version>/dev_tools/ide_integration/vscode/
.При установке расширения KasperskyOS SDK Extension автоматически устанавливаются его зависимости.
Удаление расширения
Для удаления расширения нажмите комбинацию клавиш CTRL+SHIFT+X, найдите расширение в списке и в контекстном меню расширения выберите команду Uninstall.
В началоФункции расширения
Расширение автоматически обнаруживает в открытом рабочем пространстве проект KasperskyOS и запускается. Параметр обнаружения – наличие в рабочем пространстве файла .vscode/kos_project.json
или директории einit
. Если расширение автоматически не активировалось в директории, но вы уверены, что это проект KasperskyOS, то выполните команду KOS: Activate extension in this directory
. Команда активирует расширение и создает в директории проекта пустой файл .vscode/kos_project.json
. Чтобы отменить ручную активацию, удалите этот файл.
После запуска расширение добавляет на нижнюю панель редактора кода Visual Studio Code следующие кнопки:
– выбор цели сборки;
– запуск проекта в QEMU;
– запуск выбранной цели с отладкой;
– сборка всех целей;
– сборка выбранной цели;
– очистка директории сборки;
– переключение типа сборки;
– включение/отключение сборки проекта с тестами;
– выбор целевой платформы для сборки;
– выбор устройства или эмулятора QEMU;
– отображение версии SDK.
Функции, которые предоставляют кнопки, также можно вызвать из командной строки редактора кода, открываемой по нажатию на клавишу F1. Все команды имеют префикс KOS:
.
Работа с базовым образом KasperskyOS
Расширение позволяет не выполнять полную сборку решения на базе KasperskyOS после внесения изменений в код прикладной программы, а вместо этого использовать следующий сценарий:
- Запуск в эмуляторе QEMU базового образа решения на базе KasperskyOS, входящего в состав SDK. В базовом образе содержатся все системные программы, необходимые для запуска и отладки программ, упакованных в KPA-пакеты.
- Сборка прикладной программы и ее упаковка в KPA-пакет. Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать
CMake
-команды библиотеки kpa. - Установка программы из KPA-пакета в запущенный на шаге 1 образ решения и ее запуск под управлением KasperskyOS.
- Внесение изменений в код прикладной программы.
- Повторение шагов 2-5.
- Расширение также позволяет отлаживать программу, запущенную в базовом образе KasperskyOS. Подробнее см. "Отладка программ в составе KPA-пакета".
Создание базового описания политики безопасности решения
Расширение позволяет автоматически создавать простейшие описания политики безопасности решения для проекта.
Чтобы создать базовое описание политики безопасности:
- Убедитесь, что расширение KasperskyOS SDK Extension установлено и активно.
- Нажмите на клавишу F1.
- Выполните команду
KOS: Generate policy file for current project
. - Выберите тип базового описания политики, который вы хотите создать:
Grant all permissions
- создать простейшее описание политики безопасности решения, которая разрешает любые взаимодействия процессов любых классов между собой и с ядром KasperskyOS, а также разрешает любому процессу инициализировать запуск процессов.Grant necessary permissions
- создать простейшее описание политики безопасности решения, которая разрешает любые взаимодействия процессов любых классов между собой и с ядром KasperskyOS, а также определяет необходимые разрешения для инициализации запуска процессов на основе файла init.yaml.in в составе проекта.
- Введите имя файла для сохранения созданного описания политики безопасности.
Эти политики можно использовать только в качестве заглушек на ранних стадиях разработки решения на базе KasperskyOS, чтобы модуль безопасности Kaspersky Security Module "не мешал" взаимодействиям. В реальном решении на базе KasperskyOS применять такие политики недопустимо.
Запуск тестов
После активации расширения на боковой панели Visual Studio Code появляется вкладка Testing – . При выборе вкладки Testing в окне редактора кода отобразится дерево тестов, созданных с помощью библиотеки Google Test и обнаруженных в файлах директории
test/
.
Для запуска тестов нажмите на кнопку . По умолчанию запускаются все обнаруженные тесты, но вы можете выбирать определенные тесты на вкладках с исходным кодом тестов или определенные группы тестов, выбирая их из дерева всех тестов. Запускать можно только тесты, которые добавлены в файлы
CMakeLists.txt
для сборки программ с помощью CMake
-команд kl_kos_add_small_test()
или generate_kos_test()
из CMake
-библиотеки TestGenerator, поставляемой в составе SDK.
Результаты работы тестов, а также файлы журналов находятся в директории <директория_сборки>/bin/tests/output
.
Запуск тестов политик безопасности решения
Расширение позволяет запускать тесты политики безопасности решения для проекта, созданные на основе описания политики безопасности решения.
Чтобы собрать и выполнить тесты политики безопасности решения:
- Убедитесь, что описание политики безопасности решения содержит тесты политики безопасности решения.
- Убедитесь, что
CMake
-команды сборки тестов политики безопасности решения добавлены в один из файловCMakeLists.txt
проекта. - Убедитесь, что расширение KasperskyOS SDK Extension установлено и активно.
- Выполните сборку всех целей, нажав на кнопку
на нижней панели.
- Нажмите на кнопку
выбора цели сборки и выберите цель с именем
kos-qemu-image-PalTest<N>-sim
, где N – индекс PSL-файла в списке PSL-файлов, содержащих тесты политики безопасности решения. - Нажмите на кнопку сборки выбранной цели
.
Запуск базового образа решения на базе KasperskyOS
Базовый образ решения на базе KasperskyOS входит в состав SDK и содержит все системные программы, необходимые для запуска и отладки программ, упакованных в KPA-пакеты.
Чтобы запустить базовый образ решения KasperskyOS из Visual Studio Code:
- Убедитесь, что расширение KasperskyOS SDK Extension установлено и активно.
- Нажмите на кнопку выбора устройства
на нижней панели или нажмите на клавишу
F1
и выполните командуKOS: Select Device
. - Выберите Create new emulator.
- Выберите kos_base-dev.
- В отобразившемся поле введите дополнительные флаги QEMU и нажмите Enter, либо сразу нажмите Enter чтобы использовать флаги по умолчанию.
- В отобразившемся поле введите имя нового эмулятора и нажмите Enter, либо сразу нажмите Enter чтобы использовать автоматически сгенерированное имя.
- Дождитесь завершения предыдущей команды.
- В отобразившемся уведомлении о создании нового эмулятора нажмите на кнопку Start.
- Дождитесь окончания загрузки эмулятора.
Сборка программ в Visual Studio Code
Чтобы собрать программу в Visual Studio Code:
- Откройте директорию проекта программы в Visual Studio Code.
- Убедитесь, что проект верно определился по наличию дополнительных кнопок расширения на нижней панели. Если кнопки не появились, то активируйте решение вручную, выполнив команду KOS: Activate extension in this directory.
- Выберите архитектуру сборки, нажав на кнопку выбора целевой платформы для сборки
.
- Выполните сборку всех целей, нажав на кнопку
на нижней панели.
Запуск программ в базовом образе решения
Если запускаемая программа использует файловые системы (через компонент VFS), то перед запуском необходимо:
- Вызвать через меню окно параметров расширения: File → Preferences → Settings, далее Extensions → KasperskyOS.
- Выставить значение
client:kl.VfsSdCardFs
для переменной окруженияVFS_FILESYSTEM_BACKEND
в параметреApplication Environment Variables
.
Чтобы запустить программу в базовом образе решения:
- Откройте директорию проекта программы в Visual Studio Code.
- Убедитесь, что проект верно определился по наличию дополнительных кнопок расширения на нижней панели. Если кнопки не появились, то активируйте решение вручную, выполнив команду KOS: Activate extension in this directory.
- Убедитесь, что базовый образ решения запущен в соответствии с инструкцией в разделе "Запуск базового образа решения на базе KasperskyOS".
- Нажмите на кнопку выбора устройства или эмулятора QEMU
на нижней панели.
- Выберите запущенный ранее базовый образ решения.
- Выполните сборку программы в соответствии с инструкцией в разделе "Сборка программы в Visual Studio Code".
- Убедитесь, для программа упакована в KPA-пакет.
Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать
CMake
-команды библиотеки kpa. - Нажмите на кнопку выбора цели
и в раскрывающемся списке выберите собранный KPA-пакет программы, подписанный в списке как
[application]
. - Нажмите на кнопку запуска
. Программа будет установлена в выбранный базовый образ и автоматически запущена.
Отладка программы в составе KPA-пакета
Отладка программы в составе KPA-пакета, в отличие от отладки программ в решении на базе KasperskyOS, позволяет не выполнять полную сборку решения на базе KasperskyOS после внесения изменений в код прикладной программы.
Сценарий отладки программы в составе KPA-пакета выглядит следующим образом:
- Установка расширения KasperskyOS SDK Extension.
- Сборка прикладной программы и ее упаковка в KPA-пакет. Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать
CMake
-команды библиотеки kpa. - Запуск базового образа KasperskyOS из состава KasperskyOS Community Edition со встроенным в ядро GDB-сервером.
- Подключение отладчика к GDB-серверу ядра. Отладчик можно подключить при старте программы или при работе программы. Подробнее:
- Отладка программы с помощью графического интерфейса Visual Studio Code. Подробнее см. документацию Visual Studio Code: https://code.visualstudio.com/docs/editor/debugging.
Подключение отладчика при старте программы в базовом образе
Чтобы подключить отладчик к GDB-серверу ядра при старте программы в QEMU с помощью расширения Visual Studio Code:
- Установите точку останова в исходном коде программы перед отлаживаемым фрагментом.
- Соберите программу. Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать
CMake
-команды библиотеки kpa. - Запустите базовый образ KasperskyOS из состава KasperskyOS Community Edition.
- Дождитесь окончания загрузки базового образа и установите программу с помощью команды
KOS: Install package
. - В боковой панели Visual Studio Code нажмите Run and debug > create a launch.json file , а затем выберите KasperskyOS Debugger.
В результате будет создан файл конфигурации отладки
launch.json
. - В файле
launch.json
в поле конфигурации с именем(kos/gdb) Launch & debug application
укажите путь до бинарного файла вашей программы, полученного в результате сборки и имя программы. В полеeiid
необходимо указать значениеkl.Kds
. - Запустите отладку, нажав на кнопку
(kos/gdb) Launch & debug application
на нижней панели. - В раскрывающемся списке выберите конфигурацию с именем
(kos/gdb) Launch & debug application
. - В отладочной консоли появится сообщение, что программа готова к отладке. Нажмите на кнопку Continue и выполнение программы будет остановлено на выбранной в п.1 точке останова.
Подключение отладчика при работе программы, запущенной в базовом образе
Чтобы подключить отладчик к GDB-серверу ядра при работе программы в QEMU с помощью расширения Visual Studio Code:
- Добавьте в функцию
main
программы бесконечный цикл. Это позволит отладчику подключиться к работающей программе. - Установите точку останова в исходном коде программы перед отлаживаемым фрагментом.
- Соберите программу. Для того чтобы упаковать прикладную программу в KPA-пакет, необходимо использовать
CMake
-команды библиотеки kpa. - Запустите базовый образ KasperskyOS из состава KasperskyOS Community Edition.
- В боковой панели Visual Studio Code нажмите Run and debug > create a launch.json file , а затем выберите KasperskyOS Debugger.
В результате будет создан файл конфигурации отладки
launch.json
. - В файле
launch.json
в поле конфигурации с именем(kos/gdb) Attach to process
укажите путь до бинарного файла вашей программы, полученного в результате сборки. - Запустите программу в базовом образе.
- Запустите отладку, нажав на кнопку
(kos/gdb) Attach to process
на нижней панели. - В раскрывающемся списке выберите конфигурацию с именем
(kos/gdb) Attach to process
и выберите имя программы для отладки. - В отладочной консоли появится сообщение, что программа готова к отладке. Нажмите на кнопку Continue и выполнение программы будет остановлено на выбранной в п.2 точке останова.
Параметры расширения
Расширение имеет параметры, располагающиеся в хранилище Visual Studio Code, вызываемом через меню: File → Preferences → Settings, далее Extensions → KasperskyOS.
Параметры расширения
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.
Сборка примеров
Сборка примеров осуществляется с помощью системы сборки CMake
, входящей в состав KasperskyOS Community Edition.
Код примеров и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples
Сборку примеров нужно выполнять в директории, к которой у вас есть доступ на запись, например, скопировав директорию с примером в домашнюю директорию.
Сборка примеров для запуска на QEMU
Чтобы выполнить сборку примера, перейдите в директорию с примером и выполните команду:
В результате работы скрипта cross-build.sh
создается образ решения на базе KasperskyOS, который включает пример, и инициируется запуск примера на QEMU. Файл образа решения kos-qemu-image
сохраняется в директории <название примера>/build/einit
.
Сборка примеров для запуска на Raspberry Pi 4 B или Radxa ROCK 3A
Чтобы выполнить сборку примера, перейдите в директорию с примером и выполните команду:
Какой образ создается в результате работы скрипта 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).
Запуск примеров на QEMU
Запуск примеров на QEMU в Linux с графической оболочкой
Запуск примеров нужно выполнять в директории сборки, к которой у вас есть доступ на запись.
Запуск примера на QEMU в Linux с графической оболочкой осуществляется скриптом cross-build.sh
, который также выполняет сборку примера. Чтобы запустить скрипт, перейдите в директорию с примером и выполните команду:
Запуск примеров на QEMU в Linux без графической оболочки
Чтобы запустить пример на QEMU в Linux без графической оболочки, перейдите в директорию с примером, соберите пример и выполните следующие команды:
Подготовка Raspberry Pi 4 B к запуску примеров
Коммутация компьютера и Raspberry Pi 4 B
Чтобы видеть вывод с Raspberry Pi 4 B на компьютере и иметь возможность отладки, выполните следующие действия:
- Соедините пины преобразователей USB-UART на базе FT232 с соответствующими GPIO-пинами Raspberry Pi 4 B (см. рис. ниже). Если отладку выполнять не требуется, то достаточно подключить один преобразователь USB-UART для вывода.
Схема соединения преобразователей USB-UART и Raspberry Pi 4 B
- Соедините USB-порты компьютера и преобразователи USB-UART.
- Установите 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, выполните следующие действия:
- Соедините сетевые карты компьютера и Raspberry Pi 4 B с коммутатором или друг с другом.
- Выполните настройку сетевой карты компьютера, чтобы ее IP-адрес был в одной подсети с IP-адресом сетевой карты Raspberry Pi 4 B (параметры сетевой карты Raspberry Pi 4 B задаются в файле
dhcpcd.conf
, который находится по пути<название примера>/resources/...
).
Подготовка загрузочной SD-карты для Raspberry Pi 4 B
Если при сборке примера был создан образ hdd.img
, то достаточно записать получившийся образ на SD-карту. Для этого подключите SD-карту к компьютеру и выполните следующую команду:
Если при сборке примера был создан образ kos-image
, то перед записью образа на SD-карту, её нужно дополнительно подготовить. Загрузочную SD-карту для Raspberry Pi 4 B можно подготовить автоматически и вручную. После подготовки SD-карты, необходимо скопировать файл kos-image
из директории <название примера>/build/einit
в загрузочную область (раздел с FAT32) подготовленной SD-карты.
Чтобы подготовить загрузочную SD-карту автоматически, подключите SD-карту к компьютеру и выполните следующие команды:
Чтобы подготовить загрузочную SD-карту вручную, выполните следующие действия:
- Если при работе с KasperskyOS Community Edition используется Docker-контейнер, то ему требуется предоставить доступ к устройствам в директории
/dev
на хост-системе. Для этого при запуске Docker-контейнера добавьте в команду запуска следующий параметр:-v /dev:/dev - Выполните сборку загрузчика 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
- Подготовьте образ с файловой системой для 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
- Скопируйте загрузчик 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}
- Заполните конфигурационный файл для загрузчика 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}
- Запишите получившийся образ на SD-карту. Для этого подключите SD-карту к компьютеру и выполните следующую команду:# В следующей команде [X] – последний символ в имени блочного устройства для SD-карты. $ sudo pv -L 32M ${fs_image_name} | sudo dd bs=64k of=/dev/sd[X] conv=fsync
- После подготовки SD-карты, необходимо скопировать файл
kos-image
из директории<название примера>/build/einit
в загрузочную область (раздел с FAT32) подготовленной SD-карты.
Подготовка Radxa ROCK 3A к запуску примеров
Коммутация компьютера и Radxa ROCK 3A
Чтобы видеть вывод с Radxa ROCK 3A на компьютере и иметь возможность отладки, выполните следующие действия:
- Соедините пины преобразователей USB-UART с соответствующими GPIO-пинами Radxa ROCK 3A (см. рис. ниже). Если отладку выполнять не требуется, то достаточно подключить один преобразователь USB-UART для вывода.
Схема соединения преобразователей USB-UART и Radxa ROCK 3A
- Соедините USB-порты компьютера и преобразователи USB-UART.
- Установите PuTTY или другую аналогичную программу. Настройте параметры следующим образом:
bps = 1500000, data bits = 8, stop bits = 1, parity = none, flow control = none
. Задайте порт USB, через который подключен преобразователь USB-UART, используемый для получения вывода с Radxa ROCK 3A.
Чтобы компьютер и Radxa ROCK 3A могли взаимодействовать через сеть Ethernet, выполните следующие действия:
- Соедините сетевые карты компьютера и Radxa ROCK 3A с коммутатором или друг с другом.
- Выполните настройку сетевой карты компьютера, чтобы ее IP-адрес был в одной подсети с IP-адресом сетевой карты Radxa ROCK 3A (параметры сетевой карты Radxa ROCK 3A задаются в файле
dhcpcd.conf
, который находится по пути<название примера>/resources/...
).
Отладка программ на для Radxa ROCK 3A
Для того чтобы выполнять отладку программ, запущенных на Radxa ROCK 3A, необходимо:
- Подключить второй преобразователь USB-UART (см. рис. выше).
- В домашней директории пользователя создать файл
.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] - В файл
CmakeLists.txt
в директории<path_to_debuggee>/einit
добавить параметрGDBSTUB_KERNEL
в вызов командыbuild_kos_hw_image ()
. - Выполнить сборку программы. После запуска и инициализации в выводе появится запись:
[KDBG ] Waiting for GDB connection infinitely
. Приложение остановится, ожидая подключения отладчика. - Для подключения отладчика необходимо запустить gdb из SDK:
/opt/KasperskyOS-Community-Edition-<version>/toolchain/bin/aarch64-kos-gdb
. - После запуска отладчика в выводе появится запись:
[KDBG ] Connection to GDB was established
.Подробнее см. "Подготовка к отладке на аппаратной платформе" и "Начальные шаги отладки на аппаратной платформе".
Подготовка загрузочной SD-карты для Radxa ROCK 3A
Если при сборке примера был создан образ hdd.img
, то достаточно записать получившийся образ на SD-карту. Для этого подключите SD-карту к компьютеру и выполните следующую команду:
Если при сборке примера был создан образ kos-image
, то перед записью образа на SD-карту, её нужно дополнительно подготовить. Загрузочную SD-карту для Radxa ROCK 3A можно подготовить автоматически и вручную. После подготовки SD-карты, необходимо скопировать файл kos-image
из директории <название примера>/build/einit
в загрузочную область (раздел с FAT32) подготовленной SD-карты.
Чтобы подготовить загрузочную SD-карту автоматически, подключите SD-карту к компьютеру и выполните следующие команды:
Очистка flash памяти Radxa ROCK 3A
В некоторых модификациях Radxa ROCK 3A во флеш-памяти может находиться загрузчик, который несовместим с картой, подготовленной по инструкции выше.
Если при запуске примеров на Radxa ROCK 3A вы видите сообщение "SPL: failed to boot from all boot devices"
, то вам необходимо очистить флеш-память Radxa ROCK 3A перед запуском примеров.
Чтобы очистить флеш-память Radxa ROCK 3A:
- Скачайте и установите утилиту
rkdeveloptool
.Инструкции по установке утилиты приведены в документации: https://docs.radxa.com/en/rock3/rock3a/low-level-dev/rkdeveloptool?host-os=debian#installation-for-rkdeveloptool
- Скачайте загрузчик для взаимодействия с Radxa ROCK 3A: https://dl.radxa.com/rock3/images/loader/rk356x_spl_loader_ddr1056_v1.12.109_no_check_todly.bin
- Переведите Radxa ROCK 3A в режим
Maskrom
:- Отключите питание.
- Извлеките SD-карту (и модуль eMMC при наличии).
- Соедините USB-порт компьютера с портом ROCK 3A OTG (верхний порт USB3.0).
- Соедините пины Radxa ROCK 3A как показано на рисунке ниже и подайте питание на Radxa ROCK 3A.
- Разомкните пины, соединенные на предыдущем шаге.
- Убедитесь, что Radxa ROCK 3A находится в режиме
Maskrom
, выполнив в терминале следующую команду:$: rkdeveloptool ld DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=104 Maskrom
- Скопируйте на Radxa ROCK 3A загрузчик для инициализации оперативной памяти и подготовки среды прошивки, выполнив в терминале следующую команду:rkdeveloptool db rk356x_spl_loader_ddr1056_v1.12.109_no_check_todly.bin
- Очистите флеш-память Radxa ROCK 3A, выполнив в терминале следующие команды:rkdeveloptool ef rkdeveloptool rd
Запуск примеров на Raspberry Pi 4 B или Radxa ROCK 3A
Чтобы запустить пример на Raspberry Pi 4 B или Radxa ROCK 3A, выполните следующие действия:
- Перейдите в директорию с примером и соберите пример.
- Убедитесь, что Raspberry Pi 4 B или Radxa ROCK 3A и загрузочная SD-карта подготовлены к запуску примеров.
- Подключите загрузочную SD-карту к Raspberry Pi 4 B или Radxa ROCK 3A.
- Подайте питание на 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 к запуску примеров".