Монтирование файловых систем при запуске 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
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.