KasperskyOS Community Edition 1.2

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

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

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

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

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

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

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

В начало
[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.
  6. Для корректной работы некоторых примеров необходимо добавить внутри контейнера директорию /usr/sbin в переменную окружения PATH, выполнив следующую команду:

    export PATH=/usr/sbin:$PATH

В начало
[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>/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

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

В начало
[Topic sdk_install_and_remove]

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

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

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

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

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

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

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

Например, работа с исходным кодом при разработке под KasperskyOS может проводиться в Visual Studio Code.

Для более удобной навигации по коду проекта, включая системный 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-aarch64-kos/include.
  6. Закройте окно C/C++ Configurations.
В начало
[Topic ide_settings][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

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

$ ./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. Исходный код загрузчика U-Boot и встроенное программное обеспечение загружаются с сайта https://github.com. Файл образа файловой системы rpi4kos.img сохраняется в директории <название примера>/build.

В начало
[Topic building_sample_programs]

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

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

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

$ sudo ./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 (см. рис. ниже).

    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

Если при сборке примера был создан образ rpi4kos.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-карту автоматически, подключите 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. Выполните сборку загрузчика U-Boot для платформы ARMv8, который будет автоматически запускать пример. Для этого выполните следующие команды:
    $ sudo apt install git build-essential libssl-dev bison flex unzip parted gcc-aarch64-linux-gnu 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
  2. Подготовьте образ с файловой системой для 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
  3. Скопируйте загрузчик 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}
  4. Заполните конфигурационный файл для загрузчика 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}
  5. Запишите получившийся образ на SD-карту. Для этого подключите SD-карту к компьютеру и выполните следующую команду:
    # В следующей команде [X] – последний символ в имени блочного устройства для SD-карты. $ sudo pv -L 32M ${fs_image_name} | sudo dd bs=64k of=/dev/sd[X] conv=fsync
В начало
[Topic preparing_sd_card_rpi]

Запуск примеров на Raspberry Pi 4 B

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

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

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

В начало
[Topic running_sample_programs_rpi]