Файл init.yaml
(так называемое init-описание) используется утилитой einit
при создании инициализирующей сущности Einit.
В приведенных примерах файл с init-описанием называется init.yaml
, хотя может иметь любое имя.
Init-описание имеет следующий синтаксис:
entities
, за которым следует двоеточие. Далее должны быть перечислены все сущности, которые необходимо запустить после загрузки операционной системы.- name: <имя сущности>
path
позволяет задать имя исполняемого файла в ROMFS (в образе решения), из которого будет запущена эта сущность:path: <имя исполняемого файла>
По умолчанию сущность будет запущена из файла в ROMFS с именем, совпадающим с кратким именем сущности. Например, сущности Client
и net.Client
по умолчанию будут запущены из файла Client
.
connections
и следующего за ним двоеточия. Каждый элемент списка соединений описывается в формате:- target: <имя серверной сущности>
id: <имя соединения>
Имя соединения может быть представлено как в виде строки, так и в виде константы из заголовочного файла {var: <имя константы>[, include: <путь к заголовочному файлу>]}
.
Если сущность не имеет соединений с другими сущностями или во всех соединениях выступает как сервер, ее список соединений нужно оставить пустым.
Имя соединения используется, чтобы получить IPC-дескриптор, необходимый для инициализации транспорта.
Примеры init-описаний
Ниже представлено init-описание решения, содержащего две сущности (клиентскую и серверную). Соединение всегда описывается только один раз – в секции клиентской сущности.
init.yaml
entities:
# Сущность "Client" может отправлять запросы сущности "Server".
- name: Client
connections:
# Имя сущности, которой сущность Client может отправлять запросы
- target: Server
# Имя соединения, используемое при обмене IPC-сообщениями между сущностями
id: server_connection
# Сущность "Server" выступает в роли сервера (отвечает на запросы).
- name: Server
Обратите внимание на количество пробелов перед ключевыми словами.
Имя соединения в примере выше может быть указано в виде константы из заголовочного файла:
init.yaml
entities:
- name: Client
connections:
- target: Server
# Имя соединения содержится в константе SERVER_CONN в файле src/example.h
id: {var: SERVER_CONN, include: src/example.h}
- name: Server
В примерах выше не использовалось ключевое слово path
, поэтому сущность Client
будет запущена из файла с именем Client
, а сущность Server
– из файла с именем Server
.
Вот как можно изменить имена исполняемых файлов, из которых будут запущены эти сущности:
init.yaml
entities:
- name: Client
path: cl
connections:
- target: Server
id: server_connection
- name: Server
path: sr
Здесь сущность Client
будет запущена из файла cl
, а сущность Server
– из файла sr
.
Следующий пример демонстрирует запуск двух сущностей из одного файла с именем server
:
init.yaml
entities:
- name: Main_server
path: server
- name: Bk_server
path: server
...
В начало