Файл init.yaml

Файл init.yaml (init-описание) используется утилитой einit для генерации исходного кода инициализирующей сущности Einit. Этот файл содержит данные в формате YAML, которые идентифицируют:

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

Ключи словаря сущности в init-описании

Ключ

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

Описание

name

Да

Имя сущности

task

Нет

Идентификатор сущности, который по умолчанию совпадает с именем сущности. У каждой сущности должен быть уникальный идентификатор.

Можно запустить несколько сущностей с одним именем, но разными идентификаторами.

path

Нет

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

Можно запустить несколько сущностей с одним именем из разных исполняемых файлов. При этом идентификаторы этих сущностей должны быть разными.

connections

Нет

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

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

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

Ключ

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

Описание

id

Да

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

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

У каждого IPC-канала должен быть уникальный идентификатор.

(Идентификатор IPC-канала используется сущностями, чтобы получить IPC-дескриптор.)

target

Да

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

Примеры init-описаний

В приведенных примерах файл с init-описанием называется init.yaml, хотя может иметь любое имя.

init.yaml

# init-описание решения, содержащего сущность-клиент и сущность-сервер

entities:

# Сущность Client будет отправлять запросы сущности Server.

- name: Client

connections:

# Идентификатор сущности-сервера, которой сущность Client будет

# отправлять запросы

- target: Server

# Идентификатор IPC-канала для обмена IPC-сообщениями

# между сущностями

id: server_connection

# Сущность Server будет выступать в роли сервера

# (будет отвечать на запросы сущности Client).

- name: Server

init.yaml

# init-описание, где идентификатор IPC-канала задан ссылкой

entities:

- name: Client

connections:

- target: Server

# Идентификатор IPC-канала содержится в константе SERVER_CONN

# в файле src/example.h

id: {var: SERVER_CONN, include: src/example.h}

- name: Server

init.yaml

# init-описание, где заданы имена исполняемых файлов, из

# которых будут запущены сущности Client, ClientServer и

# MainServer

entities:

- name: Client

path: cl

connections:

- target: ClientServer

id: server_connection_cs

- name: ClientServer

path: csr

connections:

- target: MainServer

id: server_connection_ms

- name: MainServer

path: msr

init.yaml

# init-описание, при котором сущности MainServer и BkServer

# будут запущены из одного исполняемого файла

entities:

- name: Client

connections:

- id: server_connection_ms

target: MainServer

- id: server_connection_bs

target: BkServer

- name: MainServer

path: srv

- name: BkServer

path: srv

init.yaml

# init-описание, при котором будут запущены две сущности

# Server с разными идентификаторами из одного исполняемого

# файла

entities:

- name: Client

connections:

- id: server_connection_us

# Идентификатор сущности-сервера

target: UserServer

- id: server_connection_ps

# Идентификатор сущности-сервера

target: PrivilegedServer

- task: UserServer

name: Server

- task: PrivilegedServer

name: Server

В начало