diff --git a/Documentation/components/filesystem/index.rst b/Documentation/components/filesystem/index.rst index 019787e35ebd4..95d46fdfae5ea 100644 --- a/Documentation/components/filesystem/index.rst +++ b/Documentation/components/filesystem/index.rst @@ -557,6 +557,7 @@ NuttX provides support for a variety of file systems out of the box. nxflat.rst pseudofs.rst special_files_dev_num.rst + v9fs.rst FS Categories ------------- diff --git a/Documentation/components/filesystem/v9fs.rst b/Documentation/components/filesystem/v9fs.rst new file mode 100644 index 0000000000000..f86ad98e5e500 --- /dev/null +++ b/Documentation/components/filesystem/v9fs.rst @@ -0,0 +1,94 @@ +V9FS +==== + +V9FS is a remote file system based on the 9P2000.L protocol. + +Adding V9FS to the NuttX Configuration +====================================== + +The V9FS client is easy to add to your configuration. Just add +``CONFIG_FS_V9FS`` to ``nuttx/.config``. + +In order to fully run V9FS, you also need to select a transport layer +driver. The two currently available are: + + - **VIRTIO** -> ``CONFIG_V9FS_VIRTIO_9P=y`` + - **SOCKET** -> ``CONFIG_V9FS_SOCKET_9P=y`` + +NFS Mount Command +================= + +In V9FS, we have some special parameters + + - ``uname``. Used to indicate the user identity of the client + - ``aname``. Optional, it specifies the file tree that the client requests to access + - ``trans``. Selects the transport layer (virtio/socket) + - ``msize``. The maximum size of the message + - ``tag``. The tag of the mount point + +Different transport layers have different requirements for parameter +passing. Here are some examples: + +Qemu + VIRTIO +-------------- + +.. code-block:: console + + mount -t v9fs -o trans=virtio,tag= /dir + +Similarly, we need to bring the corresponding parameters in qemu + +.. code-block:: console + + -fsdev local,security_model=none,id=fsdev1,path= \ + -device virtio-9p-device,id=fs1,fsdev=fsdev1,mount_tag= + +For how to start virtio-9p in QEMU, please refer to the document: + + - https://wiki.qemu.org/Documentation/9psetup + + + +Socket +------- + +.. code-block:: console + + mount -t v9fs -o trans=socket,tag=:[Port Default 563],aname=[path] /dir + +There are many types of 9P socket servers. Here we use R9-fileserver +(a cross-platform 9p server based on Rust +https://github.com/crafcat7/R9-fileserver) + +.. code-block:: console + + sudo ./ya-vm-file-server --network-address : --mount-point + + +Result +------ + +.. code-block:: fish + + NuttShell (NSH) + nsh> mkdir mnt + nsh> + nsh> ls mnt + /mnt: + nsh> mount -t v9fs -o trans=virtio,tag=hostshare /mnt/v9fs + nsh> + nsh> ls /mnt/v9fs + /mnt/v9fs: + sdcard/ + mnt/ + nsh> + nsh> echo "This is a test" >/mnt/v9fs/testfile.txt + nsh> ls -l /mnt/v9fs + /mnt/v9fs: + drwxrwxrwx 1000 1000 4096 sdcard/ + -rw-rw-rw- 1000 1000 15 testfile.txt + drwxrwxrwx 1000 1000 4096 mnt/ + nsh> + nsh> cat /mnt/v9fs/testfile.txt + This is a test + nsh>