mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-14 09:03:50 +01:00
62 lines
2.5 KiB
Markdown
62 lines
2.5 KiB
Markdown
# The eXecute In-Place File System
|
|
|
|
## Description
|
|
|
|
`xipfs` is a file system designed to streamline post-issuance software
|
|
deployment. `xipfs` allows direct execution of programs from flash
|
|
memory, eliminating the need for prior copying to RAM. This approach
|
|
conserves memory space and accelerates boot times, as the
|
|
microcontroller can run code directly from storage memory without
|
|
preloading into RAM.
|
|
|
|
The `xipfs` structure is based on a linked list, where each file
|
|
occupies at least one flash memory page. To prevent fragmentation, when
|
|
a file is deleted, subsequent files are shifted to fill the vacant
|
|
space.
|
|
|
|
`xipfs` is compatible with all microcontrollers featuring addressable
|
|
flash memory and most operating systems, provided they implement the
|
|
necessary functions to interact with the flash controller.
|
|
|
|
## Limitations
|
|
|
|
`xipfs` has the following limitations:
|
|
|
|
- No journaling: `xipfs` doesn't provide journaling. Without journaling,
|
|
the file system cannot keep track of changes in a way that allows for
|
|
recovery in the event of a crash or power failure. This can lead to
|
|
data corruption and loss.
|
|
|
|
- No checksums: `xipfs` doesn't provide checksums. The lack of checksums
|
|
means that the file system cannot verify the integrity of files. This
|
|
increases the risk of undetected data corruption, as there is no
|
|
mechanism to ensure that files have not been altered or damaged.
|
|
|
|
- Per mountpoint file system lock: `xipfs` needs a file system lock per
|
|
mountpoint. Such a mechanism can lead to performance bottlenecks,
|
|
as it prevents multiple threads from accessing the file system montpoint
|
|
simultaneously.
|
|
|
|
- Fixed file size: `xipfs` provide fixed file size. By default, a file
|
|
created using `vfs_open(2)` has a fixed space reserved in flash that
|
|
is the size of a flash page. This size cannot be extended later. To
|
|
create a file larger than the fixed size of one flash page, the
|
|
`mk(1)` command or the `xipfs_new_file(3)` function must be used.
|
|
|
|
- Limited character set: `xipfs` supports only a subset of 7-bit ASCII
|
|
characters, specifically `[0-9A-Za-z\/\.\-_]`.
|
|
|
|
- Limited path length: `xipfs` maximum path length is 64 characters.
|
|
|
|
## Tested cards
|
|
|
|
`xipfs` is expected to be compatible with all boards that feature
|
|
addressable NVM. However, only the `DWM1001` board has been tested and
|
|
is confirmed to function correctly.
|
|
|
|
## Funding
|
|
|
|
The `xipfs` project is part of the TinyPART project funded by the
|
|
MESRI-BMBF German-French cybersecurity program under grant agreements
|
|
n°ANR-20-CYAL-0005 and 16KIS1395K.
|