fix: comprehensive boot warnings and exceptions — fixable silenced, unfixable diagnosed

Build system (5 gaps hardened):
- COOKBOOK_OFFLINE defaults to true (fork-mode)
- normalize_patch handles diff -ruN format
- New 'repo validate-patches' command (25/25 relibc patches)
- 14 patched Qt/Wayland/display recipes added to protected list
- relibc archive regenerated with current patch chain

Boot fixes (fixable):
- Full ISO EFI partition: 16 MiB → 1 MiB (matches mini, BIOS hardcoded 2 MiB offset)
- D-Bus system bus: absolute /usr/bin/dbus-daemon path (was skipped)
- redbear-sessiond: absolute /usr/bin/redbear-sessiond path (was skipped)
- daemon framework: silenced spurious INIT_NOTIFY warnings for oneshot_async services (P0-daemon-silence-init-notify.patch)
- udev-shim: demoted INIT_NOTIFY warning to INFO (expected for oneshot_async)
- relibc: comprehensive named semaphores (sem_open/close/unlink) replacing upstream todo!() stubs
- greeterd: Wayland socket timeout 15s → 30s (compositor DRM wait)
- greeter-ui: built and linked (header guard unification, sem_compat stubs removed)
- mc: un-ignored in both configs, fixed glib/libiconv/pcre2 transitive deps
- greeter config: removed stale keymapd dependency from display/greeter services
- prefix toolchain: relibc headers synced, _RELIBC_STDLIB_H guard unified

Unfixable (diagnosed, upstream):
- i2c-hidd: abort on no-I2C-hardware (QEMU) — process::exit → relibc abort
- kded6/greeter-ui: page fault 0x8 — Qt library null deref
- Thread panics fd != -1 — Rust std library on Redox
- DHCP timeout / eth0 MAC — QEMU user-mode networking
- hwrngd/thermald — no hardware RNG/thermal in VM
- live preload allocation — BIOS memory fragmentation, continues on demand
This commit is contained in:
2026-05-05 20:20:37 +01:00
parent a5f97b6632
commit f31522130f
81834 changed files with 11051982 additions and 108 deletions
@@ -0,0 +1,48 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(overview-compositor LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
if(NOT DEFINED INSTALL_EXAMPLESDIR)
set(INSTALL_EXAMPLESDIR "examples")
endif()
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/wayland/overview-compositor")
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml)
qt_add_executable(overview-compositor
main.cpp
)
set_target_properties(overview-compositor PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
target_link_libraries(overview-compositor PUBLIC
Qt::Core
Qt::Gui
Qt::Qml
)
# Resources:
set(overview-compositor_resource_files
"main.qml"
)
qt6_add_resources(overview-compositor "overview-compositor"
PREFIX
"/"
FILES
${overview-compositor_resource_files}
)
install(TARGETS overview-compositor
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
)
Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

@@ -0,0 +1,65 @@
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
* \title Overview Compositor
* \example overview-compositor
* \examplecategory {Embedded}
* \brief Overview Compositor shows how to switch between clients in a grid.
*
* \section1 Introduction
*
* Overview Compositor demonstrates selecting and activating an application
* from a grid of currently connected clients.
*
* \image overview-compositor.jpg
*
* For an introduction to the basic principles of creating a \l{Qt Wayland Compositor} with Qt,
* see the \l{Minimal QML}{Minimal QML example}.
*
* \section1 Application Grid
*
* In this example, the compositor supports two different modes of operation:
*
* \list
* \li A \e fullscreen mode, where a single application window occupies the whole compositor
* window and is interactable.
* \li An \e overview mode, where all application windows are visible in a grid. Clicking on a
* window in the grid causes it to be selected. The compositor enters fullscreen mode,
* showing the selected application window.
* \endlist
*
* When a client connects to the compositor and creates a top-level surface, the surface will be
* connected to a \l{Shell Extensions - Qt Wayland Compositor}{shell extension}. The example only
* supports the \l{XdgShell} extension, so the client will connect to this.
*
* \snippet overview-compositor/main.qml XdgShell
*
* For each surface, we tell the client to configure it as fullscreen. In addition, the surfaces
* are added to a \l ListModel for easy access.
*
* This model is used by a \l Repeater to create \l{ShellSurfaceItem}{ShellSurfaceItems} inside
* a \l{Grid}. The \l Grid component positions the items in a grid.
*
* \snippet overview-compositor/main.qml toplevels repeater
*
* For each of the items, we create a \l MouseArea which covers the item and intercepts all mouse
* and touch input. This is only active when the compositor is in \e{overview} mode, and activates
* the application that was clicked.
*
* When the compositor goes into fullscreen mode, the same \l Grid component is used, but is scaled
* and translated into a position where the single selected cell fills the compositor's window. The
* idea is to "zoom in" on the selected cell, allowing the user to interact with the application it
* contains.
*
* \snippet overview-compositor/main.qml zoom transform
*
* At the bottom side of the window, there is a button which toggles between the modes. This can
* be used to bring back the application grid while the compositor is in fullscreen mode.
*
* This example shows one way to have the compositor visualize clients in different modes. Another
* way to achieve similar effects is to create multiple Qt Quick items that refer to the same
* surface. See \l{Multi Output}{the Multi Output example} for a demonstration.
*
* \ingroup qtwaylandcompositor-examples
*/
@@ -0,0 +1,18 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include <QtCore/QUrl>
#include <QtCore/QDebug>
#include <QtGui/QGuiApplication>
#include <QtQml/QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine appEngine(QUrl("qrc:///main.qml"));
return app.exec();
}
@@ -0,0 +1,99 @@
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtWayland.Compositor
import QtWayland.Compositor.XdgShell
import QtQuick.Window
import QtQuick.Controls
WaylandCompositor {
WaylandOutput {
sizeFollowsWindow: true
window: Window {
id: win
property int pixelWidth: width * screen.devicePixelRatio
property int pixelHeight: height * screen.devicePixelRatio
visible: true
width: 1280
height: 720
Grid {
id: grid
property bool overview: true
property int selected: 0
property int selectedColumn: selected % columns
property int selectedRow: selected / columns
anchors.fill: parent
columns: Math.ceil(Math.sqrt(toplevels.count))
// ![zoom transform]
transform: [
Scale {
xScale: grid.overview ? (1.0/grid.columns) : 1
yScale: grid.overview ? (1.0/grid.columns) : 1
Behavior on xScale { PropertyAnimation { easing.type: Easing.InOutQuad; duration: 200 } }
Behavior on yScale { PropertyAnimation { easing.type: Easing.InOutQuad; duration: 200 } }
},
Translate {
x: grid.overview ? 0 : win.width * -grid.selectedColumn
y: grid.overview ? 0 : win.height * -grid.selectedRow
Behavior on x { PropertyAnimation { easing.type: Easing.InOutQuad; duration: 200 } }
Behavior on y { PropertyAnimation { easing.type: Easing.InOutQuad; duration: 200 } }
}
]
// ![zoom transform]
// ![toplevels repeater]
Repeater {
model: toplevels
Item {
width: win.width
height: win.height
ShellSurfaceItem {
anchors.fill: parent
shellSurface: xdgSurface
onSurfaceDestroyed: toplevels.remove(index)
}
MouseArea {
enabled: grid.overview
anchors.fill: parent
onClicked: {
grid.selected = index;
grid.overview = false;
}
}
}
}
// ![toplevels repeater]
}
Button {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
text: "Toggle overview";
onClicked: grid.overview = !grid.overview
}
Shortcut { sequence: "space"; onActivated: grid.overview = !grid.overview }
Shortcut { sequence: "right"; onActivated: grid.selected = Math.min(grid.selected+1, toplevels.count-1) }
Shortcut { sequence: "left"; onActivated: grid.selected = Math.max(grid.selected-1, 0) }
Shortcut { sequence: "up"; onActivated: grid.selected = Math.max(grid.selected-grid.columns, 0) }
Shortcut { sequence: "down"; onActivated: grid.selected = Math.min(grid.selected+grid.columns, toplevels.count-1) }
}
}
ListModel { id: toplevels }
// ![XdgShell]
XdgShell {
onToplevelCreated: (toplevel, xdgSurface) => {
toplevels.append({xdgSurface});
toplevel.sendFullscreen(Qt.size(win.pixelWidth, win.pixelHeight));
}
}
// ![XdgShell]
}
@@ -0,0 +1,14 @@
QT += gui qml
SOURCES += \
main.cpp
OTHER_FILES = \
main.qml
RESOURCES += overview-compositor.qrc
target.path = $$[QT_INSTALL_EXAMPLES]/wayland/overview-compositor
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS overview-compositor.pro
sources.path = $$[QT_INSTALL_EXAMPLES]/wayland/overview-compositor
INSTALLS += target sources
@@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
</RCC>