mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-24 15:56:41 +00:00
493 lines
26 KiB
Plaintext
493 lines
26 KiB
Plaintext
|
|
=======================================
|
|
Future Challenges of the Genode project
|
|
=======================================
|
|
|
|
|
|
Abstract
|
|
########
|
|
|
|
This document compiles various ideas to pursue in the context of Genode. It is
|
|
meant as source of inspiration for individuals who are interested in getting
|
|
involved with the project and for students who want to base their student
|
|
research projects on Genode.
|
|
|
|
|
|
Applications and library infrastructure
|
|
#######################################
|
|
|
|
:Chrome web browser:
|
|
|
|
The Chrome web browser promises to address the most pressing security
|
|
concerns of web application by isolation measures, in particular the
|
|
sandboxing of plugins and the confinement of individual web applications. As
|
|
we demonstrated with the Genode Live CD 10.11, Genode facilitates a more
|
|
natural way to pursue such techniques compared with current commodity
|
|
operating systems. Furthermore, the use of Genode as base platform for Chrome
|
|
would strengthen the web-browser security by dwarfing its trusted computing
|
|
base by two orders of magnitude compared to the use of Linux as base
|
|
platform. This would allow Chrome to be considered as a secure interface to
|
|
the web for use cases in the high-assurance domain.
|
|
|
|
:Qemu or Virtual Box on Genode:
|
|
|
|
Using Genode as hosting platform for virtual machines running in Qemu or
|
|
Virtual Box would enable the execution of security-sensitive functions (for
|
|
example cryptography) with a minimally-complex trusted computing base
|
|
beside running Windows on the same machine.
|
|
|
|
:VNC server implementing Genode's framebuffer session interface:
|
|
|
|
With 'Input' and 'Framebuffer', Genode provides two low-level interfaces
|
|
used by interactive applications. For example, the Nitpicker GUI server uses
|
|
these interfaces as a client and, in turn, exports multiple virtual
|
|
'Framebuffer' and 'Input' interfaces to its clients. This enables a
|
|
highly modular use of applications such as the nesting of GUIs. By
|
|
implementing the 'Framebuffer' and 'Input' interfaces with a VNC server
|
|
implementation, all graphical workloads of Genode would become available over
|
|
the network. One immediate application of this implementation is the remote
|
|
testing of graphical Genode applications running on a headless server.
|
|
|
|
:Tiled window manager:
|
|
|
|
At Genode Labs, we pursue the goal to shape Genode into an general-purpose
|
|
operating system suitable for productive work. The feature set needed to
|
|
achieve this goal largely depends on the tools and applications daily used by
|
|
the Genode engineers. As one particularly important tool for being highly
|
|
productive, we identified a tiled user interface. Currently, all developers
|
|
at Genode Labs embrace either the Ion3 window manager or the tiled Terminator
|
|
terminal emulator. Hence, we desire to have a similar mode of user
|
|
interaction on Genode as well. The goal of this challenge is to identify the
|
|
most important usage patters and the implementation of a tiled GUI that
|
|
multiplexes the framebuffer into a set of tiled and tabbed virtual
|
|
framebuffers.
|
|
|
|
Related to this work, the low-level 'Framebuffer' and 'Input' interfaces
|
|
should be subject to a revision, for example for enabling the flexible change
|
|
of framebuffer sizes as needed by a tiled user interface.
|
|
|
|
:Interactive sound switchbox based on Genode's Audio_out session interface:
|
|
|
|
Since version 10.05, Genode features a highly flexible configuration concept
|
|
that allows the arbitrary routing of session requests throughout the
|
|
hierarchic process structure. Even though primarily designed for expressing
|
|
mandatory-access control rules, the concept scales far beyond this use case.
|
|
For example, it can be used to run an arbitrary number of processes
|
|
implementing the same interface and connecting the different interface
|
|
implementations. One special case of this scenario is a chain of audio
|
|
filters with each using the 'Audio_out' session interface for both roles
|
|
client and server. Combined with the Nitpicker GUI server and Genode's
|
|
support for real-time priorities, this base techniques enable the creation of
|
|
flexible audio mixer / switchboard applications, which require dedicated
|
|
frameworks (e.g., Jack audio) on traditional operating systems. The goal of
|
|
this project is to create a show case implementation demonstrating the
|
|
feasibility for creating high-quality audio applications on Genode.
|
|
Furthermore, we wish for feedback regarding the current design of our bulk
|
|
streaming interface when used for low-latency applications.
|
|
|
|
:PDF reader for E-Government use:
|
|
|
|
A facility for reading PDF and E-Book documents is one of the indispensable
|
|
features Genode has to provide to be considered for general-purpose
|
|
computing. The goal of this work is to identify a suitable open-source PDF
|
|
engine and port it as native application to Genode. The challenging part is
|
|
to keep the complexity of this application as low as possible in order to
|
|
enable the use of this application as a trusted document reader. Further
|
|
ideas envision the use of PDF files as medium for sensitive documents
|
|
combined with measures for protecting the integrity of the displayed
|
|
information. For example, when processing contracts or similar sensitive
|
|
documents in E-Government scenarios, the consumer of such documents expects
|
|
the correct display of all the information as expressed by the creator of the
|
|
document. In the event of a compromised PDF engine or a man-in-the middle
|
|
attacker manipulating the PDF file, the consumer of the document requires a
|
|
way to identify such security breaches. In this context, running the PDF
|
|
engine in a sandboxed Genode subsystem has two incentives. First, the attack
|
|
surface for manipulating the PDF engine gets dramatically reduced, and
|
|
second, the integrity of the result of the PDF engine can be measured by an
|
|
independent trusted component facilitating Genode secure GUI server
|
|
(Nitpicker).
|
|
|
|
:Graphical on-target IPC tracing tool using Qt:
|
|
|
|
Analysing the interaction of components of a multi-server operating system
|
|
such as Genode is important to discover bottlenecks of the system and for
|
|
debugging highly complex usage scenarios involving many processes. Currently,
|
|
Genode handles this problem with two approaches. First, Genode's
|
|
recursive structure enables the integration of a subsystem in a basic
|
|
OS setup featuring only those drivers and components used for the particular
|
|
subsystem. After the successful integration of such a subsystem, it can
|
|
be embedded into a far more complex application scenario without any changes.
|
|
With this approach, the subject to analyse can be kept at a reasonable level
|
|
at integration time. For debugging purposes, the current approach is using
|
|
the debugging facilities of the respective base platforms (e.g., using
|
|
GDB on Linux, the Fiasco kernel debugger, the OKL4 kernel debugger).
|
|
|
|
However, in many cases, bottlenecks do not occur when integrating individual
|
|
sub systems but after integrating multiple of such subsystems into a large
|
|
application scenario. For such scenarios, existing debugging methodologies do
|
|
not scale. A tool is desired that is able to capture the relationships
|
|
between processes of a potentially large process hierarchy, to display
|
|
communication and control flows between those processes, and to visualize the
|
|
interaction of threads with the kernel's scheduler.
|
|
|
|
Since Qt is available natively on Genode, the creation of both offline and
|
|
on-target analysis tools has become feasible. The first step of this project
|
|
is creating an interactive on-target tool, that displays the interaction
|
|
of communicating threads as captured on the running system. The tool should
|
|
work on a selected kernel that provides a facility for tracing IPC messages.
|
|
|
|
|
|
Application frameworks
|
|
######################
|
|
|
|
:Running the Meego application stack on Genode using Qt:
|
|
|
|
With Genode 11.02, Qt has become available. The most prominent feature
|
|
of this version is the new QML language to design GUIs using a declarative
|
|
language. This technique is targeted specifically to mobile applications and
|
|
other touch-based devices. The goal of this project is to run the Meego
|
|
application stack natively on Genode. First, the software components and
|
|
Meego-specific Linux customizations must be identified. For each such
|
|
component, it must be decided whether to port its code or to reimplement its
|
|
interface. The immediate goal of the first step is running one Meego example
|
|
application natively on Genode.
|
|
|
|
:Python Qt bindings:
|
|
|
|
With the Python interpreter and the port of the Qt framework, the principle
|
|
components for Python-based GUIs on Genode are available. However, the glue
|
|
between both components is missing. The incentive of this work is supplementing
|
|
our Python port with the modules needed for real applications and porting the
|
|
Qt bindings to Genode. This would bring Genode one step closer to executing
|
|
modern Python-based GUI applications (in particular KDE4 applications).
|
|
|
|
:Evaluation of porting GTK+ to Genode:
|
|
|
|
With Qt, we have demonstrated the feasibility to run a highly-complex
|
|
application framework via Genode on a wide range of microkernels. That leaves
|
|
the question of looking into the other major toolkit in town, namely GTK+ as
|
|
used by Firefox and the Gnome desktop.
|
|
|
|
:Cairographics:
|
|
|
|
Cairo is a high-quality 2D vector graphics engine used by a large number of
|
|
open-source projects, in particular GTK+. Hence the port of Cairo is a
|
|
prerequisite for the GTK+ challenge. In addition, it would enable the
|
|
use of further libraries such as Poppler.
|
|
|
|
|
|
Device drivers
|
|
##############
|
|
|
|
:Enhancing Gallium3D support:
|
|
|
|
Genode 10.08 introduced Gallium3D including the GPU driver for Intel GMA
|
|
CPUs. With this initial version, we demonstrated that the powerful software
|
|
stack for running hardware-accelerated 3D applications can be deployed on
|
|
Genode. At the same time, it motivates us to reach out for even more
|
|
ambitious goals:
|
|
|
|
First, the current approach executes the GPU driver alongside the complete
|
|
Gallium3D software stack and the application code in one address space. To
|
|
enable the use of multiple hardware-accelerated applications running at the
|
|
same time, the GPU driver must run separated from the Gallium3D code as done
|
|
on Linux. The preliminary interfaces for this decomposition are already in
|
|
place but there are several open questions. Most importantly, the page-fault
|
|
handling of buffer objects mapped in the application's address space.
|
|
|
|
Second, we'd like to complement our current Intel GMA GPU driver with
|
|
interrupt-based synchronization, namely vblank handling. This requires an
|
|
understanding of the Intel GMA interrupt code and the enhancement of our
|
|
driver environment.
|
|
|
|
Third, we desire the use of further Gallium3D drivers, in particular the
|
|
Nouveau and r300 drivers. The basic approach to bring these drivers to Genode
|
|
is the same as for Intel GMA but the respective driver environments are yet
|
|
to be developed.
|
|
|
|
If you are interested in low-level graphics hacking, GPUs, and
|
|
high-performance graphics, this project is ideal to get you on track.
|
|
|
|
:Split USB core from USB device drivers:
|
|
|
|
Genode's current USB support is based on the Linux USB stack running as a
|
|
single process on Genode. This process includes the USB core logic, USB host
|
|
controller driver as well as the USB device drivers such as HID or USB
|
|
storage. This monolithic USB process is rather inflexible. Hence, we desire a
|
|
decomposition of this solution such that the USB host driver and each USB
|
|
device driver runs in a separate process.
|
|
|
|
:IOMMU support on the NOVA Hypervisor:
|
|
|
|
The NOVA hypervisor is the first open-source microkernel with thorough
|
|
support for IOMMUs, which principally enables the use of untrusted device
|
|
drivers alongside sensitive software on one machine. Without an IOMMU, each
|
|
device driver for a device that operates with DMA, is able to indirectly
|
|
access the whole physical memory through programming the device. With IOMMU,
|
|
the physical memory addressable by DMA operations can be restrained per
|
|
device. The goal of this challenge is to enhance Genode with I/O protection
|
|
when running on the NOVA kernel. This would clear the way towards reusing
|
|
complex untrusted device drivers running in dedicated device-driver OS
|
|
instances.
|
|
|
|
:I/O Kit:
|
|
|
|
I/O Kit is the device-driver framework as used by the Darwin operating
|
|
system, which forms the basis for Mac OS X. The port of I/O Kit would enable
|
|
the easy re-use of the library of I/O-Kit-based device drivers on Genode. As
|
|
foundation of this project, we recommend to use the DDE Kit API featured by
|
|
Genode.
|
|
|
|
:Support for multi-touch input devices:
|
|
|
|
The efforts towards enabling mobile application stacks such as Meego and
|
|
Android on Genode must be accompanied by a revision of Genode's 'Input'
|
|
session interface to accommodate multi-touch input devices. First, existing
|
|
APIs such as multi-touch support in X11, Qt, and Android should be analysed.
|
|
Based on these findings, we expect a proposal for changing Genode's input
|
|
interface. The interface extension should be validated by a example driver
|
|
implementing the interface as well as an example applications.
|
|
|
|
|
|
System services
|
|
###############
|
|
|
|
:Copy-on-write memory manager:
|
|
|
|
Genode's managed dataspaces provide a generalized page-table concept,
|
|
enabling servers to provide on-demand paged memory objects (dataspaces) to
|
|
clients. This concept is showcased by the ISO9660 driver, which provides
|
|
on-demand paged ROM dataspaces to its clients. Depending on the access
|
|
pattern of the client, the ISO9660 server loads the used parts of the ROM
|
|
file from CDROM. Managed dataspaces principally allow for a wide variety of
|
|
interesting applications such as the transparent migration of non-local and
|
|
local memory in a NUMA system, sparse dataspaces, swapping, and copy-on-write
|
|
dataspaces. The goal of this project is a dataspace manager that implements
|
|
copy-on-write semantics combined with a merging technique optimizing the
|
|
memory footprint at runtime. Pages of two managed dataspaces that share the
|
|
same content should be provided via read-only page sharing. If one client
|
|
attempts to change the content of a shared page, a new physical copy of the
|
|
page get created. Vice versa, if the content of different pages converge, the
|
|
sharing should be re-established. This work is a follow-up of the diploma
|
|
thesis of Sebastian Sumpf
|
|
[http://os.inf.tu-dresden.de/papers_ps/sumpf-diplom.pdf - Cloning L4Linux].
|
|
On the course of this project, the managed dataspace concept of Genode
|
|
will be refined, in particular regarding the creation of read-only
|
|
dataspaces from read-write dataspaces.
|
|
|
|
:Using Haskell as systems-development language:
|
|
|
|
The goal of this project is the application of functional programming
|
|
i.e., Haskell, for the implementation of low-level Genode components.
|
|
Implementing critical functionalities in such a high-level language instead
|
|
of a classical systems language such as C or C++ would pave the way towards
|
|
analyzing such components with formal methods.
|
|
|
|
The use of Haskell for systems development was pioneered by the
|
|
[http://programatica.cs.pdx.edu/House/ - House Project]. A more recent
|
|
development is [http://halvm.org - HalVM] - a light-weight OS runtime for
|
|
Xen that is based on Haskell.
|
|
|
|
:Dbus emulation:
|
|
|
|
Dbus is a popular inter-process communication mechanism on Linux, which
|
|
enables user applications to respond to global system events and announce
|
|
state changes to other applications. It is extensively used by modern desktop
|
|
environments. To enable such applications to integrate well with Genode, a
|
|
Dbus emulation solution has to be developed.
|
|
|
|
:Wayland:
|
|
|
|
With the availability of Gallium3D on Genode, the prospect for incorporating
|
|
further projects of the Linux graphics ecosystem into Genode arises.
|
|
[http://wayland.freedesktop.org - Wayland] is a window server especially
|
|
designed to be used with Gallium3D. Its design has many similarities with
|
|
Genode's Nitpicker GUI server, in particular the decision to move window
|
|
handling policies to the client and thereby minimize the complexity of the
|
|
GUI server. Whereas Nitpicker was designed for high security, Wayland is
|
|
targeted to creating GUIs with fluid and tearless animations using
|
|
hardware-accelerated graphics. We believe that because of the many conceptual
|
|
parallels with Nitpicker, Wayland would fit very well into the Genode system.
|
|
However, as a prerequisite for this project, Genode's Gallium3D support must
|
|
be decomposed first. See the challenges regarding our Gallium3D support for
|
|
further information.
|
|
|
|
|
|
Runtime environments
|
|
####################
|
|
|
|
:Android's Dalvik VM natively on Genode:
|
|
|
|
Dalvik is a Java virtual machine that is used for executing applications on
|
|
Android. By running Dalvik directly on Genode, the Linux kernel could be
|
|
removed from the trusted computing base of Android, facilitating the use of
|
|
this mobile OS in high-assurance settings.
|
|
|
|
:Vancouver VMM for Genode on the NOVA hypervisor:
|
|
|
|
Vancouver is the user-level virtual-machine monitor accompanying the NOVA
|
|
hypervisor. It combines a VT-based CPU virtualization with a rich set of
|
|
device models to run unmodified guest operating systems at near-native
|
|
performance. Since NOVA is a supported base platform of Genode, running
|
|
Vancouver in the dynamic Genode environment has become feasible. By running
|
|
Vancouver on Genode instead of NOVA's original static userland would open up
|
|
new use cases where the combination of faithful virtualization with dynamic
|
|
applications is desired.
|
|
|
|
Genode 11.11 introduced the initial integration of Vancouver into Genode.
|
|
This version of Vancouver is able to bootstrap another kernel (e.g.,
|
|
Fiasco.OC) within the virtual machine. However, several pieces are missing
|
|
for reaching the goal of running a fully-fledged Linux OS as guest.
|
|
|
|
:Runtime for the D programming language:
|
|
|
|
The D systems programming language was designed to overcome many gripes that
|
|
exists with C++. In particular, it introduces a sane syntax for meta
|
|
programming, supports unit tests, and contract-based programming. These
|
|
features make D a compelling language to explore when implementing OS
|
|
components. Even though D is a compiled language, it comes with a runtime
|
|
providing support for exception handling and garbage collection. The goal of
|
|
the project is to explore the use of D for Genode programs, porting the
|
|
runtime to Genode, adapting the Genode build system to accommodate D
|
|
programs, and interfacing D programs with other Genode components written in
|
|
C++.
|
|
|
|
|
|
Platforms
|
|
#########
|
|
|
|
:Evaluation of MP scheduling models on different Genode base platforms:
|
|
|
|
Several of Genode's supported base platforms come with multi-processor
|
|
support, i.e., Linux, NOVA, L4ka::Pistachio, Codezero, and Fiasco.OC. Each of
|
|
these kernels follows a different approach for utilizing multiple CPUs. For
|
|
example, Linux and Codezero manage the association of threads with CPUs
|
|
largely transparent for user-level programs. In contrast, NOVA makes the use
|
|
of multiple CPUs explicit and constraints the modes of IPC interaction of
|
|
threads running on different CPUs. Furthermore, kernels differ with regard to
|
|
thread migration and scheduling. The goal of this project is to identify ways
|
|
to support the SMP features of the respective kernels at Genode's API level
|
|
such that SMP can be easily utilized by Genode programs in a largely kernel
|
|
agnostic way.
|
|
|
|
:Microkernelizing Linux:
|
|
|
|
Thanks to Genode's generic interfaces for I/O access as provided by core, all
|
|
Genode device drivers including drivers ported from Linux and gPXE can be
|
|
executed as user-level components on all supported microkernels. However, so
|
|
far, we have not enabled the use of these device drivers on Linux as base
|
|
platform. The goal of this project is the systematic replacement of in-kernel
|
|
Linux device drivers by Genode processes running in user space, effectively
|
|
reducing the Linux kernel to a runtime for Genode's core process. But moving
|
|
drivers to Genode processes is just the beginning. By employing further
|
|
Genode functionality such as its native GUI, lwIP, and Noux, many protocol
|
|
stacks can effectively be removed from the Linux kernel.
|
|
|
|
The goal of this project is to evaluate how small the Linux kernel can get
|
|
when used as a microkernel.
|
|
|
|
:Support for the HelenOS/SPARTAN kernel:
|
|
|
|
[http://www.helenos.org - HelenOS] is a microkernel-based multi-server OS
|
|
developed at the university of Prague. It is based on the SPARTAN microkernel,
|
|
which runs on a wide variety of CPU architectures including Sparc, MIPS, and
|
|
PowerPC. This broad platform support makes SPARTAN an interesting kernel to
|
|
look at alone. But a further motivation is the fact that SPARTAN does not
|
|
follow the classical L4 road, providing a kernel API that comes with an own
|
|
terminology and different kernel primitives. This makes the mapping of
|
|
SPARTAN's kernel API to Genode a challenging endeavour and would provide us
|
|
with feedback regarding the universality of Genode's internal interfaces.
|
|
Finally, this project has the potential to ignite a further collaboration
|
|
between the HelenOS and Genode communities.
|
|
|
|
:Support for the seL4 kernel:
|
|
|
|
The seL4 kernel developed by NICTA and OK-Labs is the first formally verified
|
|
microkernel. It runs on the x86 and ARM architectures and supports the
|
|
execution of a paravirtualized version of Linux on top. Even though seL4 is
|
|
proprietary technology, a free binary release and the specification of the
|
|
kernel API has been published early 2011. Being a capability-based kernel,
|
|
seL4 is in the line of the current-generation L4 kernels alongside NOVA and
|
|
Fiasco.OC. Genode already supports the latter two kernel, which hints at the
|
|
feasibility to support seL4 as well. Currently, the seL4 kernel comes with a
|
|
rather static user land, which is far from utilizing the full potential of
|
|
the kernel with regard to dynamic resource management. By adapting Genode to
|
|
seL4, a rich dynamic application workload would become available to this
|
|
kernel, which could potentially spawn interest in extending the formal
|
|
verification efforts at NICTA to the Genode system executing dynamic
|
|
real-world applications.
|
|
|
|
:Support for the Barrelfish kernel:
|
|
|
|
[http://barrelfish.org - `Barrelfish] is a so-called multi-kernel OS designed
|
|
for heterogeneous multi-processor systems. At its heart, it is a
|
|
microkernel-based multi-server OS. Its kernel provides different mechanisms
|
|
than L4-based kernels. Instead of managing threads in the kernel, there is a
|
|
mechanism for implementing preemptive multi-threading at user level.
|
|
Consequently, inter-process communication does not address threads but
|
|
protection domains. This makes the Barrelfish kernel a very interesting and
|
|
challenging target for running Genode.
|
|
|
|
:Support for the XNU kernel (Darwin):
|
|
|
|
XNU is the kernel used by Darwin and Mac OS X. It is derived from the
|
|
MACH microkernel and extended with a UNIX-like syscall API. Because the
|
|
kernel is used for Mac OS X, it could represent an industry-strength
|
|
base platform for Genode supporting all CPU features as used by Mac OS X.
|
|
|
|
:Xen as kernel for Genode:
|
|
Using Xen as kernel for Genode would clear the way to remove the
|
|
overly complex Linux OS from the trusted computing base of Xen
|
|
guests OSes.
|
|
|
|
Xen is a hypervisor that can host multiple virtual machines on one physical
|
|
machine. For driving physical devices and for virtual-machine management, Xen
|
|
relies on a privileged guest OS called Dom0. Currently, Linux is the
|
|
predominant choice to be used as Dom0, which implicates a trusted computing
|
|
base of millions of lines of code for the other guest OSes.
|
|
|
|
Even though Xen was designed as hypervisor, a thorough analysis done by Julian
|
|
Stecklina concludes that Xen qualifies well as a kernel for Genode. For
|
|
example, Julian implemented a version of Genode's IPC framework that utilizes
|
|
Xen's communication mechanisms (event channels and shared memory).
|
|
|
|
:Linux process containers for supporting Genode`s resource trading:
|
|
|
|
Even though the Linux version of Genode is primarily meant as a development
|
|
platform, there exist interesting opportunities to explore when combining
|
|
Genode with Linux, in particular Linux' process containers.
|
|
Linux process containers provide a mechanism to partition physical resources,
|
|
foremost CPU time, between Linux processes. This raises the interesting
|
|
question of whether this mechanism could be used for a proper implementation
|
|
of Genode's resource trading on Linux.
|
|
[http://lwn.net/Articles/236038/ - Process containers introduction...]
|
|
|
|
|
|
Optimizations
|
|
#############
|
|
|
|
:Low-latency audio streaming:
|
|
|
|
Genode comes with an audio streaming interface called 'Audio_out' session.
|
|
It is based on a shared-memory packet stream accompanied with asynchronous
|
|
data-flow signals. For real-time audio processing involving chains of Genode
|
|
components, streams of audio data must be carried at low latency, imposing
|
|
constraints to buffer sizes and the modes of operation of the audio mixer and
|
|
audio drivers. The goal of this project is to create a holistic design of the
|
|
whole chain of audio processing, taking thread-scheduling into account. A
|
|
particular challenge is the mixed output of real-time (small buffer, low
|
|
latency) and non-real-time (larger buffer to compensate jitter, higher
|
|
latency) audio sources.
|
|
|
|
:De-privileging the VESA graphics driver:
|
|
|
|
The VESA graphics driver executes the graphics initialization code provided
|
|
by the graphics card via an x86 emulator. To initialize a graphics mode, this
|
|
code needs to access device hardware. Currently, we permit access to all
|
|
device registers requested by the graphics-card's code. These devices include
|
|
the system timer, the PCI configuration registers, and the interrupt
|
|
controller, which are critical for the proper operating of the kernel. The
|
|
goal of this work is to restrict the permissions of the VESA driver to a
|
|
minimum by virtualizing all devices but the actual graphics card.
|
|
|