При сборке исполняемого файла VFS можно включить в него именно ту функциональность, которая требуется, например:
Например, при разделении файловых и сетевых вызовов понадобится сборка "файловой версии" и "сетевой версии" VFS. В некоторых случаях в VFS потребуется включить и сетевой стек, и файловые системы ("полная версия" VFS).
Сборка "файловой версии" VFS
Рассмотрим программу VFS, содержащую только реализацию файловой системы lwext4 и не содержащую сетевого стека. Для сборки такого исполняемого файла необходимо файл с функцией main()
скомпоновать с библиотеками vfs_server
, vfs_fs
и lwext4
:
CMakeLists.txt
project (vfsfs)
include (platform/nk)
# Установка флагов компиляции
project_header_default ("STANDARD_GNU_11:YES" "STRICT_WARNINGS:NO")
add_executable (VfsFs "src/vfs.c")
# Компоновка с библиотеками VFS
target_link_libraries (VfsFs
${vfs_SERVER_LIB}
${LWEXT4_LIB}
${vfs_FS_LIB})
# Подготовка VFS для соединения с процессом ramdisk-драйвера
set_target_properties (VfsFs PROPERTIES ${blkdev_ENTITY}_REPLACEMENT ${ramdisk_ENTITY})
Драйвер блочного устройства не может быть скомпонован с VFS, поэтому всегда должен быть запущен как отдельный процесс.
Взаимодействие трех процессов: клиента, "файловой версии" VFS и драйвера блочного устройства
Сборка "сетевой версии" VFS совместно с сетевым драйвером
Рассмотрим программу VFS, содержащую сетевой стек с драйвером и не содержащую реализаций файловых систем. Для сборки такого исполняемого файла необходимо файл с функцией main()
скомпоновать с библиотеками vfs_server
, vfs_implementation
и dnet_implementation
.
CMakeLists.txt
project (vfsnet)
include (platform/nk)
# Установка флагов компиляции
project_header_default ("STANDARD_GNU_11:YES" "STRICT_WARNINGS:NO")
add_executable (VfsNet "src/vfs.c")
# Компоновка с библиотеками VFS
target_link_libraries (VfsNet
${vfs_SERVER_LIB}
${vfs_IMPLEMENTATION_LIB}
${dnet_IMPLEMENTATION_LIB})
# Отключение драйвера блочного устройства
set_target_properties (VfsNet PROPERTIES ${blkdev_ENTITY}_REPLACEMENT "")
Библиотека dnet_implementation
уже включает в себя сетевой драйвер, поэтому запуск отдельного процесса драйвера не требуется.
Взаимодействие процесса Client с процессом "сетевой версии" VFS
Сборка "сетевой версии" VFS с отдельным сетевым драйвером
Еще один вариант сборки "сетевой версии" VFS – без сетевого драйвера. Сам сетевой драйвер необходимо будет запустить как отдельный процесс. Взаимодействие с драйвером происходит через IPC с помощью библиотеки dnet_client
.
Таким образом, необходимо файл с функцией main()
скомпоновать с библиотеками vfs_server
, vfs_implementation
и dnet_client
.
CMakeLists.txt
project (vfsnet)
include (platform/nk)
# Установка флагов компиляции
project_header_default ("STANDARD_GNU_11:YES" "STRICT_WARNINGS:NO")
add_executable (VfsNet "src/vfs.c")
# Компоновка с библиотеками VFS
target_link_libraries (VfsNet
${vfs_SERVER_LIB}
${vfs_IMPLEMENTATION_LIB}
${dnet_CLIENT_LIB})
# Отключение драйвера блочного устройства
set_target_properties (VfsNet PROPERTIES ${blkdev_ENTITY}_REPLACEMENT "")
Взаимодействие трех процессов: клиента, "сетевой версии" VFS и сетевого драйвера
Сборка "полной версии" VFS
Если в VFS требуется включить как сетевой стек, так и реализации файловых систем, то при сборке следует использовать библиотеки vfs_server
, vfs_implementation
, dnet_implementation
(или dnet_client
– в случае отдельного сетевого драйвера), а также библиотеки реализации файловых систем.