> I'm afraid that this leaves only one viable solution: To stub the I/O
> interplay of fuse with the libc and map those interactions directly to
> the raw VFS, not going through the libc. This is tedious but the only
> clean way I can see. It would essentially remove the dependency of the
> fuse VFS plugin from the libc's I/O operations, alleviating the cyclic
> dependency.
> 
> Note that freestanding libc functionality like string operations are ok
> to use. E.g., the ttf VFS plugin depends on the libc in such a "weak"
> way because the stb library used for the glyph rendering happens to call
> few libc utilities. But I/O is a no go.

Organizing my thoughts and looking for inspiration:

1) Stubbed Libc:

I see there is a "mini libc" which supports the run/demo scenario.

And there is somewhat larger one for lwext4 here, inside include/ and libc.cc:

  https://github.com/genodelabs/genode-world/tree/master/src/lib/lwext4

(probably I should look at this (and fatfs, and...) more in depth, see how they 
deal with access to the "Block device" sans calling read()/seek() but using the 
Genode API instead.)

So I could do something similar, except I'd stub/shim read(), write() and 
ioctl()
(which NTFS/Fuse make heavy use of) instead of just malloc() and strcpy().

Beyond my NTFS/BFS/XFS use cases there would likely be more use cases,
so it might make sense for me to refactor whatever I come up with into
an e.g. world/src/lib/generic-libc/ library or some such.

Then, said static (?) library would be common to (and linked to) components 
that need it,
including the various FUSE file systems.


2) Late loading:

Alternatively, I have to wonder whether some runtime loading (instead of 
launchtime loading)
of the VFS plug-in would make sense. Generally speaking, Genode supports 
dlopen()-style loading of .so libraries,
so I suppose if the VFS server gets fully loaded, and then later its "config" 
ROM gets amended
with an extra plug-in, then the plug-in would be initialized with a full LibC 
context.

Genode/Sculpt has gotten various "dynamic scenarios" over the years, I wonder 
if that one is implemented ?
It might be a "nice-to-have", beyond the immediate problem discussed here,
since it's nice to be able to try out new FS plug-ins without rebooting Genode.


Anyway, will dig into all that in the coming weeks...

Cedric






_______________________________________________
Genode users mailing list
[email protected]
https://lists.genode.org/listinfo/users

Reply via email to