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

Схема сборки примера 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:

Файлы для семейства 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, содержащего все приведенные выше команды

В начало