KasperskyOS Community Edition 1.3

Файл CMakeLists.txt для сборки программы Einit

Файл CMakeLists.txt для сборки инициализирующей программы Einit должен содержать следующие команды:

  • include (platform/image) – подключение библиотеки CMake, содержащей скрипты сборки образа решения.
  • project_header_default ("STANDARD_GNU_17:YES" "STRICT_WARNINGS:NO") – установка флагов компилятора и компоновщика.
  • Настройка пакетов системных программ и драйверов, которые необходимо включить в решение.
    • Подключение пакета выполняется с помощью команды find_package ().
    • Для некоторых пакетов также требуется установить значения свойств с помощью команды set_target_properties ().

    CMake-описания системных программ и драйверов, поставляемых в составе KasperskyOS Community Edition, а также их экспортированных переменных и свойств находятся в соответствующих файлах /opt/KasperskyOS-Community-Edition-<version>/sysroot-*-kos/lib/cmake/<имя программы>/<имя программы>-config.cmake

  • Для автоматического добавления описаний IPC-каналов между процессами системных программ в файл init.yaml при сборке решения необходимо добавить эти каналы в свойство EXTRA_CONNECTIONS для соответствующих программ.

    Обратите внимание на отступы в начале строк в свойстве EXTRA_CONNECTIONS. Эти отступы необходимы для корректной подстановки значений в файл init.yaml и должны соответствовать требованиям к его синтаксису.

    Например, программа VFS по умолчанию не имеет канала для соединения с программой Env. Чтобы описание такого канала автоматически добавилось в файл init.yaml при сборке решения, необходимо добавить следующий вызов в файл CMakeLists.txt для сборки программы Einit:

    set_target_properties (vfs_entity::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::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

project (einit) # Подключение библиотеки, содержащей скрипты сборки образа решения. include (platform/image) include (${KL_SDK_ROOT_PATH}/common/build-sd-image.cmake) # Установка флагов компилятора и компоновщика. project_header_default ("STANDARD_GNU_17:YES" "STRICT_WARNINGS:NO") # Определение переменной 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-<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} )