Чтобы подготовить условия для отладки с использованием GDB-сервера ядра KasperskyOS на аппаратной платформе, нужно выполнить следующие шаги:
Для это нужно убедиться в наличии файла libexec/aarch64-kos/kos-gdbstub
в составе KasperskyOS Community Edition.
Для подключения компьютера к аппаратной платформе нужно использовать преобразователи USB-UART. Схемы соединения преобразователей USB-UART и аппаратных платформ см. в "Подготовка Raspberry Pi 4 B к запуску примеров" и "Подготовка Radxa ROCK 3A к запуску примеров".
GDBSTUB_KERNEL
в список параметров CMake
-команды build_kos_hw_image()
.Этот параметр включает в решение ядро с GDB-сервером.
Пример:
build_kos_hw_image(kos-image
GDBSTUB_KERNEL
...
IMAGE_FILES ${ENTITIES})
.gdbinit
, чтобы не вызывать вручную начальные GDB-команды при каждом запуске отладчика GDB. (Файл .gdbinit
нужно сохранить в директории, где будет запускаться отладчик GDB.)Пример:
# Задать путь для поиска динамических библиотек с отладочными символами из
# состава KasperskyOS Community Edition
set sysroot /opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos
# Задать дополнительные пути для поиска динамических библиотек с отладочными
# символами
set solib-search-path /home/user/example/build/lib1:/home/user/example/build/lib2
# Настроить управление потоками исполнения (опционально)
# Отладчик GDB может работать в режиме all-stop или non-stop. В первом режиме
# отладчик GDB считает, что при остановке потока исполнения, контекст которого
# находится в фокусе отладки, останавливаются все остальные потоки исполнения,
# о которых известно отладчику GDB. Во втором режиме отладчик GDB считает, что
# все потоки, кроме остановленного, продолжают исполняться. Режим all-stop
# применяется отладчиком GDB по умолчанию, и GDB-сервер ядра дает возможность
# использовать только этот режим. Чтобы изменить заданные по умолчанию параметры
# управления потоками исполнения в режиме all-stop, нужно использовать GDB-команды
# set scheduler-locking и set schedule-multiple.
# В этом примере первая GDB-команда указывает отладчику GDB, что при возобновлении
# исполнения потока, контекст которого находится в фокусе отладки (например,
# GDB-командами continue, step, next), нужно возобновить исполнение остальных потоков.
# Вторая GDB-команда указывает отладчику GDB, что при возобновлении исполнения потока,
# контекст которого находится в фокусе отладки, нужно возобновить исполнение всех
# потоков, входящих в процессы всех программ, для которых выполняется отладка.
set scheduler-locking off
set schedule-multiple on
# Задать символьную скорость для взаимодействия с GDB-сервером ядра
# Нужно задать значение 115200 бод.
set serial baud 115200
# Подключить отладчик GDB к GDB-серверу ядра
# Нужно задать порт USB, через который подключен преобразователь USB-UART,
# используемый для отладки. Также необходимо задать, что GDB-сервер ядра
# взаимодействует с отладчиком GDB по расширенному протоколу.
target extended-remote /dev/ttyUSB1