Файл CMakeLists.txt для сборки программы Einit
Файл CMakeLists.txt для сборки инициализирующей программы Einit должен содержать следующие команды:
include (platform/image)– подключение библиотекиCMake, содержащей скрипты сборки образа решения.- Настройка пакетов системных программ и драйверов, которые необходимо включить в решение.
- Подключение пакета выполняется с помощью команды
find_package (). - Для некоторых пакетов также требуется установить значения свойств с помощью команды
set_target_properties ().
CMake-описания системных программ и драйверов, поставляемых в составе KasperskyOS Community Edition, а также их экспортированных переменных и свойств находятся в соответствующих файлах/opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/lib/cmake/<имя программы>/<имя программы>Config.cmake - Подключение пакета выполняется с помощью команды
- Для автоматического добавления описаний IPC-каналов между процессами системных программ в файл
init.yamlпри сборке решения необходимо добавить эти каналы в свойствоEXTRA_CONNECTIONSдля соответствующих программ.Обратите внимание на отступы в начале строк в свойстве
EXTRA_CONNECTIONS. Эти отступы необходимы для корректной подстановки значений в файлinit.yamlи должны соответствовать требованиям к его синтаксису.Пример создания IPC-канала от процесса программы
Tlsк процессу программыCertificateStorage:set_target_properties (${tls_ENTITY} PROPERTIES
EXTRA_CONNECTIONS
" - target: kl.CertificateStorageEntity
id: {var: CERTIFICATE_STORAGE_CONNECTION_ID, include: certificate_storage/common.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::entity PROPERTIES
EXTRA_ARGS
" - \"-f\"
- \"fstab\""
EXTRA_ENV
" ROOTFS: ramdisk0,0 / ext2 0")
В результате, при сборке решения, описание аргумента функции
main()и значение переменной окружения будут автоматически добавлены в файлinit.yamlна этапе обработки макросов шаблона init.yaml.in. set(ENTITIES <полный список программ, входящих в решение>)– определение переменнойENTITIESсо списком исполняемых файлов всех программ, входящих в решение.- Одна или несколько команд для сборки образа решения:
- build_kos_hw_image() – создает цель сборки образа решения для аппаратной платформы.
- build_sd_image() – создает цель сборки образа SD-карты для запуска решения на аппаратной платформе.
- build_kos_qemu_image() – создает цель сборки образа решения для QEMU.
Пример файла CMakeLists.txt для сборки программы Einit
CMakeLitsts.txt
# Подключение библиотеки, содержащей скрипты сборки образа решения.
include (platform/image)
include (${KL_SDK_ROOT_PATH}/common/build-sd-image.cmake)
# Определение переменной CONNECTIONS_CFG_FILE, содержащей путь к шаблону init.yaml.in.
set (CONNECTIONS_CFG_FILE "src/init.yaml.in")
# Определение переменной SECURITY_PSL, содержащей путь к шаблону security.psl.in.
set (SECURITY_PSL "src/security.psl.in")
# Настройка программы VFS.
# По умолчанию программе VFS не сопоставляется программа, реализующая блочное устройство.
# Если необходимо использовать блочное устройство, например ata из компонента ata,
# необходимо задать это устройство в переменной blkdev::entity_REPLACEMENT
# Больше информации об экспортированных переменных и свойств программы VFS
# см. в /opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/lib/cmake/vfs/vfs-config.cmake
# find_package(ata)
# set_target_properties (vfs_entity::entity PROPERTIES blkdev::entity_REPLACEMENT ata::entity)
# В простейшем случае не нужно взаимодействовать с диском,
# поэтому мы устанавливаем значение переменной blkdev::entity_REPLACEMENT равным пустой строке
set_target_properties (vfs_entity::entity PROPERTIES blkdev::entity_REPLACEMENT "")
# Определение переменной ENTITIES со списком исполняемых файлов программ
# Важно включить все программы, входящие в проект, кроме программы Einit.
# Обратите внимание на то, что имя исполняемого файла программы должно
# совпадать с названием цели, указанной в add_executable() в CMakeLists.txt для сборки этой программы.
set(ENTITIES
vfs_entity::entity
Hello
)
# Создание цели сборки с именем kos-image, которая является образом решения для аппаратной платформы.
build_kos_hw_image (kos-image
EINIT_ENTITY EinitHw
CONNECTIONS_CFG ${CONNECTIONS_CFG_FILE}
SECURITY_PSL ${SECURITY_PSL}
IMAGE_FILES ${ENTITIES}
)
# Создание цели сборки с именем sd-image, которую можно использовать для создании образа SD-карты
# для запуска решения на аппаратной платформе.
build_sd_image (sd-image
KOS_IMAGE_TARGET kos-image
)
# Создание цели сборки с именем kos-qemu-image, которая является образом решения для QEMU.
build_kos_qemu_image (kos-qemu-image
EINIT_ENTITY EinitQemu
CONNECTIONS_CFG ${CONNECTIONS_CFG_FILE}
SECURITY_PSL ${SECURITY_PSL}
IMAGE_FILES ${ENTITIES}
)