Пример hello
По сложившейся традиции в мире разработки ПО, первое, с чего стоит начать знакомство с любой технологией – это поприветствовать с помощью нее мир. Не будем нарушать эту традицию в KasperskyOS и начнем с примера, выводящего на экран строку Hello world!
.
KasperskyOS позволяет разрабатывать решения как на языке C, так и на C++.
Код hello.c
выглядит привычным и простым для разработчика на языке C – он полностью совместим с POSIX:
hello.c
int main(int argc, const char *argv[])
{
fprintf(stderr,"Hello world!\n");
return EXIT_SUCCESS;
}
Чтобы запустить файл Hello
в KasperskyOS, понадобится несколько дополнительных действий.
Разработка приложений под KasperskyOS имеет следующие особенности:
Во-первых, каждая сущность (так в KasperskyOS называются приложения и соответствующие им процессы) должна быть статически описана. Описание содержится в файлах с расширениями edl, cdl и idl, которые используются для сборки решения. Минимально возможное описание сущности – EDL-файл, в котором указано имя сущности. Все сущности, разрабатываемые в первой части руководства, имеют минимальное статическое описание (только EDL-файл с именем сущности).
Во-вторых, все запускаемые сущности должны содержаться в загружаемом образе KasperskyOS. Поэтому каждый пример в этом руководстве представляет собой не отдельную сущность (сущности), а готовое решение на базе KasperskyOS, включающее в себя образ ядра, инициализирующую сущность и вспомогательные сущности (например, драйверы).
EDL-описание сущности Hello
Статическое описание сущности Hello
состоит из единственного файла Hello.edl
, в котором необходимо прописать имя сущности:
Hello.edl
/* После ключевого слова "entity" указано имя сущности. */
entity Hello
Имя сущности должно начинаться с заглавной буквы. Имя EDL-файла должно совпадать с именем сущности, которую он описывает.
Во второй части руководства показаны примеры более сложных EDL-описаний, а также появляются CDL- и IDL-описания.
Создание инициализирующей сущности Einit
При загрузке KasperskyOS ядро запускает сущность с именем Einit. Сущность Einit
запускает все остальные сущности, входящие в решение, то есть служит инициализирующей сущностью.
В составе пакета инструментов KasperskyOS Community Edition поставляется утилита einit, которая позволяет сгенерировать код инициализирующей сущности (einit.c
) на основе init-описания. В приведенном ниже примере файл с init-описанием называется init.yaml
, хотя может иметь любое имя.
Подробнее см. "Запуск сущностей".
Для того чтобы сущность Hello
запустилась после загрузки операционной системы, достаточно указать ее имя в файле init.yaml
и собрать из него сущность Einit
.
init.yaml
entities:
# Запустить сущность "Hello".
- name: Hello
Схема сборки примера hello
Общая схема сборки примера hello выглядит следующим образом:
Сборка и запуск примера hello
См. "Сборка и запуск примеров".