diff --git a/docs/develop/befs/resources.html b/docs/develop/file_systems/befs/resources.html similarity index 100% rename from docs/develop/befs/resources.html rename to docs/develop/file_systems/befs/resources.html diff --git a/docs/develop/file_systems/overview.txt b/docs/develop/file_systems/overview.txt new file mode 100644 index 0000000000..919a899751 --- /dev/null +++ b/docs/develop/file_systems/overview.txt @@ -0,0 +1,55 @@ +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 "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.