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

12 января 2026

ID vfs_app_build

При сборке исполняемого файла 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 в случае исполнения сетевого драйвера в контексте отдельного процесса), а также библиотеками реализации файловых систем.

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