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 clientaname. Optional, it specifies the file tree that the client requests to accesstrans. Selects the transport layer (virtio/socket)msize. The maximum size of the messagetag. The tag of the mount point
Different transport layers have different requirements for parameter passing. Here are some examples:
Qemu + VIRTIO
mount -t v9fs -o trans=virtio,tag=<mount_tag> /dirSimilarly, we need to bring the corresponding parameters in qemu
-fsdev local,security_model=none,id=fsdev1,path=<share-path> \
-device virtio-9p-device,id=fs1,fsdev=fsdev1,mount_tag=<mount_tag>For how to start virtio-9p in QEMU, please refer to the document:
Socket
mount -t v9fs -o trans=socket,tag=<IP Address>:[Port Default 563],aname=[path] /dirThere 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)
sudo ./ya-vm-file-server --network-address <IP Address>:<Server Port> --mount-point <share-path>Result
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>