Инициализирующая программа Einit
При запуске решения ядро KasperskyOS находит в образе решения и запускает исполняемый файл с именем Einit, то есть инициализирующую программу. Инициализирующая программа выполняет следующие действия:
Процесс инициализирующей программы имеет класс Einit.
В составе KasperskyOS SDK поставляется утилита einit, которая позволяет генерировать исходный код инициализирующей программы на языке C. Эта утилита используется системой сборки CMake, которая также обеспечивает компиляцию файла einit.c в исполняемый файл Einit и включение этого исполняемого файла в образ решения.
Для инициализирующей программы не требуется самостоятельно создавать файлы формальной спецификации. Эти файлы автоматически создаются и применяются при сборке решения. Однако класс процесса Einit должен быть указан в описании политики безопасности решения.
Утилита einit генерирует исходный код инициализирующей программы на основе формальных спецификаций компонентов решения и init-описания, представляющего собой текстовый файл, который обычно имеет имя init.yaml.
Init-описание (init.yaml)
Init-описание содержит данные в формате YAML, которые идентифицируют:
Порядок запуска процессов не зависит от порядка их перечисления в init-описании, но его можно задать с помощью ключей before и after (см. таблицу ниже).
Эти данные представляют собой словарь с ключом entities, содержащий список словарей процессов (см. "Примеры init-описаний"). Ключи словаря процесса приведены в таблице ниже.
Можно создать init-описание вручную или автоматизированно. Во втором случае нужно подготовить шаблон init.yaml.in, из которого система сборки создаст init-описание.
Ключи словаря процесса в init-описании
Ключ |
Обязательный |
Значение |
|---|---|---|
|
Да |
Имя класса процесса (из EDL-описания). |
|
Нет |
Имя процесса. Если его не указать, то будет взято имя класса процесса. У каждого процесса должно быть уникальное имя. Можно запустить несколько процессов одного класса, но с разными именами. |
|
Нет |
Имя исполняемого файла в ROMFS (в образе решения). Если его не указать, то будет взято имя класса процесса без префиксов и точек. Например, процессы классов Можно запустить несколько процессов из одного исполняемого файла. |
|
Нет |
Список словарей IPC-каналов процесса. Этот список задает статически создаваемые IPC-каналы, клиентскими IPC-дескрипторами которых будет владеть процесс. По умолчанию этот список пуст. (Помимо статически создаваемых IPC-каналов процессы могут использовать динамически создаваемые IPC-каналы.) |
|
Нет |
Список параметров запуска программы (параметры функции |
|
Нет |
Словарь переменных окружения программы. Ключами в этом словаре являются имена переменных окружения. Максимальный размер значения переменной окружения составляет 65524 байта. |
|
Нет |
Определяет порядок запуска процессов. Необходимо указать список имен процессов которые должны быть запущены после запуска этого процесса. |
|
Нет |
Определяет порядок запуска процессов. Необходимо указать список имен процессов которые должны быть запущены до запуска этого процесса. |
|
Нет |
Признак, по которому определяется, что процесс успешно запущен. Варианты синтаксиса:
или
или
Параметр
Параметр Параметр
Примеры использования: wait_for: ready wait_for: { event: ready, timeout: 100ms } wait_for: event: ready timeout: 100ms Подробнее см. "Примеры init-описаний". |
Ключи словаря IPC-канала процесса приведены в таблице ниже.
Ключи словаря IPC-канала в init-описании
Ключ |
Обязательный |
Значение |
|---|---|---|
|
Да |
Имя IPC-канала, которое может быть задано как фиксированными значением, так и ссылкой вида
|
|
Да |
Имя процесса, который будет владеть серверным дескриптором IPC-канала. |
Init-описание может также содержать ключ mount_romfs, который определяет имя точки монтирования дополнительной файловой системы romfs.1 перед запуском процессов. Это позволяет запускать процессы из бинарных файлов, расположенных на файловой системе romfs.1. Файловая система romfs.1 будет отмонтирована после завершения процесса Einit. Пример использования:
mount_romfs:
"romfs.1": "romfs/1"
В начало