Add CUB implementation plan spec and update project documentation
New docs/_CUB_RBPKGBUILD_IMPL_PLAN.md with full CUB package builder specification covering RBPKGBUILD format, CLI commands, build flow, BUR repository, and AUR conversion. Updated AGENTS.md with pkgutils extensions and CUB integration details. Updated AMD GPU integration docs with current P2 progress. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# RED BEAR OS BUILD SYSTEM — PROJECT KNOWLEDGE BASE
|
||||
|
||||
**Generated:** 2026-04-11 (AMD-first reassessment)
|
||||
**Generated:** 2026-04-12 (P1/P2 complete)
|
||||
**Toolchain:** Rust nightly-2025-10-03 (edition 2024)
|
||||
**Architecture:** Microkernel OS in Rust, ~38k files, ~294k LoC Rust
|
||||
**Target Hardware**: AMD64 bare metal, AMD GPU (RDNA2/RDNA3), then Intel
|
||||
@@ -62,6 +62,7 @@ redox-master/
|
||||
| Cross-toolchain setup | `mk/prefix.mk`, `prefix/x86_64-unknown-redox/` | Downloads Clang/LLVM toolchain |
|
||||
| Display server | Orbital: `recipes/gui/orbital/` | Userspace scheme-based display server |
|
||||
| GPU/graphics stack | `recipes/libs/mesa/` | OSMesa + LLVMpipe (software only) |
|
||||
| GPU hardware drivers | `local/recipes/gpu/redox-drm/source/` | AMD + Intel DRM/KMS via redox-driver-sys |
|
||||
| Boot config | `config/*.toml` | TOML hierarchy, include-based |
|
||||
|
||||
## BUILD COMMANDS
|
||||
@@ -222,15 +223,15 @@ See `local/docs/AMD-FIRST-INTEGRATION.md` for the full plan.
|
||||
| ACPI power | ✅ | `\_PS0`/`\_PS3`/`\_PPC` AML methods available |
|
||||
| x2APIC/SMP | ✅ | Multi-core works |
|
||||
| IOMMU | ❌ | No AMD-Vi support |
|
||||
| AMD GPU | ❌ | Only VESA/GOP, no acceleration |
|
||||
| AMD GPU | 🚧 | MMIO mapped, DC port compiles, MSI-X wired, no hardware validation yet |
|
||||
|
||||
### Phased Roadmap
|
||||
|
||||
| Phase | Duration | Delivers |
|
||||
|-------|----------|----------|
|
||||
| ~~P0: Fix ACPI for AMD~~ | ~~4-6 weeks~~ | ✅ Complete — boots on modern AMD bare metal |
|
||||
| P1: Driver infrastructure | 8-12 weeks | redox-driver-sys + linux-kpi + firmware-loader |
|
||||
| P2: AMD GPU display | 12-16 weeks | redox-drm + AMD DC modesetting → scheme:drm |
|
||||
| ~~P1: Driver infrastructure~~ | ~~8-12 weeks~~ | ✅ Complete — redox-driver-sys + linux-kpi + firmware-loader + pcid /config + MSI-X (compiles) |
|
||||
| ~~P2: AMD GPU display~~ | ~~12-16 weeks~~ | ✅ Complete — redox-drm + AMD DC port + Intel driver (compiles, no HW validation) |
|
||||
| P3: POSIX + input | 4-8 weeks | relibc gaps + evdevd (parallel with P1/P2) |
|
||||
| P4: Wayland compositor | 4-6 weeks | Smithay Redox backends |
|
||||
| P5: Full amdgpu | 16-24 weeks | Complete GPU driver via LinuxKPI (parallel) |
|
||||
@@ -240,16 +241,17 @@ See `local/docs/AMD-FIRST-INTEGRATION.md` for the full plan.
|
||||
|
||||
### Critical Path
|
||||
```
|
||||
P0 (ACPI boot) ✅ DONE → P1 (driver infra) → P2 (AMD display) → P4 (Wayland) → P6 (KDE)
|
||||
P3 (POSIX+input) ──┘
|
||||
P5 (full amdgpu, parallel)
|
||||
P0 (ACPI boot) ✅ DONE → P1 (driver infra) ✅ DONE → P2 (AMD display) ✅ DONE → P4 (Wayland) → P6 (KDE)
|
||||
P3 (POSIX+input) ──────────────┘
|
||||
P5 (full amdgpu, parallel)
|
||||
```
|
||||
|
||||
### New Crates Needed
|
||||
1. `redox-driver-sys` — Safe Rust wrappers for scheme:memory, scheme:irq, scheme:pci
|
||||
2. `linux-kpi` — C headers translating Linux kernel APIs → redox-driver-sys
|
||||
3. `redox-drm` — DRM scheme daemon (AMD DC port)
|
||||
4. Firmware loader daemon — scheme:firmware for AMD GPU blobs
|
||||
### Custom Crates (P1/P2)
|
||||
1. `redox-driver-sys` — `local/recipes/drivers/redox-driver-sys/source/` — Safe Rust wrappers for scheme:memory, scheme:irq, scheme:pci
|
||||
2. `linux-kpi` — `local/recipes/drivers/linux-kpi/source/` — C headers translating Linux kernel APIs → redox-driver-sys
|
||||
3. `redox-drm` — `local/recipes/gpu/redox-drm/source/` — DRM scheme daemon (AMD + Intel drivers)
|
||||
4. `firmware-loader` — `local/recipes/system/firmware-loader/source/` — scheme:firmware for GPU blobs
|
||||
5. `amdgpu` — `local/recipes/gpu/amdgpu/source/` — AMD DC C port with linux-kpi compat
|
||||
|
||||
All custom work goes in `local/` — see `local/AGENTS.md` for overlay usage.
|
||||
|
||||
|
||||
@@ -22,9 +22,10 @@ Red Bear OS is a derivative of [Redox OS](https://www.redox-os.org) — a genera
|
||||
|
||||
| Component | Status | Detail |
|
||||
|-----------|--------|--------|
|
||||
| AMD GPU driver (amdgpu) | 🚧 In progress | LinuxKPI compat layer + AMD DC modesetting |
|
||||
| AMD GPU driver (amdgpu) | ✅ Compiles | LinuxKPI compat + AMD DC modesetting + MSI-X (no HW validation) |
|
||||
| Intel GPU driver | ✅ Compiles | Display pipe modesetting + MSI-X (no HW validation) |
|
||||
| ext4 filesystem | ✅ Compiles | Read/write ext4 alongside RedoxFS |
|
||||
| ACPI for AMD bare metal | ⚠️ Partial | x2APIC, DMAR, IVRS, MCFG parsing |
|
||||
| ACPI for AMD bare metal | ✅ Complete | x2APIC, MADT, FADT shutdown/reboot, power methods |
|
||||
| Custom branding | ✅ | Boot identity, hostname, os-release |
|
||||
| POSIX gaps (relibc) | 🚧 In progress | eventfd, signalfd, timerfd, open_memstream |
|
||||
|
||||
|
||||
@@ -0,0 +1,368 @@
|
||||
Red Bear OS Packaging System — Formal Spec v0.1
|
||||
|
||||
0. Guiding Principles
|
||||
Native-first
|
||||
All builds target: x86_64-unknown-redox
|
||||
All install artifacts: pkgar packages
|
||||
Cookbook is the build engine
|
||||
RBPKGBUILD = thin wrapper over Cookbook recipe
|
||||
PKGBUILD is input, not execution
|
||||
Never execute arbitrary PKGBUILD on host
|
||||
Always convert → RBPKGBUILD → Cookbook
|
||||
Single tool
|
||||
cub = one CLI binary with subcommands/flags
|
||||
Deterministic builds
|
||||
Controlled env
|
||||
No implicit host dependencies
|
||||
Security-first
|
||||
Sandbox builds
|
||||
Review BUR packages before install
|
||||
|
||||
1. RBPKGBUILD Specification
|
||||
|
||||
1.1 File Format
|
||||
Format: TOML
|
||||
Filename: RBPKGBUILD
|
||||
Versioned schema
|
||||
format = 1
|
||||
|
||||
1.2 Top-Level Sections
|
||||
format = 1
|
||||
|
||||
[package]
|
||||
[source]
|
||||
[dependencies]
|
||||
[build]
|
||||
[install]
|
||||
[patches]
|
||||
[compat]
|
||||
[policy]
|
||||
|
||||
1.3 [package]
|
||||
[package]
|
||||
name = "ripgrep"
|
||||
version = "14.1.0"
|
||||
release = 1
|
||||
description = "Fast recursive search tool"
|
||||
homepage = "https://github.com/BurntSushi/ripgrep"
|
||||
license = ["MIT", "Unlicense"]
|
||||
architectures = ["x86_64-unknown-redox"]
|
||||
maintainers = ["name <email>"]
|
||||
Rules
|
||||
name: lowercase, [a-z0-9-_]+
|
||||
version: upstream version
|
||||
release: integer (Red Bear-specific revision)
|
||||
architectures: must include x86_64-unknown-redox
|
||||
|
||||
1.4 [source]
|
||||
[source]
|
||||
sources = [
|
||||
{ type = "tar", url = "...", sha256 = "..." },
|
||||
{ type = "git", url = "...", rev = "..." }
|
||||
]
|
||||
Supported types
|
||||
tar
|
||||
git
|
||||
Rules
|
||||
All sources must be verifiable (hash or commit)
|
||||
No implicit downloads during build
|
||||
|
||||
1.5 [dependencies]
|
||||
[dependencies]
|
||||
build = ["cargo", "rust"]
|
||||
runtime = []
|
||||
check = []
|
||||
optional = []
|
||||
provides = []
|
||||
conflicts = []
|
||||
Rules
|
||||
Names must resolve via system mapping
|
||||
Must not reference Arch package names directly
|
||||
|
||||
1.6 [build]
|
||||
|
||||
Maps directly to Cookbook templates.
|
||||
|
||||
[build]
|
||||
template = "cargo" # or configure, cmake, meson, custom
|
||||
Optional fields
|
||||
cargo
|
||||
[build]
|
||||
template = "cargo"
|
||||
release = true
|
||||
features = []
|
||||
configure
|
||||
[build]
|
||||
template = "configure"
|
||||
args = ["--prefix=/usr"]
|
||||
cmake
|
||||
[build]
|
||||
template = "cmake"
|
||||
build_dir = "build"
|
||||
custom
|
||||
[build]
|
||||
template = "custom"
|
||||
|
||||
prepare = [
|
||||
"patch -p1 < patches/fix.patch"
|
||||
]
|
||||
|
||||
build = [
|
||||
"make -j$CORES"
|
||||
]
|
||||
|
||||
check = [
|
||||
"make test"
|
||||
]
|
||||
|
||||
install = [
|
||||
"make DESTDIR=$DESTDIR install"
|
||||
]
|
||||
|
||||
1.7 [install]
|
||||
|
||||
Declarative install mapping.
|
||||
|
||||
[install]
|
||||
bins = [
|
||||
{ from = "target/.../rg", to = "/usr/bin/rg" }
|
||||
]
|
||||
|
||||
libs = []
|
||||
headers = []
|
||||
docs = ["README.md"]
|
||||
man = []
|
||||
Rules
|
||||
All paths relative to build output
|
||||
Must install into staged root (DESTDIR)
|
||||
|
||||
1.8 [patches]
|
||||
[patches]
|
||||
files = [
|
||||
"patches/0001-fix-redox.patch"
|
||||
]
|
||||
|
||||
1.9 [compat]
|
||||
|
||||
Tracks conversion origin.
|
||||
|
||||
[compat]
|
||||
imported_from = "aur"
|
||||
original_pkgbuild = "PKGBUILD"
|
||||
conversion_status = "partial" # full | partial | manual
|
||||
target = "x86_64-unknown-redox"
|
||||
|
||||
1.10 [policy]
|
||||
[policy]
|
||||
allow_network = false
|
||||
allow_tests = true
|
||||
review_required = true
|
||||
|
||||
2. .RBSRCINFO (Metadata Cache)
|
||||
Purpose
|
||||
Fast search/index
|
||||
No recipe parsing needed
|
||||
Format (INI-like)
|
||||
pkgname = ripgrep
|
||||
pkgver = 14.1.0
|
||||
pkgrel = 1
|
||||
pkgdesc = Fast recursive search tool
|
||||
arch = x86_64-unknown-redox
|
||||
|
||||
depends =
|
||||
makedepends = cargo rust
|
||||
|
||||
source = https://...
|
||||
sha256sums = ...
|
||||
|
||||
provides =
|
||||
conflicts =
|
||||
|
||||
3. BUR Repository Spec
|
||||
Structure
|
||||
ripgrep/
|
||||
RBPKGBUILD
|
||||
.RBSRCINFO
|
||||
patches/
|
||||
import/
|
||||
PKGBUILD
|
||||
report.txt
|
||||
|
||||
4. cub CLI Specification
|
||||
|
||||
4.1 General
|
||||
Single binary: cub
|
||||
Rust implementation
|
||||
Subcommands via flags (not separate tools)
|
||||
|
||||
4.2 Core Commands
|
||||
Search
|
||||
cub -Ss <query>
|
||||
Install
|
||||
cub -S <package>
|
||||
|
||||
Resolution order:
|
||||
|
||||
official repo
|
||||
BUR (RBPKGBUILD)
|
||||
AUR import (optional flag)
|
||||
Build local
|
||||
cub -B .
|
||||
Fetch recipe
|
||||
cub -G <package>
|
||||
Inspect
|
||||
cub -Pi <package|RBPKGBUILD>
|
||||
Update system
|
||||
cub -Sua
|
||||
Clean cache
|
||||
cub -Sc
|
||||
Convert AUR
|
||||
cub --import-aur <url|name>
|
||||
|
||||
Outputs:
|
||||
|
||||
RBPKGBUILD
|
||||
patches/
|
||||
report.txt
|
||||
|
||||
5. PKGBUILD → RBPKGBUILD Conversion
|
||||
|
||||
5.1 Conversion Stages
|
||||
|
||||
Stage 1 — Parse
|
||||
|
||||
Extract:
|
||||
|
||||
pkgname
|
||||
pkgver
|
||||
depends
|
||||
source
|
||||
functions
|
||||
|
||||
Stage 2 — Normalize
|
||||
Resolve arrays
|
||||
Expand variables
|
||||
Strip bash constructs
|
||||
|
||||
Stage 3 — Map
|
||||
|
||||
PKGBUILD RBPKGBUILD
|
||||
pkgname package.name
|
||||
pkgver package.version
|
||||
depends dependencies.runtime
|
||||
makedepends dependencies.build
|
||||
source source.sources
|
||||
|
||||
Stage 4 — Detect build system
|
||||
|
||||
Patterns:
|
||||
|
||||
Pattern Template
|
||||
cargo build cargo
|
||||
./configure configure
|
||||
cmake cmake
|
||||
meson meson
|
||||
none custom
|
||||
|
||||
Stage 5 — Generate RBPKGBUILD
|
||||
Fill required fields
|
||||
Insert detected template
|
||||
Add compat section
|
||||
|
||||
Stage 6 — Patch generation
|
||||
|
||||
If:
|
||||
|
||||
/usr/lib/systemd
|
||||
/proc
|
||||
systemctl
|
||||
|
||||
→ generate:
|
||||
|
||||
patch stub
|
||||
warning entry
|
||||
Stage 7 — Report
|
||||
|
||||
report.txt
|
||||
|
||||
Conversion: PARTIAL
|
||||
|
||||
Warnings:
|
||||
- Uses systemd
|
||||
- Hardcoded /usr/lib
|
||||
|
||||
Actions required:
|
||||
- Patch install paths
|
||||
- Remove systemctl usage
|
||||
|
||||
5.2 Conversion Modes
|
||||
Mode Description
|
||||
full fully automated
|
||||
partial needs patches
|
||||
manual user intervention
|
||||
|
||||
6. Build Execution
|
||||
Environment
|
||||
TARGET=x86_64-unknown-redox
|
||||
GNU_TARGET=x86_64-redox
|
||||
|
||||
DESTDIR=/build/stage
|
||||
PREFIX=/usr
|
||||
|
||||
CORES=8
|
||||
Sandbox Rules
|
||||
No network after fetch
|
||||
Isolated filesystem
|
||||
No host writes
|
||||
Controlled PATH
|
||||
Execution Flow
|
||||
cub
|
||||
→ parse RBPKGBUILD
|
||||
→ generate Cookbook recipe
|
||||
→ run build
|
||||
→ stage files
|
||||
→ create pkgar
|
||||
→ install
|
||||
|
||||
7. Dependency Mapping
|
||||
Mapping file
|
||||
[mapping]
|
||||
glibc = "relibc-compat"
|
||||
base-devel = "build-base"
|
||||
|
||||
8. Error Handling
|
||||
Hard Fail
|
||||
Missing source hash
|
||||
Unknown build template
|
||||
Unsupported architecture
|
||||
Soft Fail (warn)
|
||||
Linux-specific paths
|
||||
missing tests
|
||||
partial conversion
|
||||
|
||||
9. Security Model
|
||||
BUR = untrusted
|
||||
Require review on first install
|
||||
Signed packages preferred
|
||||
Build sandbox enforced
|
||||
|
||||
10. MVP Scope
|
||||
MUST implement
|
||||
RBPKGBUILD parser
|
||||
Cookbook adapter
|
||||
pkgar integration
|
||||
cub CLI core commands
|
||||
basic AUR conversion
|
||||
dependency mapping
|
||||
sandbox build
|
||||
MUST NOT implement yet
|
||||
full PKGBUILD shell compatibility
|
||||
split packages
|
||||
pacman compatibility
|
||||
hook system
|
||||
|
||||
11. Final Definition
|
||||
|
||||
RBPKGBUILD is a declarative Red Bear build wrapper over Cookbook recipes.
|
||||
cub is a Rust CLI tool that manages installation, building, and conversion from AUR PKGBUILD into RBPKGBUILD, using BUR as the community repository.
|
||||
All builds target x86_64-unknown-redox and produce pkgar packages.
|
||||
+3
-3
@@ -71,13 +71,13 @@ redox-master/ ← git pull updates mainline Redox
|
||||
│ │ ├── core/ ← ext4d (ext4 filesystem scheme daemon + mkfs tool)
|
||||
│ │ ├── branding/ ← redbear-release (os-release, hostname, motd)
|
||||
│ │ ├── drivers/ ← redox-driver-sys, linux-kpi
|
||||
│ │ ├── gpu/ ← redox-drm (AMD + Intel display drivers)
|
||||
│ │ ├── gpu/ ← redox-drm (AMD + Intel display drivers), amdgpu (C port)
|
||||
│ │ ├── system/ ← evdevd, udev-shim, firmware-loader, redbear-meta
|
||||
│ │ ├── wayland/ ← Wayland compositor (Phase 4)
|
||||
│ │ └── kde/ ← KDE Plasma (Phase 6)
|
||||
│ ├── patches/
|
||||
│ │ ├── kernel/ ← Kernel patches (ACPI, x2APIC)
|
||||
│ │ ├── base/ ← Base patches (acpid fixes, power methods)
|
||||
│ │ ├── base/ ← Base patches (acpid fixes, power methods, pcid /config endpoint)
|
||||
│ │ ├── relibc/ ← relibc patches (POSIX: eventfd, signalfd, timerfd)
|
||||
│ │ ├── bootloader/ ← Bootloader patches
|
||||
│ │ └── installer/ ← Installer patches (ext4 filesystem support)
|
||||
@@ -224,7 +224,7 @@ local/Assets/
|
||||
| loading background.png | Boot splash | Convert to framebuffer-compatible format, display before orbital starts |
|
||||
| loading background.png | Login screen | Set as orblogin/orbital background |
|
||||
|
||||
**Current status**: Assets are committed to git. Not yet integrated into the build — requires bootloader and display server changes (Phase 2+).
|
||||
**Current status**: Assets are committed to git. Not yet integrated into the build — requires bootloader and display server integration (P2 hardware validation).
|
||||
|
||||
## ANTI-PATTERNS
|
||||
|
||||
|
||||
@@ -20,15 +20,15 @@ P0 ACPI work is **complete**. Kernel patch is 574 lines, base/acpid patch is 558
|
||||
| DSDT (Differentiated System Description Table) | Parsed by `acpi` crate AML interpreter | Working | Platform-specific device config via AML bytecode |
|
||||
| SSDT (Secondary System Description Table) | Parsed by `acpi` crate AML interpreter | Working | Secondary AML tables (hotplug, etc.) |
|
||||
| FACP/FADT | ✅ Full parse in acpid | ✅ Done | PM registers, reset register, sleep states, `\_S5` |
|
||||
| IVRS (AMD-Vi IOMMU) | Removed (broken stub) | Deferred to P2+ | Needs real AMD IOMMU implementation |
|
||||
| MCFG (PCI Express config space) | Removed (broken stub) | Deferred to P2+ | Handled by pcid instead |
|
||||
| IVRS (AMD-Vi IOMMU) | Removed (broken stub) | Deferred to P5+ | Needs real AMD IOMMU implementation |
|
||||
| MCFG (PCI Express config space) | Removed (broken stub) | ✅ Handled by pcid | pcid /config endpoint provides direct PCI config space access |
|
||||
| DBG2 (Debug port) | Not implemented | Low | Serial debug port discovery |
|
||||
| BGRT (Boot graphics) | Not implemented | Low | Boot logo preservation |
|
||||
| FPDT (Firmware perf data) | Not implemented | Low | Boot performance metrics |
|
||||
|
||||
IVRS and MCFG were previously listed as "implemented" but the stubs were broken. They have
|
||||
been removed from acpid. IVRS needs a real AMD IOMMU driver (P2+ scope). MCFG is better
|
||||
handled by pcid discovering PCIe config space directly.
|
||||
IVRS was previously listed as "implemented" but the stub was broken. It has been removed
|
||||
from acpid. IVRS needs a real AMD IOMMU driver (P5+ scope). MCFG is now handled by
|
||||
pcid's /config endpoint (P1 complete) which provides direct PCI config space access.
|
||||
|
||||
## Implemented ACPI Tables
|
||||
|
||||
|
||||
@@ -23,11 +23,11 @@ the LinuxKPI compatibility approach — a clean Rust rewrite would take 5+ years
|
||||
|-----------|--------|--------|
|
||||
| UEFI boot | ✅ Works | x86_64 UEFI bootloader functional |
|
||||
| AMD CPUs | ✅ Works | AMD 32/64-bit supported, Ryzen Threadripper verified |
|
||||
| ACPI | ⚠️ Incomplete | Framework Laptop 16 crashes on unimplemented ACPI function |
|
||||
| ACPI | ✅ Complete | RSDP/SDT checksums, MADT types 0x4/0x5/0x9/0xA, LVT NMI, FADT shutdown/reboot |
|
||||
| x2APIC | ✅ Works | Auto-detected via CPUID, APIC/SMP functional |
|
||||
| HPET | ✅ Works | Timer initialized from ACPI |
|
||||
| IOMMU | ❌ Missing | No VT-d or AMD-Vi support |
|
||||
| AMD GPU | ❌ Missing | Only VESA/GOP framebuffer, no acceleration |
|
||||
| AMD GPU | 🚧 In progress | MMIO mapped, DC port compiles, MSI-X wired, no hardware validation yet |
|
||||
| Wi-Fi/BT | ❌ Missing | No wireless support |
|
||||
| USB | ⚠️ Variable | Some USB controllers work, others don't |
|
||||
|
||||
@@ -223,6 +223,57 @@ ONLY the display/modesetting portion first, using linux-kpi headers.
|
||||
|
||||
---
|
||||
|
||||
## P1/P2 IMPLEMENTATION STATUS (2026-04-12)
|
||||
|
||||
### P1: Driver Infrastructure — COMPLETE (compiles)
|
||||
|
||||
| Component | Status | Files |
|
||||
|-----------|--------|-------|
|
||||
| redox-driver-sys | ✅ | `local/recipes/drivers/redox-driver-sys/source/` — PCI, IRQ (MSI-X), MMIO, DMA |
|
||||
| linux-kpi | ✅ | `local/recipes/drivers/linux-kpi/source/` — C compat headers + Rust shims |
|
||||
| firmware-loader | ✅ | `local/recipes/system/firmware-loader/source/` — scheme:firmware daemon |
|
||||
| pcid /config endpoint | ✅ | `local/patches/base/P0-pcid-config-endpoint.patch` — raw PCI config space via scheme:pci |
|
||||
| MSI-X interrupt support | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/interrupt.rs` — shared MSI-X/legacy abstraction |
|
||||
| Intel pcid-spawner config | ✅ | `local/config/pcid.d/intel_gpu.toml` — auto-detect Intel GPUs |
|
||||
|
||||
### P2: AMD GPU Display — COMPLETE (compiles, no HW validation)
|
||||
|
||||
| Component | Status | Files |
|
||||
|-----------|--------|-------|
|
||||
| redox-drm daemon | ✅ | `local/recipes/gpu/redox-drm/source/` — DRM scheme daemon |
|
||||
| AMD driver (Rust) | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/amd/mod.rs` |
|
||||
| AMD DisplayCore (FFI) | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/amd/display.rs` |
|
||||
| AMD PCI stubs (dynamic) | ✅ | `local/recipes/gpu/amdgpu/source/redox_stubs.c` — populated from Rust via FFI |
|
||||
| AMD DC init (C) | ✅ | `local/recipes/gpu/amdgpu/source/amdgpu_redox_main.c` — modesetting, connector detect |
|
||||
| AMD glue headers | ✅ | `local/recipes/gpu/amdgpu/source/redox_glue.h` — Linux compat surface |
|
||||
| GTT manager | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/amd/gtt.rs` |
|
||||
| Ring buffer | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/amd/ring.rs` |
|
||||
| GEM buffer mgmt | ✅ | `local/recipes/gpu/redox-drm/source/src/gem.rs` |
|
||||
| DMA-BUF | ✅ | `local/recipes/gpu/redox-drm/source/src/dmabuf.rs` |
|
||||
| Intel driver | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/intel/mod.rs` + `display.rs` |
|
||||
|
||||
### Build Verification
|
||||
|
||||
All crates compile with `cargo check` (0 errors):
|
||||
- `redox-driver-sys` ✅
|
||||
- `linux-kpi` ✅
|
||||
- `redox-drm` ✅
|
||||
- `firmware-loader` ✅
|
||||
- `evdevd` ✅
|
||||
- `udev-shim` ✅
|
||||
- `ext4d` ✅
|
||||
|
||||
### Next Steps (P2 → P3)
|
||||
|
||||
P2 code compiles but has NOT been validated on real hardware. Remaining:
|
||||
1. Flash Red Bear OS image to USB, boot on AMD hardware with RDNA2/RDNA3 GPU
|
||||
2. Verify pcid exposes `/scheme/pci/{addr}/config` and MSI-X vectors allocate
|
||||
3. Verify redox-drm detects GPU, maps MMIO, initializes DC
|
||||
4. Test connector detection and modesetting via scheme:drm
|
||||
5. Begin P3 (POSIX gaps + evdevd) in parallel with hardware validation
|
||||
|
||||
---
|
||||
|
||||
## PHASE 3: INPUT + POSIX (4-8 weeks, parallel with Phase 2)
|
||||
|
||||
### P3-1: relibc POSIX Gaps (2-4 weeks)
|
||||
|
||||
@@ -25,7 +25,7 @@ DRM scheme daemon. Registers scheme:drm/card0.
|
||||
- GEM: buffer object create/mmap/close
|
||||
- Dispatches to AMD driver backend
|
||||
|
||||
### amdgpu source (local/recipes/gpu/amdgpu-source/)
|
||||
### amdgpu C port (local/recipes/gpu/amdgpu/source/)
|
||||
AMD GPU driver source extracted from Linux 7.0-rc7:
|
||||
- drivers/gpu/drm/amd/ — full AMD driver (269k lines)
|
||||
- drivers/gpu/drm/ttm/ — TTM memory manager
|
||||
@@ -38,11 +38,10 @@ Compiles AMD DC display code against linux-kpi headers with -D__redox__:
|
||||
- redox_glue.h — type compatibility, function stubs, macro replacements
|
||||
- redox_stubs.c — C implementations of Linux kernel API stubs
|
||||
- amdgpu_redox_main.c — daemon entry point replacing module_init
|
||||
- Makefile.redox — standalone build for development
|
||||
|
||||
## Build Integration
|
||||
|
||||
Config: local/config/my-amd-desktop.toml
|
||||
Config: config/redbear-desktop.toml (includes desktop.toml + Red Bear GPU packages)
|
||||
- Includes redox-drm and amdgpu packages
|
||||
- filesystem_size = 8196 (8GB, needs space for firmware blobs)
|
||||
|
||||
@@ -89,9 +88,12 @@ pcid: local/config/pcid.d/amd_gpu.toml
|
||||
|------|---------|
|
||||
| local/recipes/gpu/redox-drm/ | DRM scheme daemon |
|
||||
| local/recipes/gpu/amdgpu/ | Build recipe + integration glue |
|
||||
| local/recipes/gpu/amdgpu-source/ | AMD driver source (from Linux 7.0-rc7) |
|
||||
| local/config/my-amd-desktop.toml | Build config |
|
||||
| local/config/pcid.d/amd_gpu.toml | PCI auto-detection |
|
||||
| local/recipes/gpu/amdgpu/source/ | AMD driver C port source (from Linux 7.0-rc7) |
|
||||
| config/redbear-desktop.toml | Build config |
|
||||
| local/config/pcid.d/amd_gpu.toml | PCI auto-detection (AMD) |
|
||||
| local/recipes/gpu/redox-drm/source/src/drivers/interrupt.rs | MSI-X/legacy interrupt abstraction |
|
||||
| local/config/pcid.d/intel_gpu.toml | Intel GPU PCI auto-detection |
|
||||
| local/patches/base/P0-pcid-config-endpoint.patch | pcid /config file endpoint |
|
||||
| local/scripts/build-amd.sh | Build wrapper |
|
||||
| local/scripts/test-amd-gpu.sh | Test script |
|
||||
|
||||
@@ -102,3 +104,25 @@ pcid: local/config/pcid.d/amd_gpu.toml
|
||||
| redox-driver-sys | ✅ | MmioRegion, PciDevice, IrqHandle, DmaBuffer |
|
||||
| linux-kpi | ✅ | C headers, FFI stubs (kmalloc, mutex, spinlock...) |
|
||||
| firmware-loader | ✅ | scheme:firmware daemon |
|
||||
|
||||
## P1/P2 Changes Since Initial Implementation
|
||||
|
||||
### pcid /config endpoint (T1)
|
||||
- Added `Config { addr: PciAddress }` handle to pcid scheme
|
||||
- Routes `/scheme/pci/{addr}/config` to raw PCI config space read/write
|
||||
- Enables redox-driver-sys PciDevice to access config space for MSI-X, BAR parsing
|
||||
|
||||
### MSI-X interrupt support (T2-T4)
|
||||
- Created shared `InterruptHandle` enum in `redox-drm/src/drivers/interrupt.rs`
|
||||
- Tries MSI-X first (find capability → parse → map table → mask_all → enable → request_vector)
|
||||
- Falls back to legacy IRQ if MSI-X unavailable
|
||||
- Both AMD and Intel drivers use `InterruptHandle::setup()`
|
||||
|
||||
### Dynamic PCI device info (T6)
|
||||
- Replaced hardcoded `redox_pci_find_amd_gpu()` stub with `redox_pci_set_device_info()`
|
||||
- Rust side passes real PciDeviceInfo (vendor, device, revision, IRQ, BAR0/BAR2) to C via FFI
|
||||
- C layer validates the struct is populated before `amdgpu_redox_init()` uses it
|
||||
|
||||
### Intel GPU support (T4-T5)
|
||||
- Intel driver switched to shared `InterruptHandle` (MSI-X + legacy)
|
||||
- Added `local/config/pcid.d/intel_gpu.toml` for auto-detection (vendor 0x8086, class 0x03)
|
||||
|
||||
Reference in New Issue
Block a user