Добавление динамических библиотек в образ решения на базе KasperskyOS

21 мая 2024

ID shared_libraries_adding_to_image

Чтобы добавить динамические библиотеки в образ решения на базе KasperskyOS, нужно использовать параметры PACK_DEPS_COPY_ONLY ON, PACK_DEPS_LIBS_PATH и PACK_DEPS_COPY_TARGET в CMake-командах build_kos_qemu_image() и build_kos_hw_image().

Пример:

set(RESOURCES ${CMAKE_SOURCE_DIR}/resources)

set(FSTAB ${RESOURCES}/fstab)

set(DISK_IMG ${CMAKE_CURRENT_BINARY_DIR}/ramdisk0.img)

set(RESOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../resources)

set(EXT4_PART_DIR ${CMAKE_CURRENT_BINARY_DIR}/../system_hdd)

set_target_properties(${vfs_ENTITY} PROPERTIES

EXTRA_ARGS

" - \"-f\"

- \"fstab\""

EXTRA_ENV

" ROOTFS: ramdisk0 / ext4 0"

${blkdev_ENTITY}_REPLACEMENT "${ramdisk_ENTITY};${sdcard_ENTITY}")

add_custom_target(copy-so)

add_custom_command(OUTPUT ${DISK_IMG}

COMMAND ${CMAKE_COMMAND} -E copy_directory ${RESOURCES_DIR}/rootdir ${EXT4_PART_DIR}

COMMAND mke2fs -v -d ${EXT4_PART_DIR} -t ext4 ${DISK_IMG} 40M

DEPENDS copy-so

COMMENT "Creating disk image '${DISK_IMG}' from files in '${EXT4_PART_DIR}' ...")

build_kos_hw_image(kos-image

...

IMAGE_FILES ${ENTITIES_LIST} ${FSTAB} ${DISK_IMG}

PACK_DEPS_COPY_ONLY ON

PACK_DEPS_LIBS_PATH ${EXT4_PART_DIR}/lib

PACK_DEPS_COPY_TARGET copylibs)

if(PLATFORM_SUPPORTS_DYNAMIC_LINKING)

add_dependencies(copy-so copylibs)

endif()

Динамические библиотеки, от которых зависят программы решения, будут добавлены в образ накопителя (например, с файловой системой ext4), который будет включен в образ решения.

Динамические библиотеки, которые загружаются в память вызовом функции dlopen() интерфейса POSIX, не попадут в образ решения.

Система сборки выполняет следующие действия:

  • Осуществляет поиск динамических библиотек и копирует эти библиотеки в директорию, путь к которой указан в параметре PACK_DEPS_LIBS_PATH CMake-команд build_kos_qemu_image() и build_kos_hw_image(). (Чтобы найденные динамические библиотеки попали в образ накопителя, эта директория должна находиться в файловой системе, которая будет помещена в образ накопителя.)
  • Создает образ накопителя, который включает директорию с динамическими библиотеками.

    Чтобы создать образ накопителя, нужно использовать CMake-команду add_custom_command(). Цель, указанная в параметре DEPENDS CMake-команды add_custom_command(), означает создание образа накопителя. Цель, указанная в параметре PACK_DEPS_COPY_TARGET CMake-команд build_kos_qemu_image() и build_kos_hw_image(), означает копирование динамических библиотек. Чтобы образ накопителя был создан только после завершения копирования динамических библиотек, нужно использовать CMake-команду add_dependencies().

  • Добавляет образ накопителя в образ решения.

    Чтобы добавить образ накопителя в образ решения, нужно указать полный путь к образу накопителя в параметре IMAGE_FILES CMake-команд build_kos_qemu_image() и build_kos_hw_image().

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