Device manager (increment 1): discover + match
The device manager is the ring-3 process that turns the device tree into a running system — the udev-analog. It is mechanism-vs-policy done right: the kernel enumerates the hardware and enforces the claim capability; this decides which driver serves which device, using no special privilege (the same device_enumerate any process could call). This first increment does the discovery + matching half: system/services/ device-manager enumerates /system/devices, matches each device to a driver by class (a small static policy table), and logs the decision — finding the HPET (a timer) and deciding `hpet` serves it. It does not spawn yet: spawning needs a `system_spawn` system call (the kernel spawns every initial-ramdisk binary in a loop today), which is the next increment. New `device-manager` test; suite 36/36 plus host tests.
This commit is contained in:
@@ -257,6 +257,7 @@ pub fn build(b: *std.Build) void {
|
||||
const vfstest_exe = addUserBinary(b, kernel_target, runtime_module, posix_module, "vfs-test", "system/services/vfs/vfs-test.zig");
|
||||
const hpet_exe = addUserBinary(b, kernel_target, runtime_module, posix_module, "hpet", "system/drivers/hpet/hpet.zig");
|
||||
const bus_exe = addUserBinary(b, kernel_target, runtime_module, posix_module, "bus", "system/drivers/bus/bus.zig");
|
||||
const device_manager_exe = addUserBinary(b, kernel_target, runtime_module, posix_module, "device-manager", "system/services/device-manager/device-manager.zig");
|
||||
|
||||
// Pack the user binaries into the initial_ramdisk image with the host-side Python tool
|
||||
// (the container format is trivial, and Python sidesteps std API churn). Args:
|
||||
@@ -272,11 +273,14 @@ pub fn build(b: *std.Build) void {
|
||||
mk_run.addFileArg(hpet_exe.getEmittedBin());
|
||||
mk_run.addArg("bus");
|
||||
mk_run.addFileArg(bus_exe.getEmittedBin());
|
||||
mk_run.addArg("device-manager");
|
||||
mk_run.addFileArg(device_manager_exe.getEmittedBin());
|
||||
|
||||
// Also install the packed binaries to their FHS homes, so zig-out is a true image
|
||||
// of the filesystem — even though at boot they arrive inside the initial-ramdisk.
|
||||
for ([_]struct { *std.Build.Step.Compile, []const u8 }{
|
||||
.{ vfs_exe, "system/services" },
|
||||
.{ device_manager_exe, "system/services" },
|
||||
.{ hpet_exe, "system/drivers" },
|
||||
.{ bus_exe, "system/drivers" },
|
||||
}) |entry| {
|
||||
|
||||
Reference in New Issue
Block a user