Файл CMakeLists.txt
для сборки инициализирующей программы Einit
должен содержать следующие команды:
include (platform/image)
– подключение библиотеки CMake
, содержащей скрипты сборки образа решения.project_header_default ("STANDARD_GNU_11:YES" "STRICT_WARNINGS:NO"
) – установка флагов компилятора и компоновщика.find_package ()
.set_target_properties ()
.CMake
-описания системных программ и драйверов, поставляемых в составе KasperskyOS Community Edition, а также их экспортированных переменных и свойств находятся в соответствующих файлах /opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos/lib/cmake/<имя программы>/<имя программы>-config.cmake
init.yaml
при сборке решения необходимо добавить эти каналы в свойство EXTRA_CONNECTIONS
для соответствующих программ.Обратите внимание на отступы в начале строк в свойстве EXTRA_CONNECTIONS
. Эти отступы необходимы для корректной подстановки значений в файл init.yaml
и должны соответствовать требованиям к его синтаксису.
Например, программа VFS
по умолчанию не имеет канала для соединения с программой Env
. Чтобы описание такого канала автоматически добавилось в файл init.yaml при сборке решения, необходимо добавить следующий вызов в файл CMakeLists.txt
для сборки программы Einit
:
set_target_properties (${vfs_ENTITY} PROPERTIES
EXTRA_CONNECTIONS
" - target: env.Env
id: {var: ENV_SERVICE_NAME, include: env/env.h}"
В результате, при сборке решения, описание этого IPC-канала будет автоматически добавлено в файл init.yaml
на этапе обработки макросов шаблона init.yaml.in.
main()
и словаря переменных окружения в файл init.yaml
при сборке решения, необходимо определить свойства EXTRA_ARGS
и EXTRA_ENV
и присвоить им соответствующие значения.Обратите внимание на отступы в начале строк в свойствах EXTRA_ARGS
и EXTRA_ENV
. Эти отступы необходимы для корректной подстановки значений в файл init.yaml
и должны соответствовать требованиям к его синтаксису.
Пример передачи программе VfsEntity
аргумента "-f fstab"
функции main()
и переменной окружения ROOTFS
со значением ramdisk0,0 / ext2 0
:
set_target_properties (${vfs_ENTITY} PROPERTIES
EXTRA_ARGS
" - \"-f\"
- \"fstab\""
EXTRA_ENV
" ROOTFS: ramdisk0,0 / ext2 0")
В результате, при сборке решения, описание аргумента функции main()
и значение переменной окружения будут автоматически добавлены в файл init.yaml
на этапе обработки макросов шаблона init.yaml.in.
set(ENTITIES <полный список программ, входящих в решение>)
– определение переменной ENTITIES
со списком исполняемых файлов всех программ, входящих в решение.Пример файла CMakeLists.txt для сборки программы Einit
CMakeLitsts.txt
project (einit)
# Подключение библиотеки, содержащей скрипты сборки образа решения.
include (platform/image)
# Установка флагов компиляции.
project_header_default ("STANDARD_GNU_11:YES" "STRICT_WARNINGS:NO")
# Настройка программы VFS.
# По умолчанию программе VFS не сопоставляется программа, реализующая блочное устройство.
# Если необходимо использовать блочное устройство, например ata из компонента ata,
# необходимо задать это устройство в переменной ${blkdev_ENTITY}_REPLACEMENT
# Больше информации об экспортированных переменных и свойств программы VFS
# см. в /opt/KasperskyOS-Community-Edition-<version>/sysroot-aarch64-kos/lib/cmake/vfs/vfs-config.cmake
# find_package(ata)
# set_target_properties (${vfs_ENTITY} PROPERTIES ${blkdev_ENTITY}_REPLACEMENT ${ata_ENTITY})
# В простейшем случае не нужно взаимодействовать с диском,
# поэтому мы устанавливаем значение переменной ${blkdev_ENTITY}_REPLACEMENT равным пустой строке
set_target_properties (${vfs_ENTITY} PROPERTIES ${blkdev_ENTITY}_REPLACEMENT "")
# Определение переменной ENTITIES со списком исполняемых файлов программ
# Важно включить все программы, входящие в проект, кроме программы Einit.
# Обратите внимание на то, что имя исполняемого файла программы должно
# совпадать с названием цели, указанной в add_executable() в CMakeLists.txt для сборки этой программы.
set(ENTITIES
${vfs_ENTITY}
Hello_app
)
# Создание цели сборки с именем kos-image, которая является образом решения для аппаратной платформы.
build_kos_hw_image (kos-image
EINIT_ENTITY EinitHw
CONNECTIONS_CFG "src/init.yaml.in" # шаблон файла init.yaml
SECURITY_PSL "src/security.psl.in" # шаблон файла security.psl
IMAGE_FILES ${ENTITIES}
)
# Создание цели сборки с именем kos-qemu-image, которая является образом решения для QEMU.
build_kos_qemu_image (kos-qemu-image
EINIT_ENTITY EinitQemu
CONNECTIONS_CFG "src/init.yaml.in"
SECURITY_PSL "src/security.psl.in"
IMAGE_FILES ${ENTITIES}
)
В начало