Схема сборки примера ping выглядит следующим образом:

Для простоты на схеме не указан файл конфигурации семейства ping.era.
Копирование файлов security.cfg и test.c
Пример ping содержит как общие файлы (client.c, server.c; client.edl, server.edl, ping.cdl; ping.idl; init.yaml), так и файлы, относящиеся к конкретному семейству политик (security.cfg, test.c, ping.era).
Перед началом сборки необходимо в директорию с общими файлами скопировать файлы, относящиеся к выбранному семейству политик.
Файлы для семейства flow:
security.cfg – конфигурация безопасности на базе семейства flow;test.c – реализация функции test() для демонстрации использования семейства flow.Файлы для семейства era:
security.cfg – конфигурация безопасности на базе семейства era;test.c – реализация функции test() для демонстрации использования семейства era;ping.era – файл конфигурации семейства era.Сборка сущностей client и server
Перед сборкой сущностей client и server нужно обработать файлы статических описаний сервера с помощью компилятора NK:
nk-gen-c -I $SDK/sysroot-x86_64-pc-kos/include ping.idl
nk-gen-c -I $SDK/sysroot-x86_64-pc-kos/include ping.cdl
nk-gen-c -I $SDK/sysroot-x86_64-pc-kos/include server.edl
(Здесь и далее SDK=/opt/KasperskyOS-StarterKit-<version>.)
Компилятор NK создаст файлы ping.idl.h, ping.cdl.h и server.edl.h, а также файлы ping.idl.c, ping.cdl.c и server.edl.c. Эти файлы содержат транспортные методы и типы, используемые на сервере и на клиенте.
Сборка сущностей client и server:
x86_64-pc-kos-gcc -o client client.c test.c ping.idl.c
x86_64-pc-kos-gcc -o server server.c ping.idl.c ping.cdl.c server.edl.c
Сборка инициализирующей сущности
Для сборки сущности einit потребуются файлы client.edl.h и server.edl.h.
Файл server.edl.h уже был создан на предыдущем шаге. Осталось лишь сгенерировать client.edl.h:
nk-gen-c -I $SDK/sysroot-x86_64-pc-kos/include client.edl
Код инициализирующей сущности (einit.c) генерируется с помощью утилиты einit:
einit -I $SDK/sysroot-x86_64-pc-kos/include -I . init.yaml -o einit.c
Сборка инициализирующей сущности einit:
x86_64-pc-kos-gcc -I . -o einit einit.c
Сборка модуля безопасности
В отличие от примеров из первой и второй частей руководства, пример ping содержит конфигурацию безопасности (security.cfg).
Модуль безопасности (ksm.module) собирается с помощью скрипта makekss на основе security.cfg:
makekss --target=x86_64-pc-kos \
--module=-lksm_kss \
--with-nkflags="-I $SDK/examples/common -I $SDK/sysroot-x86_64-pc-kos/include" \
security.cfg
Сборка образа решения
Финальный шаг – сборка образа решения с помощью скрипта makeimg:
makeimg --target=x86_64-pc-kos \
--sys-root=$SDK/sysroot-x86_64-pc-kos \
--with-toolchain=$SDK/toolchain \
--ldscript=$SDK/libexec/x86_64-pc-kos/kos-qemu.ld \
--img-src=$SDK/libexec/x86_64-pc-kos/kos-qemu \
--img-dst=kos-qemu-image \
client server ksm.module
Обратите внимание, что модуль безопасности (ksm.module) нужно указывать явно, иначе он не будет включен в образ решения. Сущность einit указывать не нужно, так как она будет включена в образ решения автоматически.
Запуск примера ping
Чтобы запустить собранный образ решения под QEMU, запустите команду:
qemu-system-x86_64 -m 1024 -serial stdio -kernel kos-qemu-image

Сборка и запуск примера ping с помощью скрипта build.sh, содержащего все приведенные выше команды
В начало