Обзор: Einit и init.yaml

Инициализирующая программа Einit

При запуске решения ядро KasperskyOS находит в образе решения и запускает исполняемый файл с именем Einit, то есть инициализирующую программу. Инициализирующая программа выполняет следующие действия:

Процесс инициализирующей программы имеет класс Einit.

В составе KasperskyOS SDK поставляется утилита einit, которая позволяет генерировать исходный код инициализирующей программы на языке C. Эта утилита используется системой сборки CMake, которая также обеспечивает компиляцию файла einit.c в исполняемый файл Einit и включение этого исполняемого файла в образ решения.

Для инициализирующей программы не требуется самостоятельно создавать файлы формальной спецификации. Эти файлы автоматически создаются и применяются при сборке решения. Однако класс процесса Einit должен быть указан в описании политики безопасности решения.

Утилита einit генерирует исходный код инициализирующей программы на основе формальных спецификаций компонентов решения и init-описания, представляющего собой текстовый файл, который обычно имеет имя init.yaml.

Init-описание (init.yaml)

Init-описание содержит данные в формате YAML, которые идентифицируют:

Эти данные представляют собой словарь с ключом entities, содержащий список словарей процессов (см. "Примеры init-описаний"). Ключи словаря процесса приведены в таблице ниже.

Можно создать init-описание вручную или автоматизированно. Во втором случае нужно подготовить шаблон init.yaml.in, из которого система сборки создаст init-описание.

Ключи словаря процесса в init-описании

Ключ

Обязательный

Значение

name

Да

Имя класса процесса (из EDL-описания).

task

Нет

Имя процесса. Если его не указать, то будет взято имя класса процесса. У каждого процесса должно быть уникальное имя.

Можно запустить несколько процессов одного класса, но с разными именами.

path

Нет

Имя исполняемого файла в ROMFS (в образе решения). Если его не указать, то будет взято имя класса процесса без префиксов и точек. Например, процессы классов Client и net.Client, для которых не указано имя исполняемого файла, будут запущены из файла Client.

Можно запустить несколько процессов из одного исполняемого файла.

connections

Нет

Список словарей IPC-каналов процесса. Этот список задает статически создаваемые IPC-каналы, клиентскими IPC-дескрипторами которых будет владеть процесс. По умолчанию этот список пуст. (Помимо статически создаваемых IPC-каналов процессы могут использовать динамически создаваемые IPC-каналы.)

args

Нет

Список параметров запуска программы (параметры функции main()). Максимальный размер одного элемента списка составляет 1024 байта.

env

Нет

Словарь переменных окружения программы. Ключами в этом словаре являются имена переменных окружения. Максимальный размер значения переменной окружения составляет 65524 байта.

Ключи словаря IPC-канала процесса приведены в таблице ниже.

Ключи словаря IPC-канала в init-описании

Ключ

Обязательный

Значение

id

Да

Имя IPC-канала, которое может быть задано как фиксированными значением, так и ссылкой вида

{var: <имя константы>, include: <путь к заголовочному файлу>}.

target

Да

Имя процесса, который будет владеть серверным дескриптором IPC-канала.

В начало