Hello,
As this list can attest, I previously spent a bit of time diving into the way
dynamic linking is supported by L4Re to get shared mode programs working. This
turned out to have a relatively simple fix related to symbols employed by GCC-
generated code.
But during this exercise, I gained some familiarity with the way libraries are
loaded, and this appears to involve the virtual filesystem support, with the
loader perusing the filesystem to access libraries, and with these being
…
[View More]provided as modules by the "rom" filesystem.
Since then, I've spent some time looking at how files are provided by
filesystems and accessed by code that uses the conventional C or POSIX library
interfaces. It raises a few questions about why things are done in a
particular way in L4Re, and which approaches are in use for other L4-based
systems, especially those that seek to provide general-purpose, multi-user
solutions.
What I think I now understand about the virtual filesystem support in L4Re is
as follows. The virtual filesystem itself is a "client-side" construct,
meaning that it resides within any given program. That programs have their own
view of a filesystem is not too different from what the documentation about
systems like the Hurd describes and advocates, and I suppose it is a tempting
approach because it gives each program the flexibility to be customised in
this regard.
However, it seems that beyond the internal "mount tree" representation,
configuration of the namespace hierarchy is largely done using the L4Re
namespace concept, with namespaces acting as directories, and non-namespace
objects within the hierarchy interpreted as particular file types. Apart from
the interpretation of namespaces as directories, it seems that for the most
part, dataspaces are employed to be interpreted as file objects.
I will admit that I didn't really look very hard at how different systems
provide file access before now, but what surprised me slightly was the
apparent lack of delegation in L4Re. As far as I can tell, on systems based on
kernels like Linux, the open library function will employ a system call to
delegate the matter of finding the file and obtaining a way of accessing it to
the familiar monolithic-kernel-plus-filesystems arrangement.
On more "exotic" systems (than Linux) like Minix 3 or the Hurd, it appears
that delegation to a virtual filesystem server [1] or servers [2] occurs to
mediate access to specific files. Some systems like Inferno and Plan 9 employ
protocols [3] to formalise the client-server relationship. I had almost
expected to find similar things in L4Re, but I could only confirm their
absence after reviewing the various VFS abstractions.
One thing I wonder about is whether the current L4Re approach is able to
satisfactorily deal with filesystem content that needs to serve different user
entities, with content having different permission and ownership rights. It
seems that the filesystem logic has to be available as a library within a
program, which is not necessarily a problem.
But to avoid filesystem content being completely exposed to the discretion of
user programs (reminiscent of the problems with early Network File System
implementations), the library would need to call out to other entities, which
doesn't appear to be done with the current L4Re abstractions. One could
implement support for, say, the ext3 filesystem in a library, operating on a
dataspace provided at some kind of mountpoint in a directory (with the
directory being provided by a namespace, of course) but it would be like
giving a user program access to a block device in a traditional Unix-like
system.
Are there any articles about the design of L4Re that might explain the
motivations here? And are there any accessible-but-detailed articles about
other microkernel-based systems and the way in which they structure their
filesystem architectures? I looked around on the TU-Dresden site for
materials, but I didn't immediately find anything obviously relevant.
Paul
[1] https://wiki.minix3.org/doku.php?id=developersguide:vfsinternals
[2] https://www.gnu.org/software/hurd/hurd-talk.html#pat
[3] http://doc.cat-v.org/inferno/4th_edition/styx
[View Less]
Dear l4-hackers,
the community and team around the Genode OS framework proudly presents
release 18.08, which is at the same time the 10th anniversary of our
project.
With this release we follow our ambition to sculpt a general-purpose
OS using the Genode framework. It adds support for a lot of different
recent hardware, the ability to apply Intel microcode updates in a
kernel agnostic fashion, and extends the interactive usability of the
system.
Readers of this mailing list might be …
[View More]especially interested in the
update of the NOVA and Fiasco.OC kernels used by the framework to
recent versions.
The highlights of Genode 18.08 are:
- Sculpt OS with live runtime view
- Device drivers
- Linux device-driver environment based on kernel 4.16.3
- Updated and enhanced Intel framebuffer and wireless drivers
- De-componentized USB stack, support for isochronous devices
- Improved device compatibility of NIC and PS/2 drivers
- Experimental runtime for Zircon-based drivers
- Base framework and OS-level infrastructure
- NIC-router support for multiple uplinks
- New VFS plugin for using LwIP as TCP/IP stack
- Cached file-system-based ROM service
- VFS plugin for importing initial content
- Enhanced Ada language support
- Libraries and applications
- Python 3
- VirtualBox 5.1.38
- Platforms
- New Intel Microcode update mechanism
- Multiprocessor support for our custom kernel on x86
- Updated NOVA and Fiasco.OC kernels
All of these and more improvements can be read in detail in the
release documentation:
https://genode.org/documentation/release-notes/18.08
We are looking forward for your feedback.
Happy hacking!
--
Stefan Kalkowski
Genode labs
https://github.com.skalk | https://genode.org
[View Less]
Hello,
I thought I'd try and get L4Re and the UX variant of Fiasco.OC working again.
Various errors with the actual compiler - not typical compilation errors -
have previously occurred, but system updates come along every so often and I
saw that new revisions of L4Re/Fiasco.OC have also arrived fairly recently.
Unfortunately, the L4Re build fails with complaints about the linking process.
Here is the verbose build output at the point of failure:
[fb-drv] ==> Linking fb-drv
…
[View More]LD_PRELOAD=libgendep.so
LD_LIBRARY_PATH=:/home/paulb/L4/UX/src/l4/mybuild/tool/gendep/32:/home/paulb/L4/UX/src/l4/mybuild/tool/gendep
GENDEP_TARGET=fb-drv GENDEP_BINARY=ld GENDEP_BINARY_ALT1=ld
/home/paulb/L4/UX/src/l4/tool/bin/l4-bender -t ld -
Dl4obj=/home/paulb/L4/UX/src/l4/mybuild -Dl4dir=/home/paulb/L4/UX/src/l4 -
Dgcclibdir="/usr/lib/gcc/i686-linux-gnu/7/ /usr/lib/gcc/i686-linux-
gnu/7/../../../../i686-linux-gnu/lib/i686-linux-gnu/7/ /usr/lib/gcc/i686-
linux-gnu/7/../../../../i686-linux-gnu/lib/i386-linux-gnu/ /usr/lib/gcc/i686-
linux-gnu/7/../../../../i686-linux-gnu/lib/../lib/ /usr/lib/gcc/i686-linux-
gnu/7/../../../i686-linux-gnu/7/ /usr/lib/gcc/i686-linux-gnu/7/../../../i386-
linux-gnu/ /usr/lib/gcc/i686-linux-gnu/7/../../../../lib/ /lib/i686-linux-
gnu/7/ /lib/i386-linux-gnu/ /lib/../lib/ /usr/lib/i686-linux-gnu/7/
/usr/lib/i386-linux-gnu/ /usr/lib/../lib/ /usr/lib/gcc/i686-linux-
gnu/7/../../../../i686-linux-gnu/lib/ /usr/lib/gcc/i686-linux-gnu/7/../../../
/lib/ /usr/lib/" -Dl4system=x86_gen -Dl4api=l4f -Dlinker="ld -m elf_i386" --
spec=/home/paulb/L4/UX/src/l4/mk/bid-bender.spec -- -o fb-drv -MD -MF ./.fb-
drv.pcs.d -PClibc_support_misc -PClibio-vbus -PCx86emu_int10 -PCx86emu_int10 -
PCstdlibs -static -gc-sections -Ttext-segment=0x01000000 --defsym
__L4_KIP_ADDR__=0xaffff000 --defsym __L4_STACK_ADDR__=0xb0000000 -L
/home/paulb/L4/UX/src/l4/mybuild/lib/x86_gen/l4f -L
/home/paulb/L4/UX/src/l4/mybuild/lib/x86_gen -L
/home/paulb/L4/UX/src/l4/mybuild/lib --warn-common -Ttext-segment=0x01000000
main.o dummy.o splash.o vesa.o
ld: section `.note.gnu.property' assigned to non-existent phdr `interp'
ld: section `.rel.dyn' assigned to non-existent phdr `interp'
I know that the ldscripts have been changed, but I struggle to see how the
above relates to them or whether they are even involved in this particular
outcome. Might there be something obviously wrong somewhere in the recent
changes?
Paul
[View Less]