KasperskyOS Community Edition 1.0

Монтирование файловых систем при запуске VFS

Компонент VFS по умолчанию обеспечивает доступ к:

  • Файловой системе RAMFS. По умолчанию RAMFS монтирована в корневой каталог.
  • Объектному ROMFS-хранилищу. Хранилище содержит неисполняемые (в т.ч. конфигурационные) файлы, добавленные при сборке в образ решения. По умолчанию файловая система ROMFS не монтирована, но доступ к хранилищу возможен косвенным образом – например, через аргумент -f.

Если требуется монтировать другие файловые системы, это можно сделать как после запуска VFS, используя вызов mount(), так и непосредственно в момент запуска сущности VFS, передав ей следующие аргументы и переменные окружения:

  • -l <запись в формате fstab>

    Аргумент -l позволяет монтировать файловую систему.

  • -f <путь к файлу fstab>

    Аргумент -f позволяет передать файл с записями в формате fstab для монтирования файловых систем. Файл будет искаться в ROMFS-хранилище. Если переменная UMNAP_ROMFS определена, то файл будет искаться на файловой системе, смонтированной с помощью переменной ROOTFS.

  • UNMAP_ROMFS

    Если переменная UNMAP_ROMFS определена, то ROMFS-хранилище будет удалено. Это позволяет сэкономить память и изменить поведение при использовании аргумента -f.

  • ROOTFS = <запись в формате fstab>

    Переменная ROOTFS позволяет монтировать файловую систему в корневой каталог. В комбинации с переменной UNMAP_ROMFS и аргументом -f позволяет искать fstab-файл на монтированной файловой системе, а не в ROMFS-хранилище.

Пример:

env.c

#include <env/env.h>

#include <stdlib.h>

int main(int argc, char** argv)

{

/* Для сущности Vfs1 будут монтированы файловые системы devfs и romfs. */

const char* Vfs1Args[] = {

"-l", "devfs /dev devfs 0",

"-l", "romfs /etc romfs 0"

};

ENV_REGISTER_ARGS("Vfs1", Vfs1Args);

/* Для сущности Vfs2 будут монтированы файловые системы, заданные через файл /etc/dhcpcd.conf, который расположен в ROMFS-хранилище. */

const char* Vfs2Args[] = { "-f", "/etc/dhcpcd.conf" };

ENV_REGISTER_ARGS("Vfs2", Vfs2Args);

/* Для сущности Vfs3 в корневой каталог будет монтирована файловая система ext2, на которой будет найден файл /etc/fstab для монтирования дополнительных файловых систем. ROMFS-хранилище будет удалено. */

const char* Vfs3Args[] = { "-f", "/etc/fstab" };

const char* Vfs3Envs[] = {

"ROOTFS=ramdisk0,0 / ext2 0",

"UNMAP_ROMFS=1"

};

ENV_REGISTER_PROGRAM_ENVIRONMENT("Vfs3", Vfs3Args, Vfs3Envs);

envServerRun();

return EXIT_SUCCESS;

}

См. также примеры net_with_separate_vfs, net2_with_separate_vfs, multi_vfs_dhcpcd, multi_vfs_dns_client и multi_vfs_ntpd в составе KasperskyOS Community Edition.