Схема сборки примера 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, содержащего все приведенные выше команды
В начало