Файл init.yaml
(init-описание) используется утилитой einit
для генерации исходного кода инициализирующей сущности Einit. Этот файл содержит данные в формате YAML, которые идентифицируют:
Эти данные представляют собой словарь с ключем entities
, содержащий список словарей сущностей. Ключи словаря сущности приведены в таблице ниже.
Ключи словаря сущности в init-описании
Ключ |
Обязательный |
Описание |
---|---|---|
|
Да |
Имя сущности |
|
Нет |
Идентификатор сущности, который по умолчанию совпадает с именем сущности. У каждой сущности должен быть уникальный идентификатор. Можно запустить несколько сущностей с одним именем, но разными идентификаторами. |
|
Нет |
Имя исполняемого файла в ROMFS (в образе решения), из которого будет запущена сущность. По умолчанию сущность будет запущена из файла в ROMFS с именем, совпадающим с кратким именем сущности. Например, сущности Можно запустить несколько сущностей с одним именем из разных исполняемых файлов. При этом идентификаторы этих сущностей должны быть разными. |
|
Нет |
Ключ словаря, содержащего список словарей IPC-каналов сущности. Этот список задает статически создаваемые IPC-каналы, клиентскими дескрипторами которых будет владеть сущность. По умолчанию список пуст. (Помимо статически создаваемых IPC-каналов, сущности могут использовать динамически создаваемые IPC-каналы.) |
Ключи словаря IPC-каналов сущности приведены в таблице ниже.
Ключи словаря IPC-каналов сущности в init-описании
Ключ |
Обязательный |
Описание |
---|---|---|
|
Да |
Идентификатор IPC-канала, который может быть задан как конкретным значением, так и ссылкой вида
У каждого IPC-канала должен быть уникальный идентификатор. (Идентификатор IPC-канала используется сущностями, чтобы получить IPC-дескриптор.) |
|
Да |
Идентификатор сущности, которая будет владеть серверным дескриптором 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
В начало