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

12 января 2026

ID cmake_lists_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}

)

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!