Файл init.yaml

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

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

Init-описание имеет следующий синтаксис:

  1. В начале указывается обязательное ключевое слово entities, за которым следует двоеточие. Далее должны быть перечислены все сущности, которые необходимо запустить после загрузки операционной системы.
  2. Описание каждой сущности начинается со строки:

    - name: <имя сущности>

  3. Необязательное ключевое слово path позволяет задать имя исполняемого файла в ROMFS (в образе решения), из которого будет запущена эта сущность:

    path: <имя исполняемого файла>

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

  4. Если сущность должна инициировать запросы другим сущностям (т.е. являться клиентом других сущностей), далее необходимо указать список ее соединений. Этот список содержит имена серверных сущностей, которым эта сущность может отправлять запросы, а также имя каждого соединения. Список соединений начинается с ключевого слова 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

...

В начало