mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-18 13:26:27 +00:00
Release notes for version 24.11
This commit is contained in:
parent
011b44c282
commit
fb7fa915c6
579
doc/release_notes/24-11.txt
Normal file
579
doc/release_notes/24-11.txt
Normal file
@ -0,0 +1,579 @@
|
||||
|
||||
|
||||
===============================================
|
||||
Release notes for the Genode OS Framework 24.11
|
||||
===============================================
|
||||
|
||||
Genode Labs
|
||||
|
||||
|
||||
|
||||
During the discussion of this year's road-map roughly one year ago, the
|
||||
usability concerns of Sculpt OS stood out.
|
||||
Besides suspend/resume, which we addressed
|
||||
[https://genode.org/documentation/release-notes/24.05#Suspend_resume_infrastructure - earlier this year],
|
||||
multi-monitor support ranked highest on the list of desires. We are more than
|
||||
happy to wrap up the year with the realization of this feature.
|
||||
Section [Multi-monitor support] presents the many facets and outcomes of this
|
||||
intensive line of work.
|
||||
|
||||
Over the course of 2024, our Goa SDK has received tremendous advances, which
|
||||
make the development, porting, debugging, and publishing of software for
|
||||
Genode - and Sculpt OS in particular - a breeze.
|
||||
So far however, the learning curve for getting started remained rather steep
|
||||
because the underlying concepts largely deviate from the beaten tracks known
|
||||
from traditional operating systems. Even though there is plenty of
|
||||
documentation, it is rather scattered and overwhelming.
|
||||
All the more happy we are to announce that the current release is accompanied
|
||||
by a new book "Genode Applications" that can be downloaded for free and
|
||||
provides a smooth gateway for application developers into the world of Genode
|
||||
(Section [New "Genode Applications" book]).
|
||||
|
||||
Regarding hardware-related technical topics, the release focuses on the
|
||||
ARM-based i.MX SoC family, taking our ambition to run Sculpt OS on the MNT
|
||||
Pocket Reform laptop as guiding theme. Section [Device drivers and platforms]
|
||||
covers our driver and platform-related work in detail.
|
||||
|
||||
|
||||
New "Genode Applications" book
|
||||
##############################
|
||||
|
||||
Complementary to our _Genode Foundations_ and _Genode Platforms_ books, we have
|
||||
been working on a new book that concentrates on application development.
|
||||
_Genode Applications_ centers on the Goa SDK that we introduced with
|
||||
[https://genode.org/documentation/release-notes/19.11#New_tooling_for_bridging_existing_build_systems_with_Genode - Genode 19.11]
|
||||
and which has seen significant improvements over the past year
|
||||
([https://genode.org/documentation/release-notes/23.08#Goa_tool_gets_usability_improvements_and_depot-index_publishing_support - 23.08],
|
||||
[https://genode.org/documentation/release-notes/24.02#Sculpt_OS_as_remote_test_target_for_the_Goa_SDK - 24.02],
|
||||
[https://genode.org/documentation/release-notes/24.08#Goa_SDK - 24.08]).
|
||||
|
||||
: <div class="visualClear"><!-- --></div>
|
||||
: <p>
|
||||
: <div style="clear: both; float: left; margin-right:20px;">
|
||||
: <a class="internal-link" href="https://genode.org">
|
||||
: <img class="image-inline" src="https://genode.org/documentation/genode-applications-title.png">
|
||||
: </a>
|
||||
: </div>
|
||||
: </p>
|
||||
|
||||
The book intends to provide a beginner-friendly starting point for application
|
||||
development and porting for Genode and Sculpt OS in particular. It starts off
|
||||
with a getting-started tutorial for the Goa tool, and further recapitulates
|
||||
Genode's architecture and a subset of its libraries, components, and
|
||||
conventions such as the C runtime, VFS, NIC router, and package management.
|
||||
With these essentials in place, the book is topped off with instructions for
|
||||
application debugging and a collection of advanced tutorials.
|
||||
|
||||
Aligned with the release of Sculpt 24.10, we updated the Goa tool with the
|
||||
corresponding depot archive versions. Furthermore, the Sculpt-integrated and
|
||||
updated _Goa testbed_ preset is now prepared for remote debugging.
|
||||
|
||||
: <div class="visualClear"><!-- --></div>
|
||||
|
||||
:First revision of the Genode Applications document:
|
||||
|
||||
[https://genode.org/documentation/genode-applications-24-11.pdf]
|
||||
|
||||
|
||||
Multi-monitor support
|
||||
#####################
|
||||
|
||||
Among the users of the Genode-based Sculpt OS, the flexible use of multiple
|
||||
monitors was certainly the most longed-after desire raised during our public
|
||||
road-map discussion roughly one year ago. We quickly identified that a
|
||||
profound solution cannot focus on piecemeal extensions of individual
|
||||
components but must embrace an architectural step forward. The step turned
|
||||
out being quite a leap.
|
||||
In fact, besides reconsidering the roles of display and input drivers in
|
||||
[https://genode.org/documentation/release-notes/20.08#The_GUI_stack__restacked - version 20.08],
|
||||
the GUI stack has remained largely unchanged since
|
||||
[https://genode.org/documentation/release-notes/14.08#New_GUI_architecture - version 14.08].
|
||||
So we took our multi-monitor ambitions as welcome opportunity to incorporate
|
||||
our experiences of the past ten years into a new design for the next ten
|
||||
years.
|
||||
|
||||
|
||||
Tickless GUI server and display drivers
|
||||
=======================================
|
||||
|
||||
Up to now, the nitpicker GUI server as well as the display drivers used to
|
||||
operate in a strictly periodic fashion. At a rate of 10 milliseconds, the GUI
|
||||
server would route input events to the designated GUI clients and flush
|
||||
graphical changes of the GUI clients to the display driver.
|
||||
This simple mode of execution has benefits such as the natural ability of
|
||||
batching input events and the robustness of the GUI server against overload
|
||||
situations. However, in Sculpt OS, we observed that the fixed rate induces
|
||||
little but constant load into an otherwise idle system, rendering
|
||||
energy-saving regimes of modern CPUs less effective than they could be.
|
||||
This problem would become amplified in the presence of multiple output channels
|
||||
operating at independent frame rates. Moreover, with panel self-refresh
|
||||
support of recent Intel graphics devices, the notion of a fixed continuous
|
||||
frame rate has become antiquated.
|
||||
|
||||
Hence, it was time to move to a tickless GUI-server design where the GUI
|
||||
server acts as a mere broker between events triggered by applications (e.g.,
|
||||
pushing pixels) and drivers (e.g., occurrence of input, scanout to a display).
|
||||
Depending on the behavior of its clients (GUI applications and drivers alike),
|
||||
the GUI server notifies the affected parties about events of interest but
|
||||
does not assert an active role.
|
||||
|
||||
For example, if a display driver does not observe any changed pixels for 50
|
||||
ms, it goes to sleep. Once an application updates pixels affecting a display,
|
||||
the GUI server wakes up the respective display driver, which then polls the
|
||||
pixels at a driver-defined frame rate until observing when the pixels remain
|
||||
static for 50 ms. Vice versa, the point in time when a display driver requests
|
||||
updated pixels is reflected as a sync event to GUI applications visible on
|
||||
that display, enabling such applications to synchronize their output to the
|
||||
frame rate of the driver. The GUI server thereby asserts the role of steering
|
||||
the sleep cycles of drivers and applications. Unless anything happens on
|
||||
screen, neither the GUI server nor the display driver are active. When two
|
||||
applications are visible on distinct monitors, the change of one application
|
||||
does not induce any activity regarding the unrelated display. This allows for
|
||||
scaling up the number of monitors without increasing the idle CPU load.
|
||||
|
||||
This change implies that the former practice of using sync signals as a
|
||||
time source for application-side animation timing is no longer viable.
|
||||
Sync signals occur only when a driver is active after all. GUI applications
|
||||
may best use sync signals for redraw scheduling but need to use a real time
|
||||
source as basis for calculating the progress of animations.
|
||||
|
||||
|
||||
Paving the ground for tearing-free motion
|
||||
=========================================
|
||||
|
||||
Tearing artifacts during animations are rightfully frowned upon. It goes
|
||||
without saying that we strive to attain tearing-free motion in Genode. Two
|
||||
preconditions must be met. First, the GUI server must be able to get hold
|
||||
of a _consistent_ picture at any time. Second, the flushing of the picture
|
||||
to the display hardware must be timed with _vsync_ of the physical display.
|
||||
|
||||
Up to now, the GUI stack was unable to meet the first precondition by design.
|
||||
If the picture is composed of multiple clients, the visual representation of
|
||||
each client must be present in a consistent state.
|
||||
The textures used as input of the compositing of the final picture are buffers
|
||||
shared between server and client. Even though clients traditionally employ
|
||||
double-buffering to hide intermediate drawing states, the final back-to-front
|
||||
copy into the shared buffer violated the consistency of the buffer during
|
||||
the client-side copy operation - when looking at the buffer from the server
|
||||
side. To overcome this deficiency, we have now equipped the GUI server with
|
||||
atomic blitting and panning operations, which support atomic updates in two
|
||||
fashions.
|
||||
|
||||
_Atomic back-to-front blitting_ allows GUI clients that partially update their
|
||||
user interface - like regular application dialogs - to implement double
|
||||
buffering by placing both the back buffer and front buffer within the GUI
|
||||
session's shared buffer and configuring a view that shows only the front
|
||||
buffer. The new blit operation ('Framebuffer::Session::blit') allows the client
|
||||
to atomically flush pixels from the back buffer to the front buffer.
|
||||
|
||||
_Atomic buffer flipping_ allows GUI clients that always update all pixels -
|
||||
like a media player or a game - to leverage panning
|
||||
('Framebuffer::Session::panning') to atomically redirect the displayed pixels to
|
||||
a different portion of the GUI session's shared buffer without any copy
|
||||
operation needed. The buffer contains two frames, the displayed one and the
|
||||
next one. Once the next frame is complete, the client changes the panning
|
||||
position to the portion containing the next frame.
|
||||
|
||||
Almost all GUI clients of the Genode OS framework have been updated to use
|
||||
these new facilities.
|
||||
|
||||
The vsync timing as the second precondition for tearing-free motion lies in
|
||||
the hands of the display driver, which can in principle capture pixel updates
|
||||
from the GUI server driven by vsync interrupts. In the presence of multiple
|
||||
monitors with different vsync rates, a GUI client may deliberately select
|
||||
a synchronization source ('Framebuffer::Session::sync_source'). That said,
|
||||
even though the interfaces are in place, vsync timing is not yet provided by
|
||||
the current display drivers.
|
||||
|
||||
|
||||
Mirrored and panoramic monitor setups
|
||||
=====================================
|
||||
|
||||
A display driver interacts with the nitpicker GUI server as a capture client.
|
||||
One can think of a display driver as a screen-capturing application.
|
||||
Up until now, the nitpicker GUI server handed out the same picture to each
|
||||
capture client. So each client obtained a mirror of the same picture. By
|
||||
subjecting each client to a policy defining a window within a larger panorama,
|
||||
a driver creating one capture session per monitor becomes able to display the
|
||||
larger panorama spanning the connected displays. The assignment of capture
|
||||
clients to different parts of the panorama follows Genode's established
|
||||
label-based policy-selection approach as explained in the
|
||||
[https://github.com/genodelabs/genode/blob/master/repos/os/src/server/nitpicker/README - documentation]
|
||||
of the nitpicker GUI server.
|
||||
|
||||
Special care has been taken to ensure that the pointer is always visible. It
|
||||
cannot be moved to any area that is not captured. Should the only capture
|
||||
client displaying the pointer disappear, the pointer is warped to the center
|
||||
of (any) remaining capture client.
|
||||
|
||||
A mirrored monitor setup can in principle be attained by placing multiple
|
||||
capture clients at the same part of nitpicker's panorama. However, there is
|
||||
a better way: Our Intel display-driver component supports both discrete and
|
||||
merged output channels. The driver's configuration subsumes all connectors
|
||||
listed within a '<merge>' node as a single encompassing capture session at the
|
||||
GUI server. The mirroring of the picture is done by the hardware. Each
|
||||
connector declared outside the '<merge>' node is handled as a discrete capture
|
||||
session labeled after the corresponding connector. The driver's
|
||||
[https://github.com/genodelabs/genode/blob/master/repos/pc/src/driver/framebuffer/intel/pc/README - documentation]
|
||||
describes the configuration in detail.
|
||||
|
||||
|
||||
Sculpt OS integration
|
||||
=====================
|
||||
|
||||
All the changes described above are featured in the recently released
|
||||
Sculpt OS version 24.10, which gives the user the ability to attain mirrored
|
||||
or panoramic monitor setups or a combination thereof by the means of manual
|
||||
configuration or by using interactive controls.
|
||||
|
||||
[image sculpt_24_10_intel_fb]
|
||||
|
||||
You can find the multi-monitor use of Sculpt OS covered by the
|
||||
[https://genode.org/documentation/articles/sculpt-24-10#Multi-monitor_support - documentation].
|
||||
|
||||
|
||||
Revised inter-component interfaces
|
||||
==================================
|
||||
|
||||
Strict resource partitioning between GUI clients
|
||||
------------------------------------------------
|
||||
|
||||
Even though Genode gives server components the opportunity to strictly operate
|
||||
on client-provided resources only, the two prominent GUI servers - nitpicker
|
||||
and the window manager (wm) - did not leverage these mechanisms to full
|
||||
extent. In particular the wm eschewed strict resource accounting by paying out
|
||||
of its own pocket. This deficiency has been rectified by the current release,
|
||||
thereby making the GUI stack much more robust against potential resource
|
||||
denial-of-service issues. Both the nitpicker GUI server and the window manager
|
||||
now account all allocations to the resource budgets of the respective clients.
|
||||
This change has the effect that GUI clients must now be equipped with the
|
||||
actual cap and RAM quotas needed.
|
||||
|
||||
Note that not all central parts of the GUI stack operate on client-provided
|
||||
resources. In particular, a window decorator is a mere client of the window
|
||||
manager despite playing a role transcending multiple applications. As the
|
||||
costs needed for the decorations depend on the number of applications present
|
||||
on screen, the resources of the decorator must be dimensioned with a sensible
|
||||
upper bound. Fortunately, however, as the decorator is a plain client of the
|
||||
window manager, it can be restarted, replaced, and upgraded without affecting
|
||||
any application.
|
||||
|
||||
|
||||
Structured mode information for applications
|
||||
--------------------------------------------
|
||||
|
||||
Up to now, GUI clients were able to request mode information via a plain
|
||||
RPC call that returned the dimensions and color depth of the display.
|
||||
Multi-monitor setups call for more flexibility, which prompted us to
|
||||
replace the mode information by XML-structured information delivered as
|
||||
an 'info' dataspace. This is in line with how meta information is handled
|
||||
in other modern session interfaces like the platform or USB sessions.
|
||||
The new representation gives us room to annotate information that could
|
||||
previously not be exposed to GUI clients, in particular:
|
||||
|
||||
* The total panorama dimensions.
|
||||
* Captured areas within the panorama, which can be used by multi-monitor
|
||||
aware GUI clients as intelligence for placing GUI views.
|
||||
* DPI information carried by 'width_mm' and 'height_mm' attributes.
|
||||
This information is defined by the display driver and passed to the GUI
|
||||
server as 'Capture::Connection::buffer' argument.
|
||||
* The closed state of a window interactively closed by the user.
|
||||
|
||||
Note that the window manager (wm) virtualizes the information of the nitpicker
|
||||
GUI server. Instead of exposing nitpicker's panorama to its clients, the wm
|
||||
reports the logical screen hosting the client's window as panorama and the
|
||||
window size as a single captured rectangle within the panorama.
|
||||
|
||||
|
||||
Mouse grabbing
|
||||
--------------
|
||||
|
||||
Since the inception of the nitpicker GUI server, its clients observed absolute
|
||||
pointer positions only. The GUI server unconditionally translated relative
|
||||
mouse-motion events to absolute motion events.
|
||||
To accommodate applications like games or a VM emulating a relative pointer
|
||||
device, we have now extended the GUI server(s) with the ability to selectively
|
||||
expose relative motion events while locking the absolute pointer position.
|
||||
This is usually called pointer grabbing. It goes without saying that the user
|
||||
must always retain a way to forcefully reassert control over the pointer
|
||||
without the cooperation of the application.
|
||||
|
||||
The solution is the enhancement of the 'Input::Session' interface by a new RPC
|
||||
function that allows a client to request exclusive input. The nitpicker GUI
|
||||
server grants this request if the application owns the focus. In scenarios
|
||||
using the window manager (wm), the focus is always defined by the wm, which
|
||||
happens to intercept all input sessions of GUI applications. Hence, the wm is
|
||||
in the natural position of arbitrating the grabbing/ungrabbing of the pointer.
|
||||
For each GUI client, the wm records whether the client is interested in
|
||||
exclusive input but does not forward this request to nitpicker. Only if a GUI
|
||||
client receives the focus and has requested exclusive input, the wm enables
|
||||
exclusive input for this client at nitpicker when observing a mouse click on
|
||||
the application window. Whenever the user presses the global wm key (super),
|
||||
the wm forcefully releases the exclusive input at nitpicker until the user
|
||||
clicks into the client window the next time.
|
||||
|
||||
Furthermore, an application may enable exclusive input transiently during a
|
||||
key sequence, e.g., when dragging the mouse while holding the mouse button.
|
||||
Transient exclusive input is revoked as soon as the last button/key is
|
||||
released. It thereby would in principle allow for GUI controls like knobs to
|
||||
lock the pointer position while the user adjusts the value by moving the mouse
|
||||
while the mouse button is held. So the pointer retains its original position
|
||||
at the knob.
|
||||
|
||||
While operating in exclusive input mode, there is no useful notion of an
|
||||
absolute pointer position at the nitpicker GUI server. Hence, nitpicker hides
|
||||
GUI domains that use the pointer position as coordinate origin. Thereby, the
|
||||
mouse cursor automatically disappears while the pointer is grabbed.
|
||||
|
||||
|
||||
Current state and ongoing work
|
||||
==============================
|
||||
|
||||
All the advances described above are in full effect in the recently released
|
||||
version 24.10 of [https://genode.org/download/sculpt - Sculpt OS]. All
|
||||
components hosted in Genode's main and world repositories have been updated
|
||||
accordingly, including Genode-specific components like the widget toolkit
|
||||
used by the administrative user interface of Sculpt OS, window decorators,
|
||||
over Qt5 and Qt6, to SDL and SDL2.
|
||||
|
||||
[image multiple_monitors]
|
||||
|
||||
Current work is underway to implement multi-monitor window management and to
|
||||
make multiple monitors seamlessly available to guest OSes hosted in VirtualBox.
|
||||
Furthermore, the Intel display driver is currently getting equipped with the
|
||||
ability to use vsync interrupts for driving the interaction with the GUI
|
||||
server, taking the final step to attain tearing-free motion.
|
||||
|
||||
|
||||
Device drivers and platforms
|
||||
############################
|
||||
|
||||
Linux device-driver environment (DDE)
|
||||
=====================================
|
||||
|
||||
With our
|
||||
[https://genode.org/documentation/release-notes/24.08#Linux_device-driver_environment__DDE_ - recent]
|
||||
update of the DDE Linux kernel to version 6.6 for PC platforms and as a
|
||||
prerequisite to support the MNT Pocket Reform, we have adapted all drivers for
|
||||
the i.MX5/6/7/8 platforms to Linux kernel version 6.6.47. The list of drivers
|
||||
includes Wifi, NIC, display, GPU, USB and SD-card.
|
||||
|
||||
|
||||
MNT Pocket Reform
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
The [https://shop.mntre.com/products/mnt-pocket-reform - MNT Pocket Reform] is
|
||||
a Mini Laptop by MNT aiming to be modular, upgradable, and repairable while
|
||||
being assembled completely using open-source hardware. Being modular implies
|
||||
that a range of CPU modules is available for the MNT Pocket. Some of these
|
||||
chips, like the Rockchip based modules, are not officially supported by
|
||||
Genode, yet. But there is a choice of an i.MX8MP based module available which
|
||||
fits nicely into Genode's i.MX infrastructure.
|
||||
|
||||
Genode already supports the MNT Reform 2 i.MX8MQ based
|
||||
[https://genodians.org/skalk/2020-06-29-mnt-reform - laptop]. So an update from
|
||||
MQ to MP doesn't sound like a big issue because only one letter changed,
|
||||
right? It turns out that there are more changes to the platform than mere
|
||||
adjustments of I/O resources and interrupt numbers. Additionally, the MNT
|
||||
Reform team offers quite a large patch set for each supported Linux kernel
|
||||
version. Luckily there is
|
||||
[https://source.mnt.re/reform/reform-debian-packages/-/tree/main/linux/patches6.6?ref_type=heads - one]
|
||||
for our just updated Linux 6.6 kernel. With this patch set, we were able to
|
||||
produce a Linux source tree (imx_linux) that we now take as basis for driver
|
||||
development on Genode. Note that these Linux kernel sources are shared by all
|
||||
supported i.MX platforms. Of course, additional patch series were necessary to
|
||||
include device-tree sources from other vendor kernels, for instance from
|
||||
Compulab.
|
||||
|
||||
With the development environment in place and after putting lots of effort in,
|
||||
we ultimately achieved initial Genode support for the MNT Pocket Reform with
|
||||
Genode 24.11.
|
||||
|
||||
On the device-driver side of things, we did not have to port lots of new
|
||||
drivers but were able to extend drivers already available for the i.MX8MQ
|
||||
platform. In particular these drivers are for the wired network card, USB host
|
||||
controller, display, and SD card.
|
||||
|
||||
For the wireless network device that is found on the i.MX8MP SoM in the MNT
|
||||
Pocket Reform, we needed to port a new driver. It has a Qualcomm QCA9377
|
||||
chipset and is attached via SDIO. Unfortunately the available _ath10k_ driver
|
||||
in the vanilla kernel does not work properly with such a device and therefore
|
||||
is also not used in the regular Linux kernel for the MNT Pocket Reform. A
|
||||
slightly adapted external QCACLD2 reference driver is used instead. So we
|
||||
followed suit by incorporating this particular driver in our _imx_linux_
|
||||
source tree as well.
|
||||
|
||||
[image sculpt_mnt_pocket]
|
||||
Sculpt OS running on the MNT Pocket Reform
|
||||
|
||||
Being the initial enablement, there are still some limitations.
|
||||
For example, the display of the MNT Pocket is physically
|
||||
[https://mntre.com/documentation/pocket-reform-handbook.pdf - rotated] by 90
|
||||
degrees. So, we had to find a way to accommodate for that. Unfortunately,
|
||||
there seems to be no hardware support other than using the GPU to perform
|
||||
a fast rotation. With GPU support still missing on this system, we had to
|
||||
resort to perform the rotation in software on the CPU, which is obviously
|
||||
far from optimal.
|
||||
Those early inefficiencies notwithstanding, Sculpt OS has become able to run
|
||||
on the MNT Pocket Reform. We will provide a preview image that exercises the
|
||||
available features soon.
|
||||
|
||||
|
||||
Platform driver for i.MX 8M Plus
|
||||
================================
|
||||
|
||||
While enabling support for the MNT Pocket Reform (Section [MNT Pocket Reform]),
|
||||
it was necessary to adjust the i.MX8MP specific platform driver, which was
|
||||
originally introduced in the previous
|
||||
[https://genode.org/documentation/release-notes/24.08#Improvements_for_NXP_s_i.MX_family - release 24.08]
|
||||
to drive the Compulab i.MX 8M Plus IOT Gateway.
|
||||
|
||||
Some of the I/O pin configurations necessary to set up the SoC properly are
|
||||
statically compiled into this driver because they do not change at runtime.
|
||||
However, the pin configuration is specific to the actual board. Therefore, the
|
||||
i.MX8MP platform driver now needs to distinguish between different boards (IOT
|
||||
Gateway and MNT Pocket) by evaluating the 'platform_info' ROM provided by
|
||||
core.
|
||||
|
||||
Moreover, while working on different drivers, we detected a few missing clocks
|
||||
that were added to the platform driver. It turned out that some clocks that we
|
||||
initially turned off to save energy, have to be enabled to ensure the
|
||||
liveliness of the ARM Trusted Firmware (ATF) and thereby the platform. Also,
|
||||
we had to adapt the communication in between ATF and our platform driver to
|
||||
control power-domains. The first version of the i.MX8MP platform driver shared
|
||||
the ATF power-domains protocol with the i.MX8MQ version. However, the
|
||||
power-domain enumerations of the different firmwares varies also and we
|
||||
adapted that.
|
||||
|
||||
Finally, the watchdog hardware is now served by the platform driver in a
|
||||
recurrent way. Originally our driver used the watchdog only to implement reset
|
||||
functionality. But in case of the MNT Pocket Reform, the watchdog hardware is
|
||||
already armed by the bootloader. Therefore, it needs to get served in time, to
|
||||
prevent the system from rebooting. As a consequence, the platform driver is
|
||||
mandatory on this platform if it needs to run longer than a minute.
|
||||
|
||||
|
||||
Wifi management rework
|
||||
======================
|
||||
|
||||
Our management interface in the wifi driver served us well over the years
|
||||
and concealed the underlying complexity of the wireless stack. At the same
|
||||
time it gained some complexity itself to satisfy a variety of use-cases.
|
||||
Thus, we took the past release cycle as opportunity to rework the management
|
||||
layer to reduce its complexity by streamlining the interaction between
|
||||
various parts, like the manager layer itself, 'wpa_supplicant' as well as
|
||||
the device driver in order to provide a sound foundation for future
|
||||
adaptions.
|
||||
Included is also an update of the 'wpa_supplicant' to version 2.11.
|
||||
|
||||
The following segments detail the changes made to the configuration options as
|
||||
they were altered quite a bit to no longer mix different tasks (e.g. joining a
|
||||
network and scanning for hidden networks) while removing obsolete options.
|
||||
|
||||
At the top-level '<wifi_config>' node, the following alterations were made:
|
||||
|
||||
* The 'log_level' attribute was added and configures the supplicant's
|
||||
verbosity. Valid values correspond to levels used by the supplicant
|
||||
and are as follows: 'excessive', 'msgdump', 'debug', 'info', 'warning',
|
||||
and 'error'. The default value is 'error' and configures the least
|
||||
amount of verbosity. This option was introduced to ease the investigation
|
||||
of connectivity issues.
|
||||
|
||||
* The 'bgscan' attribute may be used to configure the way the
|
||||
supplicant performs background-scanning to steer or rather optimize
|
||||
roaming decision within the same network. The default value is set
|
||||
to 'simple:30:-70:600'. The attribute is forwarded unmodified to the WPA
|
||||
supplicant and thus provides the syntax supported by the supplicant
|
||||
implementation. It can be disabled by specifying an empty value, e.g.
|
||||
'bgscan=""'.
|
||||
|
||||
* The 'connected_scan_interval' attribute was removed as this functionality
|
||||
is now covered by background scanning.
|
||||
|
||||
* The 'verbose_state' attribute was removed altogether and similar
|
||||
functionality is now covered by the 'verbose' attribute.
|
||||
|
||||
The network management received the following changes:
|
||||
|
||||
* Every configured network, denoted by a '<network>' node, is now implicitly
|
||||
considered an option for joining. The 'auto_connect' attribute was
|
||||
removed and a '<network>' node must be renamed or removed to deactivate
|
||||
automatic connection establishment.
|
||||
|
||||
* The intent to scan for a hidden network is now managed by the newly
|
||||
introduced '<explicit_scan>' node that like the '<network>' node has
|
||||
an 'ssid' attribute. If the specified SSID is valid, it is incorporated
|
||||
into the scan request to actively probe for this network. As the node
|
||||
requests explicit scanning only, a corresponding '<network>' node is
|
||||
required to actually connect to the hidden network.
|
||||
The 'explicit_scan' attribute of the '<network>' node has been removed.
|
||||
|
||||
The following exemplary configuration shows how to configure the driver
|
||||
for attempting to join two different networks where one of them is hidden.
|
||||
The initial scan interval is set 10 seconds and the signal quality will be
|
||||
updated every 30 seconds while connected to a network.
|
||||
|
||||
!<wifi_config scan_interval="10" update_quality_interval="30">
|
||||
! <explicit_scan ssid="Skynet"/>
|
||||
! <network ssid="Zero" protection="WPA2" passphrase="allyourbase"/>
|
||||
! <network ssid="Skynet" protection="WPA3" passphrase="illbeback"/>
|
||||
!</wifi_config>
|
||||
|
||||
For more information please consult the driver's
|
||||
[https://github.com/genodelabs/genode/blob/master/repos/dde_linux/src/driver/wifi/README - documentation]
|
||||
that now features a best-practices section explaining how the driver should be
|
||||
operated at best, and highlights the difference between a managed (as used in
|
||||
Sculpt OS) and a user-generated configuration.
|
||||
|
||||
|
||||
Audio driver updated to OpenBSD 7.6
|
||||
===================================
|
||||
|
||||
With this release, we updated our OpenBSD-based audio driver to a more recent
|
||||
revision that correlates to version 7.6. It supports newer devices, e.g. Alder
|
||||
Lake-N, and includes a fix for using message-signaled interrupts (MSI) with
|
||||
HDA devices as found in AMD-based systems.
|
||||
|
||||
|
||||
AVX and hardware-based AES in virtual machines
|
||||
==============================================
|
||||
|
||||
The current release adds support for requesting and transferring the AVX FPU
|
||||
state via Genode's VM-session interface. With this prerequisite fulfilled, we
|
||||
enabled the announcement of the AVX feature to guest VMs in our port of
|
||||
VirtualBox6.
|
||||
|
||||
Additionally, we enabled the announcement of AES and RDRAND CPU features to
|
||||
guest VMs to further improve the utilization of the hardware.
|
||||
|
||||
|
||||
Build system and tools
|
||||
######################
|
||||
|
||||
Extended depot-tool safeguards
|
||||
------------------------------
|
||||
|
||||
When using the run tool's '--depot-auto-update' feature while switching
|
||||
between different git topic branches with committed recipe hashes, a binary
|
||||
archive present in the depot may accidentally not match its ingredients
|
||||
because the depot/build tool's 'REBUILD=' mode - as used by the depot
|
||||
auto-update mechanism - merely looks at the archive versions. This situation
|
||||
is arguably rare. But when it occurs, its reach and effects are hard to
|
||||
predict. To rule out this corner case early, the depot/build tool has now been
|
||||
extended by recording the hashes of the ingredients of binary archives. When
|
||||
skipping a rebuild because the desired version presumably already exists as a
|
||||
binary archive, the recorded hashes are compared to the current state of the
|
||||
ingredients (src and api archives). Thereby inconsistencies are promptly
|
||||
reported to the user.
|
||||
|
||||
Users of the depot tool will notice .hash files appearing alongside src and
|
||||
api archives. Those files contain the hash value of the content of the
|
||||
respective archive. Each binary archive built is now also accompanied by a
|
||||
.hash file, which contains a list of hash values of the ingredients that went
|
||||
into the binary archive. Thanks to these .hash files, the consistency between
|
||||
binaries and their ingredients can be checked quickly.
|
||||
|
||||
_As a note of caution, when switching to the Genode 24.11 with existing depot,_
|
||||
_one will possibly need to remove existing depot archives (as listed by the_
|
||||
_diagnostic messages) because the existing archives are not accompanied by
|
||||
_.hash files yet._
|
Loading…
Reference in New Issue
Block a user