eVFS is a lightweight and flexible virtual file system designed for embedded systems written in C++23. It provides a unified interface for file operations across various storage mediums, enabling seamless integration and portability in embedded applications.
- Modular Architecture: Easily integrates with different storage backends, allowing for customization based on specific project requirements.
- Platform Agnostic: Designed to be compatible with various embedded platforms, facilitating code reuse and reducing development time.
- Efficient Resource Utilization: Optimized for minimal memory footprint and low computational overhead, making it suitable for resource-constrained environments.
- Syscalls: Provides ready-to-use integration with Newlib's syscalls.
- C++ support: Enables
std::filesystem
functionality likestd::directory_iterator
- Filesystems: Out-of-box support for ext4, FAT filesystems
- A compatible C/C++ compiler.
- Meson build system.
-
Clone the Repository:
git clone https://github.com/mp-coding/evfs.git
-
Navigate to the Project Directory:
cd evfs
-
Build the Project Using Meson:
meson setup build meson compile -C build
-
Run tests:
meson test -C build
Include the eVFS library in your project via Git submodule or Meson subprojects.
eVFS exports several dependencies:
evfs_dep
- main library dependencyevfs_syscalls_dep
- generic syscalls dependency to integrate with libs other than Newlibevfs_syscalls_newlib_dep
- ready-to-use dependency with implementations for all the required Newlib syscalls
During constructing of eVFS instance you need to provide an implementation of StdStream
.
Doing so enables use of stdin/stdout/stderr
, and corresponding accompanying std API like printf
, scanf
, etc.
From this point, you can use of vast sdlib/posix API:
fopen/fclose/fwrite/fread/fstat/fseek
mount/umount
stdin/stdout/stderr
mkdir/rmdir/opendir/dirnext
- ... and many more
Contributions are welcome! Please follow these steps:
- Fork the Repository.
- Create a New Branch:
git checkout -b feature/YourFeatureName
- Commit Your Changes:
git commit -m 'Add some feature'
- Push to the Branch:
git push origin feature/YourFeatureName
- Open a Pull Request.
This project is licensed under the MIT License. See the LICENSE file for details.