Содержание
Начало работы
Этот раздел содержит информацию, необходимую для начала работы с KasperskyOS Community Edition.
Использование Docker-контейнера
Для установки и использования KasperskyOS Community Edition можно использовать Docker-контейнер, в котором развернут образ одной из поддерживаемых операционных систем.
Чтобы использовать Docker-контейнер для установки KasperskyOS Community Edition:
- Убедитесь что программное обеспечение Docker установлено и запущено.
- Для загрузки официального Docker-образа операционной системы Debian Buster 10.12 из публичного репозитория Docker Hub выполните следующую команду:
docker pull debian:10.12
- Для запуска образа выполните следующую команду:
docker run --net=host --user root --privileged -it --rm debian:10.12 bash
- Скопируйте deb-пакет для установки KasperskyOS Community Edition в контейнер.
- Установите KasperskyOS Community Edition.
- Для корректной работы некоторых примеров необходимо:
- Добавить внутри контейнера директорию
/usr/sbin
в переменную окруженияPATH
, выполнив следующую команду:export PATH=/usr/sbin:$PATH
- Установить программу
parted
внутри контейнера. Для этого добавьте следующую строку в/etc/apt/sources.list
:deb http://deb.debian.org/debian bullseye main
После этого выполните следующую команду:
sudo apt update && sudo apt install parted
- Добавить внутри контейнера директорию
Установка и удаление
Установка
KasperskyOS Community Edition поставляется в виде deb-пакета. Для установки KasperskyOS Community Edition мы рекомендуем использовать установщик пакетов apt
.
Для развертывания пакета с помощью apt
запустите с root-правами команду:
$ apt install <путь-к-deb-пакету>
Пакет будет установлен в директорию /opt/KasperskyOS-Community-Edition-<version>
.
Для удобства работы вы можете добавить путь к бинарным файлам инструментов KasperskyOS Community Edition в переменную PATH
, это позволит работать с утилитами через терминал из любой директории:
$ export PATH=$PATH:/opt/KasperskyOS-Community-Edition-<version>/toolchain/bin
Удаление
Для удаления KasperskyOS Community Edition выполните с root-правами команду:
$ apt remove --purge kasperskyos-community-edition
При этом будут удалены все установленные файлы в директории /opt/KasperskyOS-Community-Edition-<version>
.
Настройка среды разработки
В этом разделе содержится краткое руководство по настройке среды разработки и добавлению заголовочных файлов, поставляемых в 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, необходимо выполнить следующие действия:
- Создайте новую рабочую область (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-aarch64-kos/include
. - Закройте окно
C/C++ Configurations
.
Сборка примеров
Сборка примеров осуществляется с помощью системы сборки CMake
, входящей в состав KasperskyOS Community Edition.
Код примеров и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples
Сборку примеров нужно выполнять в домашней директории, поэтому директорию с примером, который требуется собрать, нужно скопировать из /opt/KasperskyOS-Community-Edition-<version>/examples
в домашнюю директорию.
Сборка примеров для запуска на QEMU
Чтобы выполнить сборку примера, перейдите в директорию с примером и выполните команду:
$ ./cross-build.sh
В результате работы скрипта cross-build.sh
создается образ решения на базе KasperskyOS, который включает пример. Файл образа решения kos-qemu-image
сохраняется в директории <название примера>/build/einit
.
Сборка примеров для запуска на Raspberry Pi 4 B
Чтобы выполнить сборку примера:
- Перейдите в директорию с примером.
- Откройте файл скрипта
cross-build.sh
в текстовом редакторе. - В последней строке скрипта замените команду
make sim
на командуmake kos-image
. - Сохраните файл скрипта, а затем выполните команду:
$ ./cross-build.sh
В результате работы скрипта cross-build.sh
создается образ решения на базе KasperskyOS, который включает пример. Файл образа решения kos-image
сохраняется в директории <название примера>/build/einit
.
Запуск примеров на QEMU
Запуск примеров на QEMU в Linux с графической оболочкой
Запуск примера на QEMU в Linux с графической оболочкой осуществляется скриптом cross-build.sh
, который также выполняет сборку примера. Чтобы запустить скрипт, перейдите в директорию с примером и выполните команду:
$ sudo ./cross-build.sh
Запуск некоторых примеров требует использования дополнительных параметров QEMU. Команды для запуска таких примеров приведены в описаниях этих примеров.
Запуск примеров на 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
Подготовка Raspberry Pi 4 B к запуску примеров
Коммутация компьютера и Raspberry Pi 4 B
Чтобы видеть вывод примеров на компьютере, выполните следующие действия:
- Соедините пины преобразователя USB-UART на базе FT232 с соответствующими GPIO-пинами Raspberry Pi 4 B (см. рис. ниже).
Схема соединения преобразователя USB-UART и Raspberry Pi 4 B
- Соедините USB-порт компьютера и преобразователь USB-UART.
- Установите PuTTY или другую аналогичную программу для чтения данных из COM-порта. Настройте параметры следующим образом:
bps = 115200
,data bits = 8
,stop bits = 1
,parity = none
,flow control = none
.
Чтобы компьютер и 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
Загрузочную SD-карту для Raspberry Pi 4 B можно подготовить автоматически и вручную.
Чтобы подготовить загрузочную SD-карту автоматически, подключите SD-карту к компьютеру и выполните следующие команды:
# Для создания файла образа загрузочного носителя (*.img)
# выполните скрипт, соответствующий ревизии используемой
# Raspberry Pi. Поддерживаются ревизии 1.1, 1.2, 1.4 и 1.5.
# Например, если используется ревизия 1.1, выполните:
$ sudo /opt/KasperskyOS-Community-Edition-<version>/examples/rpi4_prepare_fs_image_rev1.1.sh
# В следующей команде path_to_img – путь к файлу образа
# загрузочного носителя (этот путь выводится по окончании
# выполнения предыдущей команды), [X] – последний символ
# в имени блочного устройства для SD-карты.
$ sudo dd bs=64k if=path_to_img of=/dev/sd[X] conv=fsync
Чтобы подготовить загрузочную SD-карту вручную, выполните следующие действия:
- Выполните сборку загрузчика U-Boot для платформы ARMv8, который будет автоматически запускать пример. Для этого выполните следующие команды:
$ sudo apt install git build-essential libssl-dev bison flex unzip parted gcc-aarch64-linux-gnu xz-utils device-tree-compiler
$ git clone https://github.com/u-boot/u-boot.git u-boot-armv8
# Только для Raspberry Pi 4 B ревизий 1.1 и 1.2
$ cd u-boot-armv8 && git checkout tags/v2020.10
# Только для Raspberry Pi 4 B ревизий 1.4 и 1.5
$ cd u-boot-armv8 && git checkout tags/v2022.01
# Для всех ревизий Raspberry Pi
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- rpi_4_defconfig
# В меню, которое появится при выполнении следующей команды, в разделе
# Boot options замените значение в поле bootcmd value на следующее:
# fatload mmc 0 ${loadaddr} kos-image; bootelf ${loadaddr},
# а в поле preboot default value удалите значение "usb start;".
# Выйдите из меню, сохранив параметры.
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- menuconfig
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- u-boot.bin
- Подготовьте образ с файловой системой для SD-карты. Для этого подключите SD-карту к компьютеру и выполните следующие команды:
# Только для Raspberry Pi 4 B ревизий 1.1 и 1.2
$ wget https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2020-02-14/2020-02-13-raspbian-buster-lite.zip
$ unzip 2020-02-13-raspbian-buster-lite.zip
$ loop_device=$(sudo losetup --find --show --partscan 2020-02-13-raspbian-buster-lite.img)
# Только для Raspberry Pi 4 B ревизии 1.4
$ wget https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2022-04-07/2022-04-04-raspios-bullseye-arm64-lite.img.xz
$ unxz 2022-04-04-raspios-bullseye-arm64-lite.img.xz
$ loop_device=$(sudo losetup --find --show --partscan 2022-04-04-raspios-bullseye-arm64-lite.img)
# Только для Raspberry Pi 4 B ревизии 1.5
$ wget https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2022-09-07/2022-09-06-raspios-bullseye-arm64-lite.img.xz
$ unxz 2022-09-06-raspios-bullseye-arm64-lite.img.xz
$ loop_device=$(sudo losetup --find --show --partscan 2022-09-06-raspios-bullseye-arm64-lite.img)
# Для всех ревизий Raspberry Pi
# Образ будет содержать boot-раздел на 1 ГБ в fat32 и три раздела по 256 МБ в ext2, ext3 и ext4 соответственно.
$ sudo parted ${loop_device} rm 2
$ sudo parted ${loop_device} resizepart 1 1G
$ sudo parted ${loop_device} mkpart primary ext2 1000 1256M
$ sudo parted ${loop_device} mkpart primary ext3 1256 1512M
$ sudo parted ${loop_device} mkpart primary ext4 1512 1768M
$ sudo mkfs.ext2 ${loop_device}p2
$ sudo mkfs.ext3 ${loop_device}p3
$ sudo mkfs.ext4 -O ^64bit,^extent ${loop_device}p4
$ sudo losetup -d ${loop_device}
# В следующей команде [X] – последний символ в имени блочного устройства
# для SD-карты.
$ sudo dd bs=64k if=$(ls *rasp*lite.img) of=/dev/sd[X] conv=fsync
- Скопируйте загрузчик U-Boot на SD-карту, выполнив следующие команды:
# В следующих командах путь ~/mnt/fat32 используется для примера. Вы
# можете использовать другой путь.
$ mkdir -p ~/mnt/fat32
# В следующей команде [X] – последний буквенный символ в имени блочного
# устройства для раздела на отформатированной SD-карте.
$ sudo mount /dev/sd[X]1 ~/mnt/fat32/
$ sudo cp u-boot.bin ~/mnt/fat32/u-boot.bin
# Только для Raspberry Pi 4 B ревизии 1.5
# В следующих командах путь ~/tmp_dir используется для примера. Вы
# можете использовать другой путь.
$ mkdir -p ~/tmp_dir
$ cp ~/mnt/fat32/bcm2711-rpi-4-b.dtb ~/tmp_dir
$ dtc -I dtb -O dts -o ~/tmp_dir/bcm2711-rpi-4-b.dts ~/tmp_dir/bcm2711-rpi-4-b.dtb && \
$ sed -i -e "0,/emmc2bus = /s/emmc2bus =.*//" ~/tmp_dir/bcm2711-rpi-4-b.dts && \
$ sed -i -e "s/dma-ranges = <0x00 0xc0000000 0x00 0x00 0x40000000>;/dma-ranges = <0x00 0x00 0x00 0x00 0xfc000000>;/" ~/tmp_dir/bcm2711-rpi-4-b.dts && \
$ sed -i -e "s/mmc@7e340000 {/mmc@7e340000 {\n\t\t\tranges = <0x00 0x7e000000 0x00 0xfe000000 0x1800000>;\n dma-ranges = <0x00 0x00 0x00 0x00 0xfc000000>;/" ~/tmp_dir/bcm2711-rpi-4-b.dts && \
$ dtc -I dts -O dtb -o ~/tmp_dir/bcm2711-rpi-4-b.dtb ~/tmp_dir/bcm2711-rpi-4-b.dts
$ sudo cp ~/tmp_dir/bcm2711-rpi-4-b.dtb ~/mnt/fat32/bcm2711-rpi-4-b.dtb
$ sudo rm -rf ~/tmp_dir
- Заполните конфигурационный файл для загрузчика U-Boot на SD-карте используя следующие команды:
$ echo "[all]" > ~/mnt/fat32/config.txt
$ echo "arm_64bit=1" >> ~/mnt/fat32/config.txt
$ echo "enable_uart=1" >> ~/mnt/fat32/config.txt
$ echo "kernel=u-boot.bin" >> ~/mnt/fat32/config.txt
$ echo "dtparam=i2c_arm=on" >> ~/mnt/fat32/config.txt
$ echo "dtparam=i2c=on" >> ~/mnt/fat32/config.txt
$ echo "dtparam=spi=on" >> ~/mnt/fat32/config.txt
$ sync
$ sudo umount ~/mnt/fat32
Запуск примеров на Raspberry Pi 4 B
Чтобы запустить пример на Raspberry Pi 4 B, выполните следующие действия:
- Перейдите в директорию с примером и соберите пример.
- Убедитесь, что Raspberry Pi 4 B и загрузочная SD-карта подготовлены к запуску примеров.
- Скопируйте на загрузочную SD-карту образ решения на базе KasperskyOS. Для этого подключите загрузочную SD-карту к компьютеру и выполните следующие команды:
# В следующей команде [X] – последний буквенный символ в имени блочного
# устройства для раздела на загрузочной SD-карте.
# В следующих командах путь ~/mnt/fat32 используется для примера. Вы
# можете использовать другой путь.
$ sudo mount /dev/sd[X]1 ~/mnt/fat32/
$ sudo cp build/einit/kos-image ~/mnt/fat32/kos-image
$ sync
$ sudo umount ~/mnt/fat32
- Подключите загрузочную SD-карту к Raspberry Pi 4 B.
- Подайте питание на Raspberry Pi 4 B и дождитесь, пока запустится пример.
О том, что пример запустился, свидетельствует вывод, отображаемый на компьютере.