Чтобы добавить динамические библиотеки в образ решения на базе 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()
.