ae24179211
We have quite a few GSoC projects around this, it would make sense to have some documentation for people attempting them. Add some generic overview of filesystems and how to test them.
56 lines
2.3 KiB
Plaintext
56 lines
2.3 KiB
Plaintext
Writing filesystem drivers for Haiku
|
|
====================================
|
|
|
|
Filesystem drivers are in src/add-ons/kernel/file_system
|
|
|
|
A filesystem usually relies on an underlying block device, but that's not
|
|
required. For example, NFS is a network filesystem, so it doesn't need one.
|
|
|
|
Development tools
|
|
-----------------
|
|
|
|
# fs_shell
|
|
|
|
It is not convenient to test a filesystem by reloading its driver into a
|
|
running Haiku system (kernel debugging is often not as easy as userland).
|
|
Moreover, the filesystem interacts with other components of the system
|
|
(file cache, block cache, but also any application reading or writing files).
|
|
|
|
For the early development steps, it is much easier to run the filesystem code
|
|
in a more controlled environment. This can be achieved through the use of
|
|
a "filesystem shell": a simple application that runs the filesystem code, and
|
|
allows performing specific operations through a command line interface.
|
|
|
|
Example of fs_shell implementations are available under src/tests/add-ons/kernel/file_systems/
|
|
for the bfs and btrfs filesystems.
|
|
|
|
For example, to build the fs_shell for btrfs, use
|
|
|
|
jam -q "<build>btrfs_shell"
|
|
|
|
To run it, use
|
|
|
|
jam run objects/haiku_host/x86_gcc2/release/tests/add-ons/kernel/file_systems/btrfs/btrfs_shell/btrfs_shell [arguments]
|
|
|
|
You need to pass at least a file or device containing a filesystem image as an
|
|
argument. You need some tool to create one. It is possible to work using an
|
|
actual disk volume (but be careful, it's risky to use one with useful data in it),
|
|
a file, or a RAM disk, depending on what you are doing.
|
|
|
|
# userlandfs
|
|
|
|
As a second step, it's possible to use the filesystem as part of a runing
|
|
system, while still running it in userland. This allows use of Debugger,
|
|
memory protection, and in general any kind of userland debugging or tracing
|
|
tool. When the filesystem crashes, it does not bring down the whole system.
|
|
|
|
Userlandfs can run the filesystem code using the same interface as the kernel,
|
|
therefore, once everything is working with userlandfs, running the filesystem
|
|
as kernel code is usually quite easy (and provides a performance boost)
|
|
|
|
# Torture and performance tests
|
|
|
|
Once the basic operations are working fine, it is a good idea to perform more
|
|
agressive testing. Examples of scripts doing this are available in
|
|
src/tests/add-ons/kernel/file_systems/ for the fat and ext2 filesystems.
|