Содержание
Сборка примеров
Сборка примеров осуществляется с помощью системы сборки 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 к запуску примеров".