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

Сборка сущностей 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 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
Сборка образа решения
Теперь можно собрать образ решения, содержащий образ ядра KasperskyOS (kos-qemu), а также сущности client, server и einit:
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
Сущность einit указывать не нужно, так как она будет включена в образ решения автоматически.
Запуск примера echo
Чтобы запустить собранный образ решения под QEMU, запустите команду:
qemu-system-x86_64 -m 1024 -serial stdio -kernel kos-qemu-image

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