Содержание
Шаблон init.yaml.in
Шаблон init.yaml.in
используется для автоматической генерации части файла init.yaml
перед сборкой программы Einit
средствами CMake
.
Использование шаблона init.yaml.in
позволяет не добавлять описания системных программ и IPC-каналов для соединения с ними в файл init.yaml
вручную.
Шаблон init.yaml.in
должен содержать следующие данные:
- Корневой ключ
entities
. - Список всех прикладных программ, входящих в решение.
- Для прикладных программ, использующих механизм IPC, необходимо указать список IPC-каналов, соединяющих эту программу с другими программами.
IPC-каналы, соединяющие эту программу с другими прикладными программами указываются вручную или в файле CMakeLists.txt этой программы с помощью свойства
EXTRA_CONNECTIONS
.Для указания списка IPC-каналов, соединяющих эту программу с системными программами, входящими в состав KasperskyOS Community Edition, используются следующие макросы:
@INIT_<имя программы>_ENTITY_CONNECTIONS@
– при сборке заменяется на список IPC-каналов со всеми системными программами, с которыми скомпонована прикладная программа. Поляtarget
иid
заполняются в соответствии с файламиconnect.yaml
из состава KasperskyOS Community Edition, расположенными в/opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos/include/<имя системной программы>
).Этот макрос нужно использовать, если прикладная программа не имеет соединений с другими прикладными программами и соединяется только с системными программами. Этот макрос добавляет корневой ключ
connections
.@INIT_<имя программы>_ENTITY_CONNECTIONS+@
– при сборке добавляет список IPC-каналов со всеми системными программами, с которыми скомпонована прикладная программа, к списку IPC-каналов, заданному вручную. Этот макрос не добавляет корневой ключconnections
.Этот макрос нужно использовать, если прикладная программа имеет соединения с другими прикладными программами, которые были указаны в шаблоне
init.yaml.in
вручную.
- Макросы
@INIT_<имя программы>_ENTITY_CONNECTIONS@
и@INIT_<имя программы>_ENTITY_CONNECTIONS+@
также добавляют список соединений для каждой программы, заданный в свойствеEXTRA_CONNECTIONS
при сборке этой программы. - Если необходимо передать программе аргументы функции
main()
, заданные в свойствеEXTRA_ARGS
при сборке этой программы, то необходимо использовать следующие макросы:@INIT_<имя программы>_ENTITY_ARGS@
– при сборке заменяется на список аргументов функцииmain()
, заданный в свойствеEXTRA_ARGS
. Этот макрос добавляет корневой ключargs
.@INIT_<имя программы>_ENTITY_ARGS+@
– при сборке добавляет список аргументов функцииmain()
, заданный в свойствеEXTRA_ARGS
, к списку аргументов заданному вручную. Этот макрос не добавляет корневой ключargs
.
- Если необходимо передать программе значения переменных окружения, заданные в свойстве
EXTRA_ENV
при сборке этой программы, то необходимо использовать следующие макросы:@INIT_<имя программы>_ENTITY_ENV@
– при сборке заменяется на словарь переменных окружения и их значений, заданный в свойствеEXTRA_ENV
. Этот макрос добавляет корневой ключenv
.@INIT_<имя программы>_ENTITY_ENV+@
– при сборке добавляет словарь переменных окружения и их значений, заданный в свойствеEXTRA_ENV
, к переменным заданным вручную. Этот макрос не добавляет корневой ключenv
.
- Макрос
@INIT_EXTERNAL_ENTITIES@
, который при сборке заменяется на список системных программ, с которыми скомпонована прикладная программа, и их IPC-каналов, аргументов функцииmain()
и значений переменных окружения.
Пример шаблона init.yaml.in
init.yaml.in
entities:
- name: ping.Client
connections:
# Программа "Client" может обращаться к "Server".
- target: ping.Server
id: server_connection
@INIT_Client_ENTITY_CONNECTIONS+@
@INIT_Client_ENTITY_ARGS@
@INIT_Client_ENTITY_ENV@
- name: ping.Server
@INIT_Server_ENTITY_CONNECTIONS@
@INIT_EXTERNAL_ENTITIES@
При сборке программы Einit
из этого шаблона будет сгенерирован следующий файл init.yaml:
init.yaml
entities:
- name: ping.Client
connections:
# Программа "Client" может обращаться к "Server"
- target: ping.Server
id: server_connection
- target: kl.VfsEntity
id: {var: _VFS_CONNECTION_ID, include: vfs/defs.h}
args:
- "-v"
env:
VAR1: VALUE1
- name: ping.Server
connections:
- target: kl.VfsEntity
id: {var: _VFS_CONNECTION_ID, include: vfs/defs.h}
- name: kl.VfsEntity
path: VFS
args:
- "-f"
- "fstab"
env:
ROOTFS: ramdisk0,0 / ext2