777a2c71d3
Cross-referenced with Linux 7.1 drivers/usb/core/hub.c port event handling and drivers/usb/core/driver.c device-driver binding. New daemon (216 lines) that watches USB controllers for device attachment/detachment and auto-spawns the appropriate class driver. Architecture: - Polls /scheme/usb/ every 1000ms for controller directories - For each controller, enumerates root hub ports - Reads device descriptors (class/subclass/protocol) via XhciClientHandle - Maps class to driver binary: HID(0x03)→usbhidd, Storage(0x08)→usbscsid, Hub(0x09)→usbhubd - Spawns driver with <scheme> <port> <protocol> arguments - Tracks spawned Child processes in HashMap<port_path, TrackedDevice> - Detects disconnection (descriptor read fails) → kills driver + removes from tracking - Detects driver exit (try_wait) → removes from tracking - Skips hub interfaces (usbhubd handles its own children) Config: - Added to redbear-mini.toml (inherited by redbear-full) - Auto-started via 02_usb_hotplug.service (oneshot_async, after base.target and pcid-spawner) Driver map supports: HID (0x03), Mass Storage (0x08 with BOT protocol), Hub (0x09). Additional class drivers extendable via DRIVER_MAP constant.
20 lines
610 B
TOML
20 lines
610 B
TOML
[package]
|
|
name = "redbear-usb-hotplugd"
|
|
version = "0.2.5"
|
|
edition = "2024"
|
|
|
|
[[bin]]
|
|
name = "redbear-usb-hotplugd"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
log = "0.4"
|
|
redox_syscall = { path = "../../../../../local/sources/syscall" }
|
|
libredox = { path = "../../../../../local/sources/libredox", features = ["call", "std"] }
|
|
xhcid = { path = "../../../../../local/sources/base/drivers/usb/xhcid" }
|
|
common = { path = "../../../../../local/sources/base/drivers/common" }
|
|
|
|
[patch.crates-io]
|
|
redox_syscall = { path = "../../../../../local/sources/syscall" }
|
|
libredox = { path = "../../../../../local/sources/libredox" }
|