Сборка исполняемого файла VFS

При сборке исполняемого файла VFS можно включить в него именно ту функциональность, которая требуется, например:

Например, при разделении информационных потоков, связанных с файловыми системами и сетевым стеком, понадобится сборка "файловой версии" и "сетевой версии" VFS. В некоторых случаях в VFS требуется включить и сетевой стек, и файловые системы.

Сборка "файловой версии" программы VFS

В этом примере программа VFS содержит только реализацию файловой системы lwext4 (см. рис. ниже). Выполняется компиляция файла реализации vfs.c и компоновка с библиотеками vfs_server, vfs_fs и lwext4:

CMakeLists.txt

project (vfsfs)

include (platform/nk)

# Установка флагов компиляции

project_header_default ("STANDARD_GNU_17: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 содержит реализации сетевого стека и сетевого драйвера (см. рис. ниже). Выполняется компиляция файла реализации vfs.c и компоновка с библиотеками vfs_server, vfs_implementation и dnet_implementation:

CMakeLists.txt

project (vfsnet)

include (platform/nk)

# Установка флагов компиляции

project_header_default ("STANDARD_GNU_17: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 "")

Взаимодействие процесса Client с процессом "сетевой версии" VFS

Сборка "сетевой версии" программы VFS без сетевого драйвера

В этом примере "сетевая версия" программы VFS не содержит реализацию сетевого драйвера (см. рис. ниже). (Сетевой драйвер будет исполняться в контексте отдельного процесса. Взаимодействие с драйвером будет происходить через IPC с помощью библиотеки dnet_client.) Выполняется компиляция файла реализации vfs.c и компоновка с библиотеками vfs_server, vfs_implementation и dnet_client:

CMakeLists.txt

project (vfsnet)

include (platform/nk)

# Установка флагов компиляции

project_header_default ("STANDARD_GNU_17: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.c и компоновку с библиотеками vfs_server, vfs_implementation, dnet_implementation (или dnet_client в случае исполнения сетевого драйвера в контексте отдельного процесса), а также библиотеками реализации файловых систем.

В начало